如何避免XSS攻击的应用程序?

如何保护我们的Web应用程序免受XSS攻击? 如果一个应用程序没有对特殊字符进行任何转换,那么它就很容易受到攻击。

在将输出输出回用户之前,您应该将HTML转义为任何输入。 一些参考:

  • OWASP XSS(跨站点脚本)预防备忘单
  • 考虑使用Apache Commons Lang的 StringEscapeUtils.escapeHtml()
  • 或者使用Spring的 HtmlUtils.htmlEscape()
  • XSS攻击预防
  • JSP / Servlet Web应用程序中的XSS预防

HTML转义输入非常有效。 但在某些情况下,业务规则可能要求您不要逃避HTML。 使用REGEX不适合任务,并且很难找到使用它的好解决方案。

我找到的最佳解决方案是使用: http : //jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

它使用提供的输入构建DOM树,并过滤白名单不能预先允许的任何元素。 API还具有其他用于清理html的function。

只是添加到WhiteFang34’列表:

  • JSoup白名单消毒剂

它有几个内置的白名单可供选择,例如允许一些HTML,没有HTML等。

我在Apache Commons的StringEscapeUtils.escapeHtml()中选择了它,因为它处理撇号的方式。 即如果我们的用户键入:

艾伦的妈妈有一个很好的布朗尼食谱。

JSoup将单独留下撇号,而Apache Commons将逃脱该字符串:

艾伦的妈妈有一个很好的布朗尼食谱。

在向用户显示之前,我不想担心失败。