"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Son `mysql_real_escape_string ()` y `mysql_escape_string ()` suficiente para evitar ataques de inyección de MySQL?

¿Son `mysql_real_escape_string ()` y `mysql_escape_string ()` suficiente para evitar ataques de inyección de MySQL?

Publicado el 2025-03-22
Navegar:711

Are `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Prevent MySQL Injection Attacks?

mysql Inyection ataques: un buceo más profundo

introducción

asegurando que la seguridad de las aplicaciones web sea crucial, y la protección de la base de datos es una parte vital de este esfuerzo. Este artículo examina la efectividad de usar mysql_real_escape_string () y mysql_escape_string () en salvaguardar contra ataques SQL.

está escapando suficientes para la seguridad? mysql_escape_string () se usan comúnmente para escapar de los datos antes de insertarlos en consultas SQL. Sin embargo, ¿son estas funciones una protección suficiente contra todos los vectores de ataque?

Opiniones de expertos

de acuerdo con los expertos, mysql_real_escape_string () no proporciona protección completa contra inyecciones de SQL. Esto se debe a que solo está destinado a escapar de las variables PHP dentro de las consultas. No puede manejar la tabla de escape o los nombres de la columna o limitar los campos.

vulnerabilidad a los ataques conocidos

Considere el siguiente ejemplo:

$ sql = "Seleccione Número de Phonenumbers". "DÓNDE " . mysql_real_escape_string ($ campo). "=". mysql_real_escape_string ($ valor);

Esta consulta es vulnerable a la inyección SQL si el campo $ o $ valor contiene entrada maliciosa. Un hacker podría elaborar una consulta maliciosa que pase por alto y ejecute comandos no autorizados.
$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);

vectores de ataque específicos

como ataques:
    mysql_real_escape_string () es ineficaz contra los ataques, como los ataques, como ". Esto puede exponer todos los registros en una tabla, potencialmente revelando información confidencial.
  • Charset Exploits:
  • Estas exploits aprovechan las vulnerabilidades en el manejo de Charset de Internet Explorer y PHP. Pueden permitir a los hackers ejecutar consultas sql arbitrary.
  • una demostración

el siguiente código demuestra cómo estos ataques pueden ser explotados:

$ sql = sprintf ("seleccione de Url de Grabedurls donde se explotan% mysql_real_escape_string ($ argv [1]), mysql_real_escape_string ($ argv [2]), mysql_real_escape_string($argv[3]));

$sql = sprintf("SELECT url FROM GrabbedURLs WHERE %s LIKE '%s%%' LIMIT %s",
               mysql_real_escape_string($argv[1]),
               mysql_real_escape_string($argv[2]),
               mysql_real_escape_string($argv[3]));
Input 1:
    Returns URLs beginning with "http://www.reddit.com"
  • Input 2:
  • Returns every result (an Exploit)
  • Input 3:
  • Ejecuta consultas SQL inesperadas
  • la solución: Declaraciones preparadas

Los expertos recomiendan usar declaraciones preparadas en lugar de escapar de las municipaciones. Las declaraciones preparadas son técnicas del lado del servidor que solo se ejecuta SQL válido. Este enfoque proporciona una protección integral contra inyecciones SQL, tanto conocidas como desconocidas.

Ejemplo usando pdo

$ sql = 'Seleccione URL de GrabBedurls donde'. $ columna. '=? Límite? '; $ estado de cuenta = $ pdo-> preparar ($ sql); $ Datado-> Execute (Array ($ value, $ limit));

este código usa declaraciones preparadas para escapar de la entrada del usuario y ejecutar consultas.
$sql = "SELECT number FROM PhoneNumbers " .
       "WHERE " . mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);

conclusion

mientras mySQL_REAL_ESCAPE_STRING No son suficientes para la seguridad completa. Las declaraciones preparadas son el enfoque recomendado para la seguridad de la base de datos robusta.

Último tutorial Más>

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