2011-05-30 56 views
5

OWASP的优秀人士强调,您必须对将不可信数据放入(body,attribute,JavaScript,CSS或URL)的HTML文档部分使用转义语法。请参阅OWASP - XSS。他们的API(由ESAPI团队开发),随后为迎合每个背景下,这个具有编码器:GWT SafeHTML,XSS和最佳实践

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

随后这使得开发人员,以应付DOM-based XSS

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

回答

4

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

否则:

  • SafeHtmlUtils的会逃避所有的<>&'"所以结果是 “HTML” 和 “HTML属性” 安全上下文
  • SafeHtmlBuilder的各种追加方法只会在电话号码下呼叫SafeHtmlUtils
  • UriUtils提供工具清理不安全的URI(您仍然需要SafeHtmlUtils通行证或同等效果之后如果你正在构建一个HTML字符串-vs。直接将该值用于图像源或锚点的href-)。
  • SafeStyles本身没有提供任何特定的内容,但SafeHtmlTemplates只会允许它在CSS上下文的开始,并且如果您尝试在CSS上下文中放置其他任何内容,将会记录警告。预计SafeStylesBuilder将扩展为类型安全方法,以帮助构建格式良好的 CSS。
  • I've been workingSafeUri接口上,类似于SafeStyles,但在URL上下文中。在适当的时候,SafeHtmlTemplates将仅允许或String作为URL属性的完整值,并将String通过UriUtils以确保其安全。

简而言之,我认为你的问题的答案是:是的,GWT的safehtml包适合这个;但您可能必须始终使用最新版本的GWT(至少在未来一年中)为安全

+1

因此,基本上,SafeHTMLTemplates是我在处理除HTML之外的上下文时使用的,但是您建议不要依赖它来安全编码GWT 2.3中的URL和样式?最后是基于DOM的XSS需要在GWT中考虑,因为我们确实有能力直接设置DOM元素的内部html? – 2011-05-30 20:05:06

+1

没有魔法,你可以自己做的所有SafeHtmlTemplates;但SafeHtmlTemplates会自动执行一些检查代码所必须执行的检查。现在(GWT 2。3),它不够先进,检查CSS(我不确定它会做什么,计划是给你一个工具来帮助你*构建*安全的CSS)。至于网址,它会调用'UriUtils.sanitizeUri',这样你就可以安全,但是有一些安全的URI会被擦掉(比如你知道安全的'data:'URI),并且即使不安全,它仍会保留原样的几个案例(请参阅SafeUri代码审查)。 – 2011-05-31 09:24:19

+1

最后:基于DOM的CSS绝对是GWT需要担心的,这就是为什么'SafeHtml'和朋友首先被添加的原因。无论何时您可以设置元素的innerHTML,请尝试使用“SafeHtml”工具构建它。它永远不会替代审计您的代码,但它应该大大有助于这样做。 – 2011-05-31 09:27:18