Ataques de inyección PHP y SQL [2]
Citas mágicas
Como se mencionó anteriormente, la inyección SQL envía principalmente datos inseguros a la base de datos para lograr el propósito del ataque. Para evitar ataques de inyección SQL, PHP viene con una función que puede procesar la cadena de entrada y realizar un procesamiento de seguridad preliminar en la entrada en el nivel inferior, es decir, Magic Quotes. (php.ini magic_quotes_gpc). si magic_quotes_gpc
Si la opción está habilitada, las comillas simples, comillas dobles y otros caracteres en la cadena de entrada estarán precedidos automáticamente por una barra invertida .
Pero Magic Quotes no es una solución muy universal, no bloquea todos los personajes potencialmente peligrosos y en muchos servidores Magic Quotes no está habilitado. Por lo tanto, también necesitamos utilizar otros métodos para evitar la inyección de SQL.
Muchas bases de datos proporcionan esta funcionalidad de procesamiento de datos de entrada de forma nativa. Por ejemplo, la función de operación MySQL de PHP tiene una función llamada mysql_real_escape_string (), que puede escapar de caracteres especiales y caracteres que pueden causar errores en la operación de la base de datos.
referirse a:
http://cn2.php.net/mysql_real_escape_string
Si está interesado, puede leer los comentarios a continuación :)
Mire este código:
//Si la función Magic Quotes está habilitada
si (get_magic_quotes_gpc()) {
$nombre = stripslashes($nombre);
}demás{
$nombre = mysql_real_escape_string($nombre);
}
mysql_query("SELECT * FROM users WHERE name='{$name}'");
Tenga en cuenta que antes de usar las funciones proporcionadas por la base de datos, debemos determinar si Magic Quotes está activado, como en el ejemplo anterior; de lo contrario, se repetirá dos veces. El procesamiento saldrá mal. Si MQ está habilitado, debemos eliminar el agregado para obtener los datos reales.
Además de preprocesar los datos en forma de cadena anteriores, al almacenar datos binarios en la base de datos, también debe prestar atención al preprocesamiento. De lo contrario, los datos pueden entrar en conflicto con el formato de almacenamiento de la propia base de datos, provocando que la base de datos falle, que se pierdan registros de datos o incluso que se pierda toda la base de datos. Algunas bases de datos, como PostgreSQL, proporcionan una función pg_escape_bytea() especialmente utilizada para codificar datos binarios, que puede codificar datos de manera similar a Base64.
como:
// para uso de datos de texto plano:
pg_escape_string($regular_strings);
// para uso de datos binarios:
pg_escape_bytea($binary_data);
En otro caso, también necesitamos utilizar dicho mecanismo. Es decir, idiomas multibyte como chino, japonés, etc. que no son compatibles con el propio sistema de base de datos. Algunos de ellos tienen rangos ASCII que se superponen con rangos de datos binarios.
Sin embargo, codificar los datos puede provocar que fallen consultas como LIKE abc%.