4

I got a textbox that allows users to put image link (ex: http://abc.test.gif) & another textbox that allows user to put Alternate text (ex: "This is test.gif"), & a submit button.

When a user clicks on submit buton, the program will generate <img src="http://abc.test.gif" alt="This is test.gif"> this string & store it into DB for later use.

My question is: do i need to sanitize the imagelink "http://abc.test.gif" & the text in alt tag "This is test.gif"

For example, do i need to use UriUtils.isSafeUri("http://abc.test.gif"); & SafeHtmlUtils.fromString("This is test.gif"

4

1 回答 1

3

您故意允许用户输入任何他想要进入标签srcalt属性的内容。img这确实对任何类型的 XSS 攻击都是开放的。在这里查看一些在最近的浏览器中仍然有效的示例。

此外,您将字符串存储在数据库中以供以后使用(猜测),因此攻击可能会在以后发生,当您将使用此类字符串在 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));

这样你:

  • 验证用户输入;
  • 仅存储经过验证的值(原样);
  • 仅在真正需要时以安全的方式生成 img 片段。
于 2013-05-06T17:23:01.360 回答