最简单的查看方式SafeHtml是String任何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.
SafeHtmlBuilder是SafeHtml什么StringBuilder是String.
至于Safe*API,使用它时,你处理HTML(或CSS SafeStyles,或网址SafeUri和UriUtils),更精确地从部件构建HTML/CSS/URL被输送到浏览器的解析,有没有例外.
实际上,我们最近讨论是否弃用Element.setInnerHtml和其他类似的API(HasHTML)赞成Element.setInnerSafeHtml等(HasSafeHtml).