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
En teoría sí :) –
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
Fuente: http://news.php.net/php.internals/53799 – rdlowrey