En primer lugar, de lo que se trata se llama SQL-Injection . Básicamente es solo la posibilidad de modificar las consultas en la base de datos a través de la entrada del usuario.
Veamos un ejemplo:
Consulta:
SELECT temp1 FROM temp WHERE temp2 = 'VAR1';
Ahora asignaremos a VAR1 el valor de:'; DROP TABLE *; --
Y obtendremos:
SELECT temp1 FROM temp WHERE temp2 = ''; DROP TABLE *; --';
Con mysql_real_escape_string
se vería así:
SELECT temp1 FROM temp WHERE temp2 = '\'; DROP TABLE *; --'
mysql_real_escape_string
'asegura' una cadena para su uso dentro de una consulta.
Pero al final, debes dejar de usar mysql_*
en total . Están en desuso y se consideran inseguros cuando se trata de evitar la inyección de SQL u otros medios para moderar las consultas.
Simplemente debería dejar de concatenar consultas así y comience a usar declaraciones preparadas , que no solo son más fáciles de usar, evitan la inyección SQL de forma predeterminada, sino que también pueden mejorar la velocidad de su aplicación.
Para PHP hay dos extensiones que están diseñadas para cerrar todo mysql_*
abierto:
Y lo vuelvo a decir:Por favor, deja de usar mysql_*
!