【问题标题】:How do you allow the usage of an <img> while preventing XSS?如何在防止 XSS 的同时允许使用 <img>?
【发布时间】:2010-09-11 17:27:15
【问题描述】:

我正在将 ASP.NET Web 窗体用于博客风格的 cmets。

编辑 1:这看起来比我最初想的要复杂得多。如何过滤 src?
我宁愿仍然使用真正的 html 标签,但如果事情变得太复杂,我可能会采用自定义路线。我还没有做过任何 XML,所以我需要了解更多吗?

【问题讨论】:

    标签: xss image


    【解决方案1】:

    如果 IMG 是您唯一允许的,我建议您使用简单的方括号语法来允许它。这将消除对解析器的需求,并减少使用解析器的其他危险边缘情况的负载。比如说:

    Look at this! [http://a.b.c/m.jpg]
    

    哪个会被转换成

    Look at this! <img src="http://a.b.c/m.jpg" />
    

    您应该过滤 SRC 地址,以免恶意内容也通过 SRC 部分。像也许

    Look at this! [javascript:alert('pwned!')]
    

    【讨论】:

    • 限制图像扩展并没有太大帮助,因为您可以在服务器上设置转发,让浏览器加载您想要的任何 URL。但是,是的,我同意,使用一些替代语法似乎比为这样的事情与 HTML 清理作斗争要好得多。
    • 括号语法删除了对标记的任何部分的黑客攻击,但没有仔细过滤 src 值(无论是在 html 还是方括号语法中接受)是至关重要的。请参阅ha.ckers.org/xss.html 了解漏洞利用以及哪些浏览器分别易受攻击。
    • 不幸的是,如果有人在评论中键入了一个像 Food[1] 这样的数组,我的解析器不会尝试将其转换为图像吗?
    • 那么你必须确保方括号内的文本看起来像一个 URL。
    【解决方案2】:

    使用 XML 解析器来验证您的输入,并删除或编码您不希望允许的所有元素和属性。在这种情况下,删除或编码除&lt;img&gt; tag, and all attributes from that except src, alt and title 之外的所有标签。

    【讨论】:

    • 另外,不以 http:// 开头的 URL 也应该被禁止(尤其是 javascript:)
    【解决方案3】:

    如果您最终使用非 HTML 格式(这使得事情变得更容易 b/c 您可以从字面上转义所有 HTML),请使用像 markdown 这样的标准语法。 markdown image syntax![alt text](/path/to/image.jpg)

    还有其他的,比如Textile。它的图像语法是!imageurl!

    【讨论】:

      【解决方案4】:

      @chakrit 建议使用自定义语法,例如括号内的 URL - 这很可能是最好的解决方案。你绝对不想开始搞乱解析等。
      只需确保正确编码整个评论(根据上下文 - 请在此处查看我的答案Will HTML Encoding prevent all kinds of XSS attacks?
      (顺便说一句,我刚刚在那里发现了一个很好的自定义语法示例...... ;-))

      如前所述,将文件扩展名限制为 jpg/gif/etc - 即使可以绕过,也限制协议(例如 http://)。

      除了 XSS 之外要考虑的另一个问题是 CSRF (http://www.owasp.org/index.php/Cross-Site_Request_Forgery)。如果您不熟悉这个安全问题,它基本上允许攻击者强制我的浏览器向您的应用程序提交一个有效的经过身份验证的请求,例如转账或更改我的密码。如果它托管在您的网站上,他可以匿名攻击任何易受攻击的应用程序 - 包括您的。 (请注意,即使其他应用程序易受攻击,它们受到攻击也不是你的错,但你仍然不想成为漏洞利用主机或攻击源......)。例如,就您自己的网站而言,攻击者更容易更改您网站上的用户密码。

      【讨论】:

        猜你喜欢
        • 2011-06-26
        • 2011-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-24
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        相关资源
        最近更新 更多