哪种解决方案是清理<;URL的正确方法;img>&&书信电报;a href>;GWT中的标签?
我在谷歌上搜索如何在GWT中清理URL,发现有太多不同的方法可以做到这一点。我很困惑&我无法做出决定 所以,假设您有一个允许用户输入HTMLURL的文本框&然后您可以在将url字符串插入数据库之前将其包装在或标记中。有一个表有一列存储html代码,如下所示:哪种解决方案是清理<;URL的正确方法;img>&&书信电报;a href>;GWT中的标签?,gwt,Gwt,我在谷歌上搜索如何在GWT中清理URL,发现有太多不同的方法可以做到这一点。我很困惑&我无法做出决定 所以,假设您有一个允许用户输入HTMLURL的文本框&然后您可以在将url字符串插入数据库之前将其包装在或标记中。有一个表有一列存储html代码,如下所示: <a href=\"...\">AA</a> <img src=\"http://xxxx\"> //more html rows here <img src=\"http://car.com/
<a href=\"...\">AA</a>
<img src=\"http://xxxx\">
//more html rows here
<img src=\"http://car.com/pic.gif\">
但是用户可以输入任何内容,因此我们必须确保url输入是安全的。以下是一些选择:
-备选案文1:
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
}
String str=”http://car.com/pic.gif";
如果(!UriUtils.isSafeUri(str)){
字符串safeStrURI=UriUtils.sanitizeUri(“
”);
storeUrl(safeStrURI);//将html字符串存储到数据库中
}
-备选案文2:
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
String str=”http://car.com/pic.gif";
SafeHtmlBuilder=新的SafeHtmlBuilder();
builder.appendHtmlConstant(“
”);
字符串safeStrURI=builder.toString();
storeUrl(safeStrURI);//将html字符串存储到数据库中
-备选案文3:
String str="http://car.com/pic.gif";
String safeStrURI="<img src="+UriUtils.fromString(str).asString()+"><br/>";
storeUrl(safeStrURI);// store html string into DB
String str=”http://car.com/pic.gif";
字符串safeStrURI=“
”;
storeUrl(safeStrURI);//将html字符串存储到数据库中
/。。。。。还有一些解决方案,但我不知道
我不明白为什么谷歌不为实现这一目标而制定一两种方法,为什么有这么多的方法让我非常困惑
那么,哪个选项对解决我的问题有好处呢
或者你知道其他选择吗?- 选项1已失效
应该在sanitizeUri
上应用,然后再与HTML位连接。这使得它或多或少相当于选项3,对str
的调用进行模化isSafeUri
- 选项2是不安全的,并且由于传递给
的值而实际失败(请参阅)appendHtmlConstant
isSafeUri
,然后,为了真正安全,您应该连接值,但确保生成有效的HTML(例如,值中的“
或”
不会关闭您的属性值)。为此,您有SafeHtml
,但它只在元素级别工作;如果需要更深入的话(在属性级别),然后您就有了(注意,它只能在客户端代码中使用,与SafeHtml
和SafeUri
相反)
接口模板扩展了安全HtmlTemplates{
@模板(“”)
SafeHtml-img(SafeUri);
}
静态最终模板TEMPLATE=GWT.create(Templates.class);
如果(UriUtils.isSafeUri(str)){
字符串img=TEMPLATE.img(UriUtils.fromString(str)).asString();
商店(img);
}
非常感谢您的回答,但我只是想知道。我需要在服务器级别检查“字符串img”吗?如果在客户端级别我们确定“字符串img”,但在传递到服务器时,img不知何故被更改了呢?但我正在使用GWTP&我设置了SecurityCookie,所以我还需要在服务器级别检查吗?你是说“安全HTMLTemplates”“只能在客户端代码中使用?您能进一步解释吗?或者您认为这样更好,将str=”“存储到一列中&还有一列将其标记为image。当我们向用户显示它时,myHtml=safehtmlitls.fromSafeConstant(TEMPLATE.img(UriUtils.fromString(str)).asString())SafeHtmlTemplates
依赖于GWT生成器(GWT.create()
)生成代码,因此它不会在GWT环境(例如服务器端)之外工作。在服务器端(和客户端),您应该能够使用”
,但一般来说,是的,我认为避免存储HTML更安全。