Duda interaccion PHP-SQL

Iniciado por ZharkD, 29 Marzo 2010, 20:48 PM

0 Miembros y 1 Visitante están viendo este tema.

ZharkD

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 (php) [Seleccionar]
// Filtramos y asignamos variable a los datos obtenidos (PHP 5)
$user = filter_input(INPUT_POST, 'reg_user', FILTER_SANITIZE_SPECIAL_CHARS);
$mail = filter_input(INPUT_POST, 'reg_mail', FILTER_SANITIZE_SPECIAL_CHARS);
$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.

Shell Root

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

ZharkD

Cita de: Alex@ShellRoot 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
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 :)

Shell Root

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?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

ZharkD

Cita de: Alex@ShellRoot 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?
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 :)

Shell Root

#5
Con iSQL, me refiero a Inyección SQL. xD

Ejemplo: Tenemos una sentencia como está
Código (sql) [Seleccionar]
SELECT * FROM tblPwned (WHERE = 'iSQL--')
Que pasa si ingreso una comilla simple dentro de la cadena a buscar, Veamos.
Código (sql) [Seleccionar]
SELECT * FROM tblPwned (WHERE = ''iSQL--')
Cierra la comilla inicial, dando paso a la inyeccion de codigo SQL.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

ZharkD

Cita de: Alex@ShellRoot en 30 Marzo 2010, 00:17 AM
Con iSQL, me refiero a Inyección SQL. xD

Ejemplo: Tenemos una sentencia como está
Código (sql) [Seleccionar]
SELECT * FROM tblPwned (WHERE = 'iSQL--')
Que pasa si ingreso una comilla simple dentro de la cadena a buscar, Veamos.
Código (sql) [Seleccionar]
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?

Shell Root

Con que te refieres a otra forma de inyección SQL?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

ZharkD

Cita de: Alex@ShellRoot en 30 Marzo 2010, 00:36 AMCon que te refieres a otra forma de inyección SQL?
Alguna otra forma de modificar la db usando los campos de un form.

Shell Root

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.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.