Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: ZharkD en 29 Marzo 2010, 20:48 pm



Título: Duda interaccion PHP-SQL
Publicado por: ZharkD en 29 Marzo 2010, 20:48 pm
Buenas,

Pues me estoy iniciando de lleno a conexion entre php y sql, por lo que eh optado por crear algunos scripts basicos apra entrenar XD

Bueno, segun lei en un tutorial, es bueno aplicarle filtros a las variables que se almacenaran en la base de datos.
Mas especificamente algo asi:
Código
  1. // Filtramos y asignamos variable a los datos obtenidos (PHP 5)
  2. $user = filter_input(INPUT_POST, 'reg_user', FILTER_SANITIZE_SPECIAL_CHARS);
  3. $mail = filter_input(INPUT_POST, 'reg_mail', FILTER_SANITIZE_SPECIAL_CHARS);
  4. $pass = md5($_POST['reg_pass']); // En el caso de la contraseña, no filtramos, solo ciframos

Mi pregunta es, sera necesario filtrar un username, email y datos similares?
Lei este documento: http://www.php.net/manual/en/filter.filters.sanitize.php donde se especifican los filtros pero no termino de entender como funciona ese de "special chars".

En el script que tengo en mente, busco la mayor seguridad por lo que si es mas seguro filtrando habra que aplciarlo, solo me gustaria saber que es lo que hace este filtro especificamente.


PD: Si tienen algunos consejitos para crear scripts/dbs seguras se los agradezco, ya me pase a leer por los FAQs de php/sql del foro por lo que esos ya estan en mi lista :)

Gracias por su ayuda.


Título: Re: Duda interaccion PHP-SQL
Publicado por: Shell Root en 29 Marzo 2010, 20:55 pm
1. Mirate en el item de Prevenciòn
    http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_19310-t244090.0.html


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 29 Marzo 2010, 21:57 pm
1. Mirate en el item de Prevenciòn
    http://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_19310-t244090.0.html
Hola,

Gracias por tu respuesta, me pase a leer y me llamo la antencion un tema en partiular:
http://foro.elhacker.net/nivel_web/como_evitar_la_inyeccion_sql-t252384.0.html;msg1219985#msg1219985
No termino de entender eso de las comillas simples/doble comilla

Tambien me pase a leer aqui:
http://informatica-practica.net/solocodigo/index.php/2007/09/06/evitar-inyeccion-sql-ii/ (la proporcionan en el tema anterior) pero tambien me hace bolas eso del remplazo de \' no termino de captar que causa eso y porque es importante el evitarlo :S

Disculpen si suena algo tonto, lo que pasa que voy empezando y aunque lei manuales sql no me avia topado con situaciones asi.

Gracias por sus aportes :)


Título: Re: Duda interaccion PHP-SQL
Publicado por: Shell Root en 29 Marzo 2010, 22:59 pm
Si tu sistema tiene iSQL, cualquier usuario puede ver información de la base de datos, el incluso del sistema LoadFile(), hasta creo que depende de los permisos, se puede llegar a crear un archivo dentro del servidor. Así, que es de completa importacia prevenir eso.

Que es lo que no entiendes de las comillas dobles y simples?


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 29 Marzo 2010, 23:58 pm
Si tu sistema tiene iSQL, cualquier usuario puede ver información de la base de datos, el incluso del sistema LoadFile(), hasta creo que depende de los permisos, se puede llegar a crear un archivo dentro del servidor. Así, que es de completa importacia prevenir eso.

Que es lo que no entiendes de las comillas dobles y simples?
iSQL es el prooverdor de las bases de datos?
En ese caso mi webserver utiliza MySQL por lo que creo estoy "a salvo" XD

Lo de las comillas, mencionan en el articulo que en caso de que una ' (comilla simple) no sea cambiada por \' (diagonal comilla simple) esta podria hacer vulnerable a las inyecciones sql mediante url y scripts. Eso es lo que no me queda muy claro.
Recomiendan usar siempre comillas simples para las consultas que realize a mi base de datos, aqui mi pregunta es, en caso de usar comillas simples, me garantiza una mayor seguridad y proteccion contra inyecciones?

Gracias por tu interes en mi tema :)


Título: Re: Duda interaccion PHP-SQL
Publicado por: Shell Root en 30 Marzo 2010, 00:17 am
Con iSQL, me refiero a Inyección SQL. xD

Ejemplo: Tenemos una sentencia como está
Código
  1. SELECT * FROM tblPwned (WHERE = 'iSQL--')
Que pasa si ingreso una comilla simple dentro de la cadena a buscar, Veamos.
Código
  1. SELECT * FROM tblPwned (WHERE = ''iSQL--')
Cierra la comilla inicial, dando paso a la inyeccion de codigo SQL.


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 30 Marzo 2010, 00:34 am
Con iSQL, me refiero a Inyección SQL. xD

Ejemplo: Tenemos una sentencia como está
Código
  1. SELECT * FROM tblPwned (WHERE = 'iSQL--')
Que pasa si ingreso una comilla simple dentro de la cadena a buscar, Veamos.
Código
  1. SELECT * FROM tblPwned (WHERE = ''iSQL--')
Cierra la comilla inicial, dando paso a la inyeccion de codigo SQL.
:O
Ya veo, entonces para evitarlo habra que anteponr una \ a las comillas que se inserten tal como dicen en el articulo, ya veo ya veo, me esta quedando mas claro ahora :)

Esa es la unica forma de inyeccion SQL?


Título: Re: Duda interaccion PHP-SQL
Publicado por: Shell Root en 30 Marzo 2010, 00:36 am
Con que te refieres a otra forma de inyección SQL?


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 30 Marzo 2010, 00:45 am
Con que te refieres a otra forma de inyección SQL?
Alguna otra forma de modificar la db usando los campos de un form.


Título: Re: Duda interaccion PHP-SQL
Publicado por: Shell Root en 30 Marzo 2010, 00:56 am
Todos los querys que tengan interaccion con la base de datos, pueden ser inyectados, si no estan filtrados de la formas más correctá, es decir, desde un objeto del formulario, hasta en las peticiones GET y POST.


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 30 Marzo 2010, 01:18 am
Todos los querys que tengan interaccion con la base de datos, pueden ser inyectados, si no estan filtrados de la formas más correctá, es decir, desde un objeto del formulario, hasta en las peticiones GET y POST.
Oh,

Entonces sera importante usar el filtro FILTER_SANITIZE_SPECIAL_CHARS como indique en un principio?
Yo lo veia sin importancia pero a como eli, sera necesario XD

Agrego:
Código
  1. checkdnsrr(array_pop(explode("@",$formemail)),"MX")
Tengo esa condicion para revisar si el mail existe, sin embargo... creo que esa funcion solo verifica que los registros MX esten habilitados en el dominio que procede despues del arroba.
Habra forma de verificar que el email exista?

Te agradezco tu ayuda la verdad que me has aclarado muchos puntos con tus respuestas.


Título: Re: Duda interaccion PHP-SQL
Publicado por: Shell Root en 30 Marzo 2010, 01:37 am
Vaya, verificar le existencia de un correo... mmm no tengo la más minima idea de como se puede realizar eso, talvez verificar si el domino al que esta ligado, existe, que supongo que eso es lo que estas haciendo, pero lo de verificar una cuenta de correo, que exista el 100% no lo sé... Eso si es aconcejable que realize una expression Regular, para validar esos tipos de datos.


Título: Re: Duda interaccion PHP-SQL
Publicado por: KrossPock en 30 Marzo 2010, 02:38 am
Busca en google "validar email con php", te van a salir resultados de exp regulares para validar correos


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 30 Marzo 2010, 02:48 am
Vaya, verificar le existencia de un correo... mmm no tengo la más minima idea de como se puede realizar eso, talvez verificar si el domino al que esta ligado, existe, que supongo que eso es lo que estas haciendo, pero lo de verificar una cuenta de correo, que exista el 100% no lo sé... Eso si es aconcejable que realize una expression Regular, para validar esos tipos de datos.
Hola,
Si efectivamente solo valida el dominio despues del @.

Busca en google "validar email con php", te van a salir resultados de exp regulares para validar correos
Si, el confirmar letras+@+letras+.algo ya lo tengo confirmado, el problema es que si pongo "noexisto@elhacker.net" utilizando la "checkdnsrr" me dice que el e-mail es valido, busco la forma de que EN VERDAD exista el correo.

Que opinan sobre
Código
  1. filter_input(INPUT_POST, 'reg_user', FILTER_SANITIZE_SPECIAL_CHARS);
  2. // sera nesesario el filtro de caracteres especiales? yo lo estoy limitando con ctype_alnum()
  3. // antes de enviarlo a la base de datos, sera mejor si uso el filtroo si mezclo ambos?


Título: Re: Duda interaccion PHP-SQL
Publicado por: Carloswaldo en 30 Marzo 2010, 03:40 am
el problema es que si pongo "noexisto@elhacker.net" utilizando la "checkdnsrr" me dice que el e-mail es valido, busco la forma de que EN VERDAD exista el correo.

Pues es que en verdad existe xD Al ser de google apps uno como administrador tiene la opcion de que cuando alguien mande un correo a loquesea@midominio.com me llegue a un mail determinado por ejemplo mailer-daemon@midominio.com y así se puede leer cualquier mail que se haya mandado a un correo que tecnicamente no existe y ya depende del admin mandar una respuesta automática al que envió diciéndole que el correo está erroneo o no existe o no enviar nada. :P

La única forma (rústica por cierto) de verificar que exista un correo creo que sería enviar un mail de prueba y esperar por el rebote. xD


Título: Re: Duda interaccion PHP-SQL
Publicado por: ZharkD en 30 Marzo 2010, 03:48 am
Pues es que en verdad existe xD Al ser de google apps uno como administrador tiene la opcion de que cuando alguien mande un correo a loquesea@midominio.com me llegue a un mail determinado por ejemplo mailer-daemon@midominio.com y así se puede leer cualquier mail que se haya mandado a un correo que tecnicamente no existe y ya depende del admin mandar una respuesta automática al que envió diciéndole que el correo está erroneo o no existe o no enviar nada. :P

La única forma (rústica por cierto) de verificar que exista un correo creo que sería enviar un mail de prueba y esperar por el rebote. xD
Pues si mando un codigo de confirmacion que debe regresar en una url, sin embargo buscaba verificar el email antes de proceder con el registro XD

PD: es posible sacar el pais del visitante mediante alguna funcion?