2010-11-13 20 views
7

Manual de PHP, hay una nota:¿Es mysql_real_escape_string suficiente para Anti SQL Injection? En

Nota: Si esta función no se utiliza para datos de escape, la consulta es vulnerable a ataques de inyección SQL.

¿Esto es suficiente para la inyección anti sql? Si no, ¿podría dar un ejemplo y una buena solución para la inyección anti sql?

+1

Ver [¿mysql_real_escape_string() TOTALMENTE protege contra la inyección de SQL? ] (http://stackoverflow.com/questions/1220182/does-mysql-real-escape-string-fully-protect-against-sql-injection). –

+0

definitivamente un duplicado de lo anterior – mikeycgto

Respuesta

6

mysql_real_escape_string suele ser suficiente para evitar la inyección de SQL. Esto no depende de que esté libre de errores, es decir, existe una pequeña posibilidad desconocida de que sea vulnerable (pero esto aún no se ha manifestado en el mundo real). Una mejor alternativa que descarta por completo las inyecciones de SQL a nivel conceptual es prepared statements. Ambos métodos dependen completamente de que los aplique correctamente; es decir, ninguno lo protegerá si lo estropea de todos modos.

+1

solo para aclarar: también existe la posibilidad de que PDO emule las consultas preparadas (para mysql) y no use las mysql nativas. No hay tal declaración en la documentación de PHP (o no puedo encontrar una). – zerkms

+0

"PDO emulará para los controladores que no los admiten" --- no es suficiente, porque: a) libmysql instalado (antiguo) puede no ser compatible con preparado; b) PDO todavía no puede usar declaraciones preparadas nativas. – zerkms

0

Hasta donde yo sé, esta es una forma sólida de evitar los ataques de inyección SQL.

+0

Lo siento, olvidé de agregar que creo que puedes atacar desde una URL. – mcbeav

+0

También puede restringir siempre quién puede acceder a qué en su base de datos y quién tiene qué privilegios. – mcbeav

0

La mejor solución es PDO.

Si está utilizando el tradicional mysql_query, entonces es suficiente con ejecutar todos sus datos a través de mysql_real_escape_string().

+0

¿Qué son las consultas parametrizadas? – Jichao

+0

Las consultas parametrizadas también están disponibles en las extensiones 'PDO' – stillstanding

Cuestiones relacionadas