GWT安全HTML框架:何时使用,为什么?

Ban*_*der 6 html java xss gwt

在阅读JavaDocs和各种GWT文章时,我偶尔会遇到以下Safe*类:

  • SafeHtml
  • SafeHtmlBuilder

看起来SafeHtml在创建新的时候会以某种方式使用,Widget或者Composite有助于确保Widget/Composite不会在客户端执行任何脚本.是这种情况,还是我离开基地?有人可以提供SafeHtml正确使用的代码示例吗?

如果是这样,那么重点是SafeHtmlBuilder什么?你是否在Widget中使用它以某种方式"建立"安全的HTML?

Dav*_*ebb 9

最简单的查看方式SafeHtmlString任何HTML标记都已适当转义的位置.这可以防止跨站点脚本(XSS)攻击,因为它可以确保,例如,有人在表单中输入其名称,因为<SCRIPT>alert('Fail')</SCRIPT>这是在呈现页面时显示的文本而不是运行的JavaScript.

因此,而不是像:

String name = getValueOfName();
HTML widget = new HTML(name);
Run Code Online (Sandbox Code Playgroud)

你应该使用:

String name = getValueOfName();
HTML widget = new HTML(SafeHtmlUtils.fromString(name));
Run Code Online (Sandbox Code Playgroud)

SafeHtmlBuilder就像它StringBuilder除了它自动转义你添加的字符串中的HTML标记.所以扩展上面的例子:

String name = getValueOfName();
SafeHtmlBuilder shb = new SafeHtmlBuilder();
shb.appendEscaped("Name: ").appendEscaped(name);
HTML widget = new HTML(shb.toSafeHtml());
Run Code Online (Sandbox Code Playgroud)

这是值得阅读的GWT文档中的一个很好的指南SafeHtml.


Tho*_*yer 8

SafeHtmlBuilderSafeHtml什么StringBuilderString.

至于Safe*API,使用它时,你处理HTML(或CSS SafeStyles,或网址SafeUriUriUtils),更精确地从部件构建HTML/CSS/URL被输送到浏览器的解析,有没有例外.

实际上,我们最近讨论是否弃用Element.setInnerHtml和其他类似的API(HasHTML)赞成Element.setInnerSafeHtml等(HasSafeHtml).