【问题标题】:HTML instead of URI encoding in regard to XSS?关于 XSS 的 HTML 而不是 URI 编码?
【发布时间】:2015-08-20 15:28:08
【问题描述】:

我正在将不受信任的数据插入到标签的 href 属性中。

根据 OWASP XSS 预防备忘单,我应该在将不受信任的数据插入 href 属性之前对其进行 URI 编码。

但是在这种情况下,HTML 编码是否也会阻止 XSS?我知道这是一个 URI 上下文,因此我应该使用 URI 编码,但是在这种情况下,URI 编码是否比使用 HTML 编码有任何安全优势?

据我所知,浏览器会在这两种情况下正确呈现链接。

【问题讨论】:

    标签: html encoding uri xss


    【解决方案1】:

    我假设这是Rule #5:

    在 HTML URL 参数中插入不受信任的数据之前的 URL 转义 价值观

    (不是第 35 条规则。)

    这是指单个参数值:

     <a href="http://www.example.com?test=...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...">link</a >    
    

    URL 和 HTML 编码可以防止不同的东西。

    URL 编码可防止参数脱离 URL 参数上下文:

    例如?firstname=john&amp;lastname=smith&amp;salary=20000

    假设这是管理员用户发出的后端请求。如果 johnsmith 的 URL 编码不正确,则恶意前端用户可能会输入他们的名称为 john&amp;salary=40000,这会将 URL 呈现为

    ?firstname=john&salary=40000&lastname=smith&salary=20000
    

    并说后端应用程序在重复的情况下采用第一个参数值。用户的工资成功翻了一番。这种攻击被称为HTTP Parameter Pollution

    因此,如果您将参数插入到 URL 中,然后插入到 HTML 文档中,则从技术上讲,您需要对参数进行 URL 编码,然后对整个 URL 进行 HTML 编码。但是,如果您不遗余力地遵循 OWASP 的建议:

    除字母数字字符外,所有字符都用 ASCII 转义 使用 %HH 转义格式的小于 256 的值。

    那么这将确保不会输出对HTML具有特殊含义的字符,因此您可以跳过HTML编码部分,使其更简单。

    【讨论】:

      【解决方案2】:

      示例 - 如果允许用户输入建立相对链接(到 http://server.com/),并且 javascript:alert(1) 由用户提供。

      URL 编码:&lt;a href="javascript%3Aalert%281%29"&gt; - 链接将指向http://server.com/javascript%3Aalert%281%29

      仅实体编码:&lt;a href="javascript&amp;colon;alert;&amp;lpar;1&amp;rpar;"&gt; - 点击导致 javascript 执行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-24
        相关资源
        最近更新 更多