Autor
|
Tema: Como evito SQL Inyection? (Leído 5,078 veces)
|
Skeletron
Desconectado
Mensajes: 1.731
A long way to go
|
Hola gente.. les comento que en mi web, tengo algunas entradas y salidas de datos, que me gustarian mejroarlas en seguridad.. para evitar SQL Inyection.
Supongamos en el metodo INSERT: $res = mysql_query("INSERT INTO mails (mail) VALUES ('" . $_POST['mail'] . "')");
Y en el metodo SELECT: $res = mysql_query("SELECT calle FROM locales WHERE calle = '" . $_POST['direccion'] . "' ORDER BY calle"); while($row = mysql_fetch_array($res)){ echo $row['calle'] . "<br />"; }
Y que me dicen del UPDATE???
|
|
|
En línea
|
|
|
|
MazarD
|
Si usas php>=5 y mysql>=4.1 lo mejor es que uses prepared statmentsSi no, tienes que escapar los caracteres especiales, utilizando mysql_real_escape_string($_POST['VAR']) o htmlentities($_POST['VAR'],ENT_QUOTES)De todos modos hay mucha información sobre esto en el foro Saludos! pd:y seguramente este hilo debería ir en el subforo de php
|
|
|
En línea
|
-Learn as if you were to live forever, live as if you were to die tomorrow- http://www.mazard.infoirc://irc.freenode.org/elhacker.net
|
|
|
Skeletron
Desconectado
Mensajes: 1.731
A long way to go
|
Ohhh por dios.. no me gusta todo eso que se ve ahi..!!! Porque tanto codigo? En cada consulta SQL, con poner mysql_real_escape_string($xxx) ya es suficiente? Y al presentar los datos en la web, colocar el htmlspeciacharacters() de php (no recuerdo si se escribiía así )
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
Para intentar protegerte de inyecciones SQL tienes softwares como este: http://www.greensql.net/Pero si quieres algo mas personalizado, puedes crear dentro del motor de BD procedimientos almacenados y pasarle cierta cantidad de parametros, tambien existen en php creo que magic_quotes... (O no se bien, en Perl se conoce como placeholder) en php no se como se llame esta tecnica, pero tambien se utiliza dentro del lenguaje scripting para intentar evitar las inyecciones SQL.
|
|
|
En línea
|
|
|
|
Skeletron
Desconectado
Mensajes: 1.731
A long way to go
|
Veré el Software, y lo del magicquotes..
porque esta sentencia: "INSERT INTO mails (mail) VALUES ('" . mysql_real_escape_string($_POST['mail']) . "')" Me sigue ingresando perfectamente..
|
|
|
En línea
|
|
|
|
MazarD
|
porque esta sentencia: "INSERT INTO mails (mail) VALUES ('" . mysql_real_escape_string($_POST['mail']) . "')" Me sigue ingresando perfectamente.. Que significa que te sigue ingresando perfectamente? Con mysql_real_escape_string lo que consigues es que los caracteres especiales como las comillas simple se escapen con \', asi te aseguras que no cierran la primera comilla y añaden codigo. Por lo tanto si a $_POST['mail'] se le pasa: '); drop database bd;-- Puedes estar seguro de que en mails se habrá insertado "'); drop database bd;"-- y no se habrá borrado la base de datos. Y añadir capas de software para prevenir esto como comenta ^Tifa^ siempre está genial, pero programar bien para evitarlo tampoco cuesta nada y es aún más seguro Saludos!
|
|
« Última modificación: 7 Diciembre 2009, 19:53 pm por MazarD »
|
En línea
|
-Learn as if you were to live forever, live as if you were to die tomorrow- http://www.mazard.infoirc://irc.freenode.org/elhacker.net
|
|
|
Skeletron
Desconectado
Mensajes: 1.731
A long way to go
|
Huy.. es verdad... que idiota.. creí que tambien en la base de datos iba a aparecer el \' Perfecto entonces... FUnciona perfectamente el "ingresado" de datos Los amo... Y en cuanto al UPDATE, hay que hacer lo mismo, o no? Y para evitar XSS, imprimo los campos con htmlspecialchars? o htmlentities?
|
|
|
En línea
|
|
|
|
MazarD
|
Si, hay que hacer lo mismo siempre que construyas sql dinámicamente a partir de la entrada del usuario, en el caso de que construyas el sql con un campo numérico debes comprobar también la entrada con un is_numeric() para que no haya inyección. if (!is_numeric($_POST['edad']) exit(1); $r=mysql_query('insert into usuario (mail,edad) values (\''.mysql_real_escape_string($_POST['mail']) .'\','.$_POST['edad'].')'); Pues si, para evitar xss con htmlspecialchars ya te vale puesto que convierte solo lo peligroso, aunque yo siempre utilizo htmlentities por costumbre, te transforma todos los tags posibles aunque la mayoría no sean necesarios teniendo bien puesto el encoding Tienes que vigilar siempre todo get, post y cookie. No se que libro que leí hace mucho empezaba con: "La entrada del usuario es siempre incorrecta y peligrosa hasta que se demuestre lo contrario" Después así sobre seguridad web relacionado también te quedaría prevenir CSRF sin tener en cuenta todo lo más simple: path traversal, rfi, lfi, etc... Saludos!
|
|
« Última modificación: 8 Diciembre 2009, 16:12 pm por MazarD »
|
En línea
|
-Learn as if you were to live forever, live as if you were to die tomorrow- http://www.mazard.infoirc://irc.freenode.org/elhacker.net
|
|
|
Skeletron
Desconectado
Mensajes: 1.731
A long way to go
|
Jamas entendi CSRF (tampoco investigue mucho) Acabo de leer los otros items, y no me imagine esas vulnerabilidades.
A la web la tengo en un hosting, así que creo que varias vulnerabilidades estan evitadas por software..
Nadie conoce algun libro o algun documento donde se hablen de las vulnerabilidades mas generles a nivel web?
|
|
|
En línea
|
|
|
|
Nakp
casi es
Ex-Staff
Desconectado
Mensajes: 6.336
he vuelto :)
|
cross site request forgery... el ejemplo mas burdo es cuando muestras un link en una imagen (el link de eliminiar algo por ejemplo) pero solo lo puede ejecutar alguien con permisos, sin embargo no pide un token asi que al "ver la imagen" el que tiene permisos, ejecuta alguna accion sin su consentimiento
|
|
|
En línea
|
Ojo por ojo, y el mundo acabará ciego.
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Uso de los HOIC/LOIC -Cómo evito que se me encuentre-
Redes
|
PseudoTrue
|
0
|
2,445
|
5 Julio 2012, 04:29 am
por PseudoTrue
|
|
|
¿como evito que sea vivible el serial de un Crackme?
Ingeniería Inversa
|
xivan25
|
5
|
2,834
|
30 Marzo 2013, 23:16 pm
por MCKSys Argentina
|
|
|
[Pregunta]: ¿Cómo evito esto al usar .prepend() en jQuery?
Desarrollo Web
|
Leguim
|
5
|
3,304
|
21 Agosto 2021, 01:12 am
por Leguim
|
|
|
¿como evito bugs usando argv y memcpy?
Programación C/C++
|
otroWeyMas.nasm
|
2
|
2,817
|
17 Abril 2022, 02:56 am
por otroWeyMas.nasm
|
|
|
¿Cómo puedo evitó que lean mi código?
Scripting
|
Ronxs
|
8
|
8,854
|
13 Marzo 2024, 13:21 pm
por Conejo Blanco
|
|