哪种解决方案是清除<img/>&amp;的网址的正确方法。 <a href=""> tag in GWT?</a>

时间:2014-04-03 04:41:42

标签: gwt

我在Google上搜索如何清理GWT中的URL&amp;找到了太多不同的方法来做到这一点。我很困惑&amp;我无法做出决定。

所以,假设你有一个文本框,允许用户输入html url&amp;然后你可以将该url字符串包装在内部或标记中,然后将其插入到DB中。有一个表有一个存储html代码的列,如下所示:

<a href=\"...\">AA</a>
<img src=\"http://xxxx\">
//more html rows  here

所以假设用户输入http://car.com/pic.gif,然后在用户点击“提交”按钮后,我想将其存储在myDB中,如下所示:

<img src=\"http://car.com/pic.gif\">

但是用户可以输入任何内容,因此我们必须确保网址输入是安全的。所以这里有一些选择:

-Option1:

String str="http://car.com/pic.gif";
if(!UriUtils.isSafeUri(str)){
   String safeStrURI=UriUtils.sanitizeUri("<img src="+str+"><br/>");
   storeUrl(safeStrURI);// store html string into DB
}

-option2:

    String str="http://car.com/pic.gif";
    SafeHtmlBuilder builder = new SafeHtmlBuilder();
    builder.appendHtmlConstant("<img src=");
    builder.appendEscaped(str);
    builder.appendHtmlConstant("><br/>");
    String safeStrURI=builder.toString();
    storeUrl(safeStrURI);// store html string into DB

-Option3:

String str="http://car.com/pic.gif";
String safeStrURI="<img src="+UriUtils.fromString(str).asString()+"><br/>";
storeUrl(safeStrURI);// store html string into DB

/ .....还有一些解决方案,但我不知道

我不明白Google为什么不做出1或2种方法来实现这一目标,为什么有这么多方法可以让我非常困惑

那么,哪个选项有助于解决我的问题。

或者您知道其他选择吗?

1 个答案:

答案 0 :(得分:2)

  • 选项1已损坏。在sanitizeUri与HTML位连接之前,str应该应用isSafeUri。这使它或多或少等同于选项3,模拟对appendHtmlConstant的调用。

  • 选项2不安全,实际上会失败,因为传递给isSafeUri的值(参见javadoc

IMO,您应首先检查",然后,为了确保安全,您应该连接值,但要确保生成有效的HTML(例如'SafeHtml值不会关闭您的属性值)。为此你有SafeHtml但它只适用于元素级别;如果您需要更深入(在属性级别),那么您有SafeHtmlTemplates(请注意,它只能在客户端代码中使用,与SafeUri相反, interface Templates extends SafeHtmlTemplates { @Template("<img src=\"{0}\">") SafeHtml img(SafeUri uri); } static final Templates TEMPLATE = GWT.create(Templates.class); if (UriUtils.isSafeUri(str)) { String img = TEMPLATE.img(UriUtils.fromString(str)).asString(); store(img); }

{{1}}