Este artículo presenta la diferencia entre usar mysql_real_escape_string para ordenar y procesar datos enviados por el usuario y usar tres funciones similares: addlashes y mysql_escape_string. Los datos escapados se pueden insertar directamente en la base de datos.
Es una buena explicación de la diferencia entre addlashes y mysql_real_escape_string. Aunque muchos codificadores PHP nacionales todavía dependen de addlashes para evitar la inyección de SQL (incluyéndome a mí), todavía recomiendo que todos refuercen las comprobaciones para evitar la inyección de SQL en chino. El problema con Addslashes es que los piratas informáticos pueden usar 0xbf27 para reemplazar comillas simples, mientras que Addslashes solo cambia 0xbf27 a 0xbf5c27, que se convierte en un carácter válido de varios bytes. 0xbf5c todavía se considera una comilla simple, por lo que Addslashes no puede interceptar con éxito.
Por supuesto, addlashes no es inútil. Se usa para procesar cadenas de un solo byte. Para caracteres de varios bytes, use mysql_real_escape_string.
Además, para el ejemplo de get_magic_quotes_gpc en el manual de PHP:
si (!get_magic_quotes_gpc()) {
$apellido = addlashes($_POST['apellido']);
} demás {
$apellido = $_POST['apellido'];
}
Es mejor marcar $_POST['lastname'] cuando magic_quotes_gpc ya esté abierto.
Hablemos de la diferencia entre las dos funciones mysql_real_escape_string y mysql_escape_string:
mysql_real_escape_string solo se puede usar cuando (PHP 4 >= 4.3.0, PHP 5). De lo contrario, solo puedes usar mysql_escape_string. La diferencia entre los dos es:
mysql_real_escape_string tiene en cuenta el conjunto de caracteres actual de la conexión, mientras que mysql_escape_string no.
Para resumir:
addlashes() es una adición forzada;
mysql_real_escape_string() determinará el conjunto de caracteres, pero existen requisitos para la versión de PHP;
mysql_escape_string no considera el conjunto de caracteres actual de la conexión.