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编码?
因此,基本上,SafeHTMLTemplates是我在处理除HTML之外的上下文时使用的,但是您建议不要依赖它来安全编码GWT 2.3中的URL和样式?最后是基于DOM的XSS需要在GWT中考虑,因为我们确实有能力直接设置DOM元素的内部html? – 2011-05-30 20:05:06
没有魔法,你可以自己做的所有SafeHtmlTemplates;但SafeHtmlTemplates会自动执行一些检查代码所必须执行的检查。现在(GWT 2。3),它不够先进,检查CSS(我不确定它会做什么,计划是给你一个工具来帮助你*构建*安全的CSS)。至于网址,它会调用'UriUtils.sanitizeUri',这样你就可以安全,但是有一些安全的URI会被擦掉(比如你知道安全的'data:'URI),并且即使不安全,它仍会保留原样的几个案例(请参阅SafeUri代码审查)。 – 2011-05-31 09:24:19
最后:基于DOM的CSS绝对是GWT需要担心的,这就是为什么'SafeHtml'和朋友首先被添加的原因。无论何时您可以设置元素的innerHTML,请尝试使用“SafeHtml”工具构建它。它永远不会替代审计您的代码,但它应该大大有助于这样做。 – 2011-05-31 09:27:18