elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Como evito SQL Inyection?
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Como evito SQL Inyection?  (Leído 5,078 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Como evito SQL Inyection?
« en: 7 Diciembre 2009, 18:12 pm »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 885


mazard.info


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #1 en: 7 Diciembre 2009, 18:38 pm »

Si usas php>=5 y mysql>=4.1 lo mejor es que uses prepared statments
Si 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 :P


En línea

-Learn as if you were to live forever, live as if you were to die tomorrow-

http://www.mazard.info
irc://irc.freenode.org/elhacker.net
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #2 en: 7 Diciembre 2009, 19:22 pm »

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í :P)
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Como evito SQL Inyection?
« Respuesta #3 en: 7 Diciembre 2009, 19:31 pm »

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 Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #4 en: 7 Diciembre 2009, 19:40 pm »

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
Colaborador
***
Desconectado Desconectado

Mensajes: 885


mazard.info


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #5 en: 7 Diciembre 2009, 19:51 pm »

Citar
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.info
irc://irc.freenode.org/elhacker.net
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #6 en: 7 Diciembre 2009, 20:21 pm »

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 :D

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
Colaborador
***
Desconectado Desconectado

Mensajes: 885


mazard.info


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #7 en: 8 Diciembre 2009, 16:07 pm »

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.

Citar
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 :P
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.info
irc://irc.freenode.org/elhacker.net
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #8 en: 8 Diciembre 2009, 19:36 pm »

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 Desconectado

Mensajes: 6.336

he vuelto :)


Ver Perfil WWW
Re: Como evito SQL Inyection?
« Respuesta #9 en: 8 Diciembre 2009, 19:40 pm »

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 :P
En línea

Ojo por ojo, y el mundo acabará ciego.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines