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:
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:
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.
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