GWT SafeHTML,XSS和最佳实践

Mar*_*zee 5 security xss gwt owasp

OWASP的优秀人员强调,您必须使用转义语法来处理您将不受信任的数据放入HTML文档的部分(正文,属性,JavaScript,CSS或URL).见OWASP - XSS.他们的API(由ESAPI团队开发)随后迎合了每个上下文的编码器:

ESAPI.encoder().encodeForHTML("input"); ESAPI.encoder().encodeForHTMLAttribute("input"); ESAPI.encoder().encodeForJavaScript("input"); ESAPI.encoder().encodeForCSS("input"); ESAPI.encoder().encodeForURL("input");

随后,这允许开发人员满足基于DOM的XSS.

所以我的问题是GWT的safehtml包如何迎合这一点,还是只关注HTML编码?

Tho*_*yer 4

SafeHtmlTemplates会这样做(但仅限客户端,因为它依赖于 GWT 生成器)。它将使用“tag soup”解析器解析 HTML 片段,该解析器将推断上下文,如果参数不能在此上下文中使用,则记录警告或抛出异常(例如,它阻止在脚本上下文中使用所有占位符)。尽管这仍在不断变化(SafeUri仍在审查中并且SafeStyles仍然受到严格限制),但它会在适当的时候出现(我认为应该在 GWT 2.4 中)。

\n\n

否则:

\n\n
    \n
  • SafeHtmlUtils\'s 将转义所有<>&\'因此"结果对于“HTML”和“HTML 属性”上下文是安全的
  • \n
  • SafeHtmlBuilder\ 的各种追加方法只会SafeHtmlUtils在幕后调用
  • \n
  • UriUtils提供清理不安全 URI 的工具(如果您正在构建 HTML 字符串 \xe2\x80\x93vs,则之后仍需要SafeHtmlUtilspass 或等效项。直接使用图像源或锚点的值href\xe2\x80\x93)。
  • \n
  • SafeStyles本身不提供任何特定的内容,但SafeHtmlTemplates只允许在 CSS 上下文的开头使用,并且如果您尝试将其他内容放入 CSS 上下文中,则会记录一条警告。SafeStylesBuilder预计将通过类型安全方法进行扩展,以帮助构建格式良好的CSS。
  • \n
  • 我一直在开发一个SafeUri界面,类似于SafeStyles但在 URL 上下文中。在适当的时候,SafeHtmlTemplates将只允许 aSafeUri或 aString作为URL 属性的完整值String,传递该属性UriUtils以确保其安全。
  • \n
\n\n

简而言之,我认为您问题的答案是:是的,GWT 的 safehtml 包可以满足这一点;但为了安全起见,您可能必须始终使用最新版本的 GWT(至少在来年)。

\n