OWASP 的优秀人员强调,您必须对 HTML 文档中要放入不受信任数据的部分(正文、属性、JavaScript、CSS 或 URL)使用转义语法。看OWASP - XSS https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet。他们的 API(由 ESAPI 团队开发)随后满足了这种需求,为每个上下文提供了编码器:
ESAPI.encoder().encodeForHTML("input");
ESAPI.encoder().encodeForHTMLAttribute("input");
ESAPI.encoder().encodeForJavaScript("input");
ESAPI.encoder().encodeForCSS("input");
ESAPI.encoder().encodeForURL("input");
随后,这使得开发商能够满足基于 DOM 的 XSS https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet.
所以我的问题是 GWT 的 safehtml 包如何满足这个需求,还是仅仅专注于 HTML 编码?
SafeHtmlTemplates http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safehtml/client/SafeHtmlTemplates.html会这样做(但仅限客户端,因为它依赖于 GWT 生成器)。它将使用“tag soup”解析器解析 HTML 片段,该解析器将推断上下文,如果参数不能在此上下文中使用,则记录警告或抛出异常(例如,它阻止在脚本上下文中使用所有占位符) 。但这仍然在不断变化(SafeUri
仍在审查中并且SafeStyles http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safecss/shared/SafeStyles.html仍然受到严格限制),但它会在适当的时候出现(我认为应该在 GWT 2.4 中)。
否则:
-
SafeHtmlUtils http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safehtml/shared/SafeHtmlUtils.html的将逃脱所有
<
, >
, &
, '
and "
因此结果对于“HTML”和“HTML 属性”上下文是安全的
-
SafeHtmlBuilder
的各种追加方法只会调用SafeHtmlUtils
在引擎盖下
-
UriUtils http://google-web-toolkit.googlecode.com/svn/javadoc/2.3/com/google/gwt/safehtml/shared/UriUtils.html提供工具来清除不安全的 URI(您仍然需要
SafeHtmlUtils
如果您正在构建 HTML 字符串,则通过或等效的内容 - 与直接使用图像源或锚点的 href 的值–)。
-
SafeStyles
本身没有提供任何具体内容,但是SafeHtmlTemplates
只允许它出现在 CSS 上下文的开头,并且如果您尝试在 CSS 上下文中放入其他内容,则会记录一条警告。SafeStylesBuilder
预计将延长类型安全方法,帮助构建格式良好的 CSS.
-
我一直在工作 http://gwt-code-reviews.appspot.com/1380806/ on a
SafeUri
界面,类似于SafeStyles
但在 URL 上下文中。在限定时间内,SafeHtmlTemplates
只会允许SafeUri
or a String
as the 全部价值URL 属性,传递String
通过UriUtils
以确保其安全。
简而言之,我认为你的问题的答案是:是的,GWT 的 safehtml 包可以满足这个需求;但您可能必须始终使用最新版本的 GWT(至少在来年)safe.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)