site remediation reflected prevent cross asp.net asp.net-mvc security xss

asp.net - remediation - Prevención de XSS(Cross-site Scripting)



xss c# (7)

¿Cuánto HTML vas a admitir? ¿Solo negrita / cursiva / las cosas básicas? En ese caso, puede convertirlos en sintaxis de rebajas y luego quitar el resto del HTML.

El pelado debe hacerse en el lado del servidor, antes de almacenarlo. También debe validar la entrada en el servidor al verificar vulnerabilidades de SQL y otras cosas no deseadas.

Digamos que tengo una aplicación simple de blog ASP.NET MVC y quiero permitir que los lectores agreguen comentarios a una publicación de blog. Si quiero evitar cualquier tipo de chanchullos XSS, podría codificar HTML todos los comentarios para que sean inofensivos cuando se procesen. Sin embargo, ¿qué pasaría si quisiera alguna funcionalidad básica como hipervínculos, negrita, cursiva, etc.?

Sé que StackOverflow usa WMD Markdown Editor , que parece ser una gran elección para lo que intento lograr, si no fuera por el hecho de que admite tanto HTML como Markdown, lo que lo deja abierto a los ataques XSS .




Sugeriría que solo envíe la sintaxis de rebajas. En la parte delantera, el cliente puede escribir el descuento y tener una vista previa de HTML (igual que SO), pero solo debe enviar la sintaxis de rebajas del servidor. Luego puede validarlo, generar el HTML, escapar de él y almacenarlo.

Creo que esa es la forma en que la mayoría de nosotros lo hacemos. En cualquier caso, el descuento está ahí para evitar que alguien escriba código HTML estructurado y darles poder a aquellos que ni siquiera sabrían cómo hacerlo.

Si hay algo específico que le gustaría hacer con el HTML, puede modificarlo con alguna herencia de CSS ''.comment a {color: # F0F; } '', front-end JS o simplemente recorre el HTML generado desde el análisis de marcado antes de almacenarlo.



Puede usar una lista blanca HTML para que ciertas etiquetas puedan seguir utilizándose, pero todo lo demás está bloqueado.

Hay herramientas que pueden hacer esto por ti. SO usa el código que Slough enlazó .