Si estoy usando controles ASP.net con validación de solicitudes, XSS debería evitarse, ¿verdad?

Bueno, todos sabemos que siempre hay vulnerabilidades XSS que se pueden descubrir en el futuro y pueden socavar la seguridad de validación de solicitudes predeterminada de ASP.net.

Sin embargo, por defecto, validateRequest es verdadero. Por lo tanto, gran parte de los valores html no se pueden ingresar en los cuadros de texto de ASP.net y otras entradas en primer lugar, ¿correcto?

Por lo tanto, aunque no es una seguridad 100 % sólida contra XSS, definitivamente cubre la mayor parte, ¿no?

No creo que necesite hacer más HtmlEncodes() o una función personalizada de texto simple () cada vez que escupo algo en ASP.net html (a través de .Text = ...) desde la base de datos, ¿correcto?

preguntado el 03 de mayo de 12 a las 20:05

No, no es una defensa completa. Mira aquí stackoverflow.com/questions/9733427/… -

3 Respuestas

No creo que necesite hacer más HtmlEncodes() o una función personalizada de texto simple () cada vez que escupo algo en ASP.net html (a través de .Text = ...) desde la base de datos, ¿correcto?

Recomiendo encarecidamente no hacerlo.

En primer lugar, la validación de solicitudes de ASP.NET no impide la inyección de JavaScript o SQL.

En segundo lugar, recuerde que las vulnerabilidades XSS ocurren debido a errores en su código, por ejemplo, un código que no puede codificar HTML o JavaScript correctamente en la entrada del usuario. Solo porque habilita la validación de solicitudes y ASP.NET evita algo entrada maliciosa de pasar, no elimina mágicamente los errores de su código!

La validación de solicitudes es una medida de defensa en profundidad que puede ayudar a evitar que su aplicación sea explotada cuando cometes un error. Escriba un código libre de errores que siempre codifique correctamente la entrada del usuario, y puede estar seguro de que los atacantes deben saltar Dos aros antes de que puedan comprometer su aplicación.

contestado el 03 de mayo de 12 a las 21:05

El filtrado de entrada no es la respuesta a los problemas de escape de salida. Es, en el mejor de los casos, una defensa parcial y poco fiable para protegerse de los atacantes ocasionales. En mi opinión, es erróneo e irresponsable que un proveedor de marcos lo ofrezca como una defensa sólida contra los problemas de XSS.

Usted debe: Codifique en HTML cualquier contenido de texto que coloque en una cadena HTML. Del mismo modo, debe codificar en forma literal de cadena JavaScript cualquier contenido de texto que coloque en una cadena JS. Debe escapar de SQL de cualquier contenido de texto que coloque en una consulta SQL. Y así.

Esto depende totalmente del contexto según el formato de salida que esté creando; eso podrá ser manejado en la capa de entrada donde no sabe cuál será el formato de destino de salida.

Si obtiene contenido de una fuente que no sea la entrada de parámetros HTTP y lo incluye en la salida, entonces no está protegido en absoluto; por el contrario, si está utilizando la entrada HTTP para crear algo que no sea HTML, entonces su contenido se altera innecesariamente. Además, por supuesto, está bloqueando una entrada perfectamente válida: si SO usara la validación de solicitud, no podríamos tener esta conversación, ya que se interrumpiría en cualquier momento que mencionemos. <script>.

Un codificador inteligente utiliza una capa existente de biblioteca/marco para evitar la necesidad de llamar manualmente a funciones de escape, porque es muy fácil olvidarse de hacerlo. De ahí el consejo de utilizar consultas parametrizadas en lugar de crear SQL a partir de la concatenación de cadenas. Es lo mismo para HTML: el uso de un lenguaje de plantillas bien diseñado o un conjunto de controles web evitará que tenga que hacer nada, porque el escape de HTML ocurre de manera predeterminada.

ASP.NET y los formularios web son parcialmente bien diseñado en este sentido. si configuras TextBox.Text=... entonces sí, el contenido se escapará según sea necesario para ti y no hay nada más que hacer. Por otro lado, si establece Literal.Text=... no está codificado, por defecto (esto se puede cambiar con el LiteralMode propiedad). Esta inconsistencia es muy desafortunada.

contestado el 04 de mayo de 12 a las 09:05

En su mayor parte, debe estar protegido si tiene habilitada la validación de solicitudes. Desafortunadamente, si necesita guardar el marcado, primero tendrá que eliminarlo o la validación generará un HttpRequestValidationException:

enter image description here

Consulte el documento técnico para obtener más detalles: Solicitud de validación: prevención de ataques de secuencias de comandos

contestado el 03 de mayo de 12 a las 21:05

Correcto y estoy de acuerdo con el error potencialmente peligroso. Si eso sucede, estoy bien con eso. Mis usuarios no deberían ingresar ningún html de todos modos en los cuadros de texto. - Diestro

@Dexter: Entonces deberías estar en buena forma. Fue construido específicamente para proteger contra ataques de secuencias de comandos, por lo que debería ser prácticamente a prueba de balas. - James Johnson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.