在 HTML 页面已经加载并且“主”CSP 已经评估之后,谁能解释 XHR 请求中的 CSP 标头如何提高安全性?这在浏览器中是如何工作的?
加上上面granty的正确答案,帧通常用于CSP绕过。如果页面中允许一个框架(未被 CSP 阻止),则该框架有它自己的 CSP 范围。因此,如果您为数据创建一些 API - 您不希望将其设置为框架,因为它可用于绕过原始 CSP(例如数据泄露)。
所以你可以通过设置来封堵这个漏洞Content-Security-Policy: frame-ancestors 'none';
,然后你的API就会拒绝被加框。
有关更多信息,请参阅有关绕过 CSP 的文章。POC 使用了一种创造性的技巧:
frame=document.createElement(“iframe”);
frame.src=”/%2e%2e%2f”;
document.body.appendChild(frame);
这反过来会触发没有设置任何 CSP 的 NGINX 错误代码页。许多生产 CSP 容易受到此问题的影响。
由于不在框架页面上设置 CSP 基本上默认为无 CSP(一切都是打开的),因此文章建议:
CSP 标头应出现在所有页面上,Web 服务器返回的错误页面上的事件