¿Cómo evitar aplicaciones de ataques XSS?

¿Cómo proteger con seguridad nuestras aplicaciones web de los ataques XSS? Una aplicación es vulnerable al ataque, si no realiza ninguna conversión de un personaje especial.

Debería HTML escapar de cualquier entrada antes de devolverla al usuario. Algunas referencias:

  • Hoja de referencia de prevención de OWASP XSS (secuencias de comandos entre sitios)
  • Considere el uso de StringEscapeUtils.escapeHtml() de Apache Commons Lang
  • O use HtmlUtils.htmlEscape() de Spring
  • Prevención de ataques XSS
  • Prevención XSS en aplicación web JSP / Servlet

Las entradas de escape HTML funcionan muy bien. Pero en algunos casos, las reglas de negocios pueden requerir que NO se escape del HTML. Usar REGEX no es apropiado para la tarea y es muy difícil encontrar una buena solución al usarlo.

La mejor solución que encontré fue usar: http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

Construye un árbol DOM con la entrada provista y filtra cualquier elemento no permitido previamente por una lista blanca. La API también tiene otras funciones para limpiar html.

Solo para agregar a la lista de WhiteFang34 ‘:

  • JSoup desinfectante lista blanca

Tiene varias listas blancas integradas para elegir, como permitir algunos HTML, no HTML, etc.

Elegí esto sobre el StringEscapeUtils.escapeHtml() Apache Commons debido a cómo maneja los apóstrofes. Es decir, si nuestros usuarios escriben:

La mamá de Alan tenía una buena receta de brownie.

JSoup dejará solo el apóstrofe, mientras que Apache Commons escapará a esa cadena como:

La mamá de Alan tenía una buena receta de brownie.

Lo cual no me gustaría tener que preocuparme por escapar antes de mostrárselo al usuario.