GWT安全HTML框架:何时使用以及原因



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

  • SafeHtml
  • SafeHtmlBuilder

在创建新的WidgetComposite时,看起来SafeHtml是以某种方式使用的,并有助于确保小部件/复合材料不会在客户端端执行任何脚本。是这种情况,还是我离基地之外?有人可以提供SafeHtml的代码示例吗?

如果是这样,那么SafeHtmlBuilder的意义是什么?您是否在小部件内使用它来以某种方式"堆积"安全html?

查看SafeHtml的最简单方法是String,其中任何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的好指南,值得一读。

SafeHtmlBuilderSafeHtml StringBuilderString

至于Safe* API,每当使用HTML(或SafeStyles的CSS或SafeUriUriUtils的URL)时使用它,更精确地构建了HTML/CSS/URL,从供应到浏览器的html/css/url,用于放弃,以供应放弃,异常。

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

最新更新