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

  • SafeHtml
  • SafeHtmlBuilder

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

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

    最佳答案

    查看SafeHtml的最简单方法是将所有HTML标记都适当转义的String。这样可以防止跨站点脚本(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());
    

    这是一个很好的guide to SafeHtml in the GWT documentation,值得一读。

    07-27 23:12