asp.net - servidor - secuencia de doble escape dentro de una url: el módulo de filtro de solicitud está configurado para denegar una solicitud que contiene una secuencia de escape doble
publicar aplicacion asp net en iis (1)
Los agujeros de seguridad que puede abrir tienen que ver con la inyección de código: inyección de HTML, inyección de JavaScript o inyección SQL.
Las configuraciones predeterminadas lo protegen de ataques semi-eficientes al no permitir que las estrategias de inyección comunes funcionen. Cuanta más seguridad predeterminada elimine, más tendrá que pensar en lo que hace con la entrada proporcionada a través de las URL, las cadenas de consulta de solicitud GET, los datos de solicitud POST, los encabezados HTTP, etc.
Por ejemplo, si está creando consultas SQL dinámicas basadas en el parámetro id
de su método de acción, haga lo siguiente:
public ActionResult Tags(string id)
{
var sql = "SELECT * FROM Tags Where tagName = ''" + id + "''";
// DO STUFF...
}
(... lo cual NO es una buena idea), la protección predeterminada, implementada por .NET framework, podría detener algunos de los escenarios más peligrosos, como el usuario que solicita esta URL:
/product/tags/1%27;drop%20table%20Tags;%20--
La idea es tratar todas las partes de las urls y otras entradas a los métodos de acción como posibles amenazas. La configuración de seguridad predeterminada proporciona parte de esa protección para usted. Cada configuración de seguridad predeterminada que modifique se abre para un poco más de maldad potencial que necesita manejar manualmente.
Por supuesto, supongo que no está creando consultas SQL de esta manera. Pero las cosas más furtivas vienen cuando almacena la entrada del usuario en su base de datos, y luego las muestra. El usuario malvado podría almacenar JavaScript o HTML en su base de datos que sale sin codificar, lo que a su vez amenazaría a otros usuarios de su sistema.
En mi aplicación ASP.NET MVC, estoy tratando de implementar una URL como la siguiente:
/ product / tags / for + families
Cuando trato de ejecutar mi aplicación con las configuraciones predeterminadas, recibo este mensaje con el código de respuesta 404.11:
HTTP Error 404.11 - No encontrado
El módulo de filtrado de solicitudes está configurado para denegar una solicitud que contiene una secuencia de escape doble.
Puedo solucionar este error implementando el siguiente código dentro de mi web.config:
<system.webServer>
<security>
<requestFiltering allowDoubleEscaping="true" />
</security>
</system.webServer>
Entonces, ahora no recibo ningún 404.11
.
Lo que me pregunto es qué tipo de agujeros de seguridad estoy abriendo con esta implementación.
Por cierto, mi aplicación está bajo .Net Framework 4.0
y se ejecuta bajo IIS 7.5
.