2012-03-22 27 views
10

Duplicar posible:
SQL injection that gets around mysql_real_escape_string()¿Puede mysql_real_escape_string ALONE prevenir todos los tipos de inyección sql?

que no he visto ninguna valuabe o no información obsoleta en esto. Entonces, existe esta pregunta: Does mysql_real_escape_string() FULLY protect against SQL injection? Sin embargo, está muy desactualizada (es del '09), por lo que a partir de php 5.3 y mysql 5.5 en '12, ¿protege completamente?

+0

En teoría sí :) –

+8

Por favor, por el amor de Zaphod Beeblebrox actualícese a las declaraciones preparadas a través de PDO o la extensión mysqli. 'mysql *' es un dinosaurio que nunca debería usarse. Si tantos sitios "tutoriales" no seguían utilizándolo obstinadamente, el equipo de desarrollo de PHP ya lo habría desaprobado. Los nuevos devotos de esta práctica retrógrada son acuñados diariamente porque no conocen nada mejor y, después de todo, "el tutorial decía que podía hacerlo de esta manera". ** Las declaraciones preparadas son la forma correcta de evitar la inyección de SQL **. – rdlowrey

+1

Fuente: http://news.php.net/php.internals/53799 – rdlowrey

Respuesta

10

mysql_real_escape_string el único que puede evitar que nada.

Por otra parte, esta función no tiene nada que ver con las inyecciones en absoluto.

Siempre que necesite escaparse, lo necesita a pesar de la "seguridad", pero solo porque es requerido por la sintaxis SQL. Y donde no lo necesite, escaparse no lo ayudará ni siquiera un poco.

El uso de esta función es simple: cuando tiene que usar una cadena entrecomillada en la consulta, debe escapar de su contenido. No debido a algunos "usuarios malintencionados" imaginarios, sino simplemente para escapar de estas comillas que se utilizaron para delimitar una cadena. Esta es una regla extremadamente simple, pero extremadamente confundida por gente de PHP.

Esto es solo función relacionada con la sintaxis, no relacionada con la seguridad.

Dependiendo de esta función en cuestiones de seguridad, cree que "protegerá su base de datos contra usuarios malintencionados" WILL lo llevará a la inyección.

Una conclusión que puede hacer usted mismo:
No, esta función no es suficiente.

Declaraciones preparadas no es una bala de plata también. Cubre tu espalda solo en la mitad de los casos posibles.Ver el important addition I made to the famous question para los detalles

0

Sí. Al escapar correctamente de la cadena utilizando las funciones nativas de escape mysql, no es posible "salir" y ejecutar una consulta.

Sin embargo, un mejor enfoque sería usar declaraciones preparadas. Esto hará una serie de cosas. Al utilizar declaraciones preparadas, aprovecha aún más la optimización de la base de datos y escapará adecuadamente cualquier dato que se haya ingresado. Consulte: http://php.net/manual/en/mysqli.prepare.php

4

largo tiempo desde que leí una publicación en el blog sobre esto, por lo que ya no puede contener verdadero PERO ...

Las publicaciones indicaban que si tenía caracteres codificados en Unicode en su cadena, se perderían por una cadena de escape real, pero serían evaluados por el motor mysql, aludiendo a la idea de que aún podría estar abierto a una inyección bien colocada.

No puedo recordar la entrada de blog, pero this question on here encuentra en la misma bola del parque.

Cuestiones relacionadas