asp-classic sql-injection

asp classic - Inyección ASP SQL clásica



asp-classic sql-injection (5)

Hace poco heredé un sitio web asp clásico con un montón de instrucciones de inserción de SQL en línea que son vulnerables a los ataques de inyección SQL.

Estas instrucciones de inserción se ejecutan a través del objeto de comando ADO.

¿La configuración de la propiedad Preparado del Objeto de comando ADO es verdadera, asegura que la consulta se parametrice antes de la ejecución, mitigando así el riesgo de inyección SQL?




Lo que le sugiero que haga es escribir una función para desinfectar la entrada del usuario, luego ejecutar todas las variables de solicitud a través de eso. Cuando escribí el mío, hice cosas como:

  • escapar de comillas simples,
  • retirar ; y otros personajes especiales y
  • asegúrese de que no pueda - (comentar) al final de la declaración.

La mayoría de las inyecciones de SQL probarían algo como '' or 1=1 or a='' para que el código SQL sea:

SELECT * from mytable where mycolumn = '''' or 1=1 or a=''''

Así que escapar de las comillas simples es realmente grande por lo que debes preocuparte.


No, si construyes una cadena SQL con valores que obtienes directamente de "afuera", entonces una "declaración preparada" no te ayudará.

un

sSQL = "SELECT * from mytable where mycolumn = ''" + querystring("value") + "''"

todavía está buscando problemas. La única forma de resolver esto es mediante el uso de parámetros en su consulta.


También puede ver un proyecto de código abierto ASP clásico llamado ''Owasp Stinger''. Eso no solo ayuda con la inyección Sql, sino también con la inyección de encabezados y muchos otros problemas de seguridad comunes a todas las aplicaciones web.

http://www.owasp.org/index.php/Classic_ASP_Security_Project