我有一个允许用户放置图像链接的文本框(例如:http://abc.test.gif)和另一个允许用户放置替代文本的文本框(例如:“这是 test.gif”)和一个提交按钮。
当用户点击提交按钮时,程序会生成<img src="http://abc.test.gif" alt="This is test.gif">
此字符串并将其存储到数据库中以备后用。
我的问题是:我需要清理图像链接 "http://abc.test.gif"
& alt 标签中的文字 "This is test.gif"
例如,我是否需要使用 UriUtils.isSafeUri("http://abc.test.gif");
& SafeHtmlUtils.fromString("This is test.gif"
最佳答案
您故意允许用户输入他想要的任何内容,这些内容将进入 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));
这样你:
关于image - 对于 SafeHtml,我们是否需要清理 <img src=link> 标签中的 "link",GWT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16392625/