2009-01-15 2 views
9

Digamos que tengo una aplicación de blog simple ASP.NET MVC y quiero permitir a los lectores agregar 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, ¿y si quisiera alguna funcionalidad básica como hipervínculos, negrita, cursiva, etc.?Prevención de XSS (Cross-site Scripting)

sé que Stackoverflow utiliza el WMD Markdown Editor, lo que parece una gran opción para lo que estoy tratando de lograr, si no fuera por el hecho de que apoya tanto HTML y de rebajas, que leaves it open to XSS attacks.

+1

Por motivos de búsqueda, que podría ser útil para cambiar el título a "La prevención de XSS (Cross sitio scripting) "al título. Para alguien que no conoce su nombre descriptivo, XSS, puede que le cueste más encontrar este hilo. – BuddyJoe

Respuesta

3

¿Cuánto HTML va 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 las vulnerabilidades SQL y otras cosas no deseadas.

+0

Derecho encendido. Tome un enfoque de lista blanca, no un enfoque de lista negra. –

1

Le sugiero que solo envíe la sintaxis de la marca. 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 manera 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 quisiera 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.

0

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 usted. SO usa the code que Slough linked.

2

Si tiene que hacerlo en el navegador: http://code.google.com/p/google-caja/wiki/JsHtmlSanitizer

+0

nunca puede confiar en la entrada del usuario, todo lo que proviene del navegador puede ser alterado – rjlopes

+0

@rjlopes - Eso no es un problema si está tratando de desinfectar el contenido de un servidor para su presentación en el cliente. –

+0

mi error asumí que era para aplicar en el cliente antes de enviar la información al servidor.Sin embargo, en este caso particular (usted controla, el servidor) no tiene mucho sentido desinfectar al cliente. El único caso en que debería ser útil es cuando realiza solicitudes ajax a sitios web de terceros. – rjlopes