6

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

  • SafeHtml
  • SafeHtmlBuilder

SafeHtml在创建新的Widgetor时似乎会以某种方式使用它Composite,并有助于确保 Widget/Composite 不会在客户端执行任何脚本。是这种情况,还是我离谱?SafeHtml有人可以提供一个在行动中正确使用的代码示例吗?

如果是这样,那有什么意义SafeHtmlBuilder呢?您是否在 Widget 中使用它以某种方式“构建”安全的 HTML?

4

2 回答 2

9

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

所以不要有类似的东西:

String name = getValueOfName();
HTML widget = new HTML(name);

你应该使用:

String name = getValueOfName();
HTML widget = new HTML(SafeHtmlUtils.fromString(name));

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

String name = getValueOfName();
SafeHtmlBuilder shb = new SafeHtmlBuilder();
shb.appendEscaped("Name: ").appendEscaped(name);
HTML widget = new HTML(shb.toSafeHtml());

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

于 2012-10-23T10:05:17.787 回答
8

SafeHtmlBuilderSafeHtml什么StringBuilder是什么String

至于Safe*API,在处理 HTML(或 CSSSafeStyles或 URL )时使用它,更准确地说SafeUriUriUtils从要馈送到浏览器解析的部分构建 HTML/CSS/URL,无一例外

实际上,我们最近正在讨论是否弃用Element.setInnerHtml和其他类似的 API ( HasHTML) 以支持Element.setInnerSafeHtml等 ( HasSafeHtml)。

于 2012-10-23T09:58:47.937 回答