Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: Karcrack en 26 Septiembre 2010, 21:50 pm



Título: Buenos habitos para hacer queries SQL?
Publicado por: Karcrack en 26 Septiembre 2010, 21:50 pm
Iba a poner este tema en la sección de PHP, pero creo que aqui sabreis informarme mejor :P

Antes que nada, decir que voy a iniciar de aqui poco un pequeño proyecto y en el hay partes PHP que trabajan con bases de datos.. Mi pregunta es simple:

Cuales son los buenos habitos a la hora de acceder a la base de datos desde PHP? Para evitar inyecciones y tal...

Muchas gracias ;)


Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: bizco en 26 Septiembre 2010, 22:43 pm
Pues limpiar siempre la cadena, todos los datos por tontos que puedan parecer si vienen de la parte cliente limpialos pq puede que contengan algo que tu script no espera y ahi empiezan los problemas. de todos modos cuando lo tengas listo si quieres puedes publicarlo y entre unos y otros podemos ver si hay algo raro.


Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: tragantras en 26 Septiembre 2010, 22:58 pm
Hola Karcrack, antes que nada, especial ojo a TODOS los valores que se reciban por parte del usuario, esto incluye (pero no se limita a ):

COOKIES
X_FORWARDED_FOR
CABECERAS EN GENERAL
GETs
POSTs
VARIABLES DE SESION...

las cadenas encierralas en la query que vayas a hacer entre comillas simples, y aplicale mysql_real_escape_string, así mismo los valores numéricos deberías hacerle un casting a entero mediante (int), si quiers comprueba primero que sea numerico (is_numeric()).

Magic quotes off, ya sabes y... bueno, poca cosa más, cuando entre en linux si quiers te subo un cheatsheet sobre seguridad web, está muy bien resumido todo


Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: MazarD en 11 Octubre 2010, 15:07 pm
Para evitar inyecciones sql lo más fácil y seguro es simplemente utilizar prepared statements.

Saludos.



Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: Karcrack en 11 Octubre 2010, 15:35 pm
Me recomiendas algun enlace sobre el tema?
Gracias ;)


Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: MazarD en 11 Octubre 2010, 16:56 pm
Que mejor que php.net: http://www.php.net/manual/en/intro.pdo.php
Y el capitulo sobre prepared statements: http://www.php.net/manual/en/pdo.prepared-statements.php

Es lo mismo en todos los lenguajes, el tema es que hay que separar la consulta de los valores, como no puede haber confusión no puede haber inyección de código... entre otras ventajas como el rendimiento.

Saludos.




Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: tragantras en 11 Octubre 2010, 16:59 pm
Para evitar inyecciones sql lo más fácil y seguro es simplemente utilizar prepared statements.

Saludos.


eso es un mito urbano eh, las prepared statements tmb son vulnerables. Pongo un link a una presentacion en la que se muestra todo eso y métodos pra protegerse y asi contesto tmb a Karcrack:  http://www.slideshare.net/billkarwin/sql-injection-myths-and-fallacies


Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: MazarD en 11 Octubre 2010, 17:07 pm
De leyenda urbana nada, tu enlace habla de stored procedures donde se está creando una sql dinámica, una vez más, concatenando valores a la consulta en lugar de hacer un bind del valor en un prepared statment.

Evidentemente si haces un prepare('select * from tabla where val='.$val) vas a tener problemas xD pero la idea es hacer:
prepare('select * from tabla where val=?'); bindParam(1, $val);

Que es lo normal cuando se usan prepared statements, sino que sentido tiene? si seguramente ni te va a cachear la siguiente consulta cuando cambies de valor?

Saludos.


Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: tragantras en 11 Octubre 2010, 18:20 pm
Te doy la total razón, pero estarás conmigo entonces en que tu frase era incorrecta (formalmente hablando), una prepared statement no es segura "per se" sino que lo es porque aporta procedimientos que la hacen segura.

Sin duda alguna, es la manera correcta de hacer aplicaciones seguras, un saludo =)



Título: Re: Buenos habitos para hacer queries SQL?
Publicado por: el-brujo en 11 Octubre 2010, 23:29 pm
están hablando de lo mismo en dos sitios diferentes a la vez  :P

¿cómo evitar inyección sql en php?  
http://foro.elhacker.net/php/iquestcomo_evitar_inyeccion_sql_en_php-t307274.0.html