如何避免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将逃脱该字符串:
艾伦的妈妈有一个很好的布朗尼食谱。
在向用户显示之前,我不想担心失败。