Por lo tanto, he solicitado la validación en mi aplicación web. Puedes agregar /foo?=<script>
y mi aplicación web no lo detectará -no lo filtra-
¿Esto me hace vulnerable a los ataques? ¿Debo encenderlo?
Esto depende si está codificando correctamente los caracteres en la salida. Por ejemplo, para HTML, el carácter <
debe codificarse como <
.
Si está haciendo esto en todas partes, puede desactivar la Validación de la solicitud de forma segura.
Este es un método mejor, ya que algunas secuencias de caracteres pueden omitir RV dependiendo del contexto en el que se use la entrada más adelante. Por ejemplo, si el valor lo convierte en un valor de atributo HTML, una secuencia como
" onerror="alert('xss')
lo omitirá cuando se inserte en
<img src="/foo.jpg" alt="<user input>" />
ya que esto se convierte en
<img src="/foo.jpg" alt="" onerror="alert('xss')" />
Además, la entrada de fuentes que no sean ASP.NET puede significar que aún se pueden insertar scripts en su aplicación. Es por eso que recomiendo la codificación de salida correcta en lugar de intentar validar la entrada. La validación global de las entradas es un problema aún mayor, ya que siempre habrá vacíos cuando no haya una opción para validar el contexto.
Microsoft no considera que la Validación de la solicitud, aunque es útil en algunos escenarios, sea un límite de seguridad, por lo que no debe ser su única defensa contra los ataques. Dicho esto, es una herramienta válida para usar en defensa en profundidad, por lo que debe habilitarla a menos que tenga una razón específica para no hacerlo.
En última instancia, necesita saber qué aspecto tiene el modelo de amenaza para su aplicación, de modo que pueda poner en práctica mitigaciones bien pensadas en lugar de simplemente activar o desactivar las opciones de toda la aplicación, y esperar lo mejor.
Lea otras preguntas en las etiquetas asp.net