【问题标题】:For SafeHtml, Do we need to sanitize the "link" in <img src=link> tag, GWT?对于 SafeHtml,我们是否需要清理 <img src=link> 标签中的“链接”,GWT?
【发布时间】:2013-04-29 20:19:55
【问题描述】:

我有一个允许用户放置图像链接的文本框(例如:http://abc.test.gif)和另一个允许用户放置替代文本的文本框(例如:“这是 test.gif”)和一个提交按钮。

当用户点击提交按钮时,程序将生成&lt;img src="http://abc.test.gif" alt="This is test.gif"&gt;这个字符串并将其存储到数据库中以备后用。

我的问题是:我需要清理图片链接"http://abc.test.gif" 和alt 标签中的文本"This is test.gif"

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

【问题讨论】:

    标签: image gwt tags sanitize


    【解决方案1】:

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

    此外,您将字符串存储在数据库中以供以后使用(猜测),因此 攻击 可能会在以后发生,当您将使用此类字符串在 DOM 中创建节点时,结果更加不可预测。

    一种解决方案可能是在数据库中仅存储 URL 和替代字符串(如果有,则使用适当的输入验证),并在您使用时生成 safe img sn-p需要它,使用如下所示的简单模板(或以编程方式使用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 sn-p。

    【讨论】:

    • 谢谢你,Andrea,很少有人能回答这个问题。
    猜你喜欢
    • 2017-06-23
    • 2012-10-29
    • 2011-07-21
    • 2013-05-13
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    相关资源
    最近更新 更多