【问题标题】:Is it possible to have CSP only apply to the parent frame, not any iframes?是否可以让 CSP 仅适用于父框架,而不适用于任何 iframe?
【发布时间】:2015-05-24 21:47:34
【问题描述】:

如果我有一个 CSP 设置为的网页:

default-src 'self'; img-src *

或类似的,我有一个像这样的 iframe:

some legal content
<iframe sandbox="allow-scripts" srcdoc="&lt;script>alert('arbitrary code')&lt;/script>"></iframe>

是否可以允许 iframe 中的代码违反父框架的 CSP 并允许内联脚本/样式、来自其他域的内容或任何其他不违反沙盒限制的任意 HTML 内容?

目前这将给出:

[错误] 拒绝执行内联脚本,因为它违反了以下内容安全策略指令:“default-src 'self'”。请注意,'script-src' 没有明确设置,因此 'default-src' 用作后备。 (关于:srcdoc,第 1 行)

CSP spec 确认这是正确的行为:

每当用户代理在嵌套在 受保护的资源,如果用户代理是 enforcing 任何 policies 对于受保护的资源,用户代理必须 enforce 那些 policies@987654327@ srcdoc 文档上也是如此。

【问题讨论】:

    标签: html iframe sandbox content-security-policy


    【解决方案1】:

    这是不可能的。

    只有两种方法可以完成您的目标:

    1. 更改父页面的 CSP 规则以将您的任意代码列入白名单(我建议对您的任意内容使用 CSP 随机数或哈希值,而不是 unsafe-inline)。
    2. 将您的 iframe 指向一个外部(子)域,使用您可以控制的规则并将其列入白名单,frame-srcchild-src(参见第 1 点)。

    【讨论】:

    • 所以基本上我需要设置一个回显服务器,它只会返回任意代码,所以 iframe 不是“iframe srcdoc 文档”?
    • 是的,但是该回显服务器必须与原始文档位于相同的域、端口和协议上(因为那是 'self')。或者您需要将frame-src https://domain.com/; child-src https://domain.com/ 添加到父文档,因为frame-srcchild-src(分别用于旧版和新版浏览器中的iframe)继承自default-src,如果它们没有明确设置的话。
    猜你喜欢
    • 1970-01-01
    • 2020-08-11
    • 2010-10-22
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多