我有一个文本框,允许用户放置图片链接(例如:http://abc.test.gif)&另一个允许用户放置备用文本的文本框(例如:"这是test.gif"),&提交按钮。
当用户点击提交按钮时,该程序将生成<img src="http://abc.test.gif" alt="This is test.gif">
此字符串&amp;将其存储到数据库中供以后使用。
我的问题是:我是否需要清理imagelink "http://abc.test.gif"
&amp; alt标记"This is test.gif"
例如,我是否需要使用UriUtils.isSafeUri("http://abc.test.gif");
&amp; SafeHtmlUtils.fromString("This is test.gif"
答案 0 :(得分:3)
您故意允许用户输入他想要的任何内容,以及src
标记的alt
和img
属性。这确实对任何类型的XSS攻击都是开放的。请查看here,了解一些在最近的浏览器中仍然有效的示例。
此外,您将字符串存储在数据库中供以后使用(猜测),因此攻击可能会在以后使用此类字符串在DOM中创建节点时发生,结果更加难以预测。
一种解决方案可能是只在数据库中存储URL和替代字符串(如果有正确的输入验证),并在您生成安全 img
代码段时需要它,使用如下的简单模板(或以编程方式使用SafeHtmlBuilder
)。
public interface Template extends SafeHtmlTemplates {
@Template("<img src=\"{0}\" alt=\"{1}\"/>")
SafeHtml img(SafeUri uri, SafeHtml alternativeText);
}
用作:
template.img(
UriUtils.fromString(yourValidatedDbUrl),
SafeHtmlUtils.fromString(yourValidatedAlternativeText));
这样你: