5

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 编码?

4

1 回答 1

4

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

除此以外:

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

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

于 2011-05-30T15:39:08.500 回答