GWT SafeHTML,XSS&最佳实践

时间:2011-05-30 14:06:25

标签: security gwt xss 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-based XSS

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

1 个答案:

答案 0 :(得分:4)

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

否则:

  • SafeHtmlUtils将逃脱<>&'"的所有内容,因此结果是安全的“ HTML“和”HTML属性“contexts
  • SafeHtmlBuilder的各种附加方法只会在引擎盖下调用SafeHtmlUtils
  • UriUtils提供了用于清除不安全URI的工具(如果您正在构建HTML字符串-vs,则之后仍然需要SafeHtmlUtils次传递或等效。使用该值直接用于图像的源或anchor的href - )。
  • SafeStyles本身没有提供任何具体内容,但SafeHtmlTemplates只会在CSS上下文的开头提供它,并且如果您尝试在CSS中放入其他内容,则会记录警告上下文。预计SafeStylesBuilder将使用类型安全的方法进行扩展,以帮助构建格式良好的 CSS。
  • SafeUri界面上
  • I've been working,类似于SafeStyles,但在网址上下文中。在适当的时候,SafeHtmlTemplates只允许SafeUriString作为网址属性的完整值,并将String传递给{ {1}}确保它是安全的。

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