2013-05-06 32 views
4

我有一个允许用户放置图像链接的文本框(例如:http://abc.test.gif)&另一个允许用户放置替代文本(例如:“This is test.gif”)的文本框,&提交按钮。对于SafeHtml,我们是否需要清理<img src=link>标记中的“链接”,GWT?

当用户点击提交按钮时,程序会生成<img src="http://abc.test.gif" alt="This is test.gif">该字符串&将其存储到数据库中供以后使用。

我的问题是:我是否需要消毒与ImageLink "http://abc.test.gif" &在ALT标签中的文字"This is test.gif"

例如,做我需要使用UriUtils.isSafeUri("http://abc.test.gif"); & SafeHtmlUtils.fromString("This is test.gif"

回答

3

你是故意允许用户输入任何他想要的东西都会进入src和标记的alt属性。这确实对任何一种XSS攻击都是开放的。看看here的一些例子,它们在最近的浏览器中仍然有效。

此外,您存储在您的数据库,供以后使用(猜测)的字符串,所以攻击可以在稍后的时间发生,当你将使用这些字符串创建DOM中的节点,更是不可预测的结果。

一种解决方案可能是只存储URL,并在数据库中的替代串(用正确的输入验证,如果有的话),并产生安全img片段权当你需要它,有一个简单的模板一样以下(或以编程方式使用SafeHtmlBuilder)。

template.img(
    UriUtils.fromString(yourValidatedDbUrl), 
    SafeHtmlUtils.fromString(yourValidatedAlternativeText)); 

这样你:

public interface Template extends SafeHtmlTemplates { 
    @Template("<img src=\"{0}\" alt=\"{1}\"/>") 
    SafeHtml img(SafeUri uri, SafeHtml alternativeText); 
} 

要等中使用

  • 验证用户的输入;
  • 只存储验证值(原样);
  • 只有在真正需要时才以安全的方式生成img片段。
+0

谢谢安德烈,很少有人能回答这个问题。 – Tum 2013-05-07 00:43:21