Use el problema de codificación de caracteres para evitar la inyección SQL de mysql_real_escape_string ()
Aunque la función mysql_real_escape_string ()
previene la inyección SQL, se puede pasar por alto en ciertos casos.
Considere el siguiente código PHP:
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
Este código parece seguro, pero puede explotarse debido al caso de la codificación del conjunto de caracteres.
Método de ataque:
Los ataques dependen de los siguientes pasos:
mysql_real_escape_string ()
: el cliente cree que la conexión usa un conjunto de caracteres diferente (por ejemplo, latin1), entonces mysql_real_escape_string ()
será soltero Inserte una barra de insegura antes de las cotizaciones, lo que resulta en una cadena sintácticamente válida. Principio de trabajo:
El problema clave es que el conjunto de caracteres esperado por el servidor no coincide con el conjunto de caracteres considerado por el cliente. Aunque mysql_real_escape_string ()
se escape en función de la codificación de conexión establecida por el cliente, en algunos casos trata los caracteres multibyte inválidos como un solo byte, incluido el uso de establecer nombres
en lugar de mysql_set_charset ()
.
como resultado de:
Este ataque puede omitir la declaración de preprocesamiento simulada de PDO incluso si la declaración de preprocesamiento simulado está deshabilitado.
Recurso:
use conjuntos de caracteres no vulnerables, como UTF8MB4 o UTF8, para mitigar este problema. Habilitar NO_BACKSLASH_ESCAPES El modo SQL también proporciona protección.
Safe Ejemplo:
Siempre establezca el personaje configurado correctamente usando mysql_set_charset ()
o los parámetros de conjunto de caracteres DSN de PDO. Las declaraciones de preprocesamiento reales en MySQLI también son inmunes a este ataque.
en conclusión:
while mysql_real_escape_string ()
generalmente proporciona una fuerte protección, es importante tener en cuenta tales casos potenciales de borde para garantizar una defensa total contra la inyección de SQL.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3