提问人:Ben Brocka 提问时间:1/9/2018 更新时间:1/9/2018 访问量:1311
Service Worker 使用不正确的(缓存)内容安全策略
Service worker uses incorrect (cached) Content Security Policy
问:
在尝试使用内容安全策略来保护我的网站以及 ServiceWorker 来加速它并让它离线运行时,我发现了一个有趣的问题。
这是一个标准的 Wordpress 网站,插件开发人员有一个顽皮的习惯,即使用外部资源,尤其是在 /wp-admin/ 部分。我不知道在主网站上将大量东西列入白名单(特别是 unsafe-eval,这是管理部分的常见罪魁祸首),所以我所做的是制作一个主 CSP,然后在 /wp-admin/ 中我取消设置并重置一个限制较少的集合。
下面是我用来在站点的管理区域中取消设置 CSP 的代码示例:
<Location /wp-admin/>
<IfModule mod_headers.c>
Header always unset Content-Security-Policy
Header unset Content-Security-Policy
Header set Content-Security-Policy " default-src 'self' ps.w.org;"
</IfModule>
</Location>
除非您去过(或打开了另一个选项卡)站点的主要区域,否则它工作正常,此时 ps.w.org 指令(和其他指令)将被忽略。一堆资产最终被阻止,脚本不起作用,等等。在 admin 部分刷新页面会临时加载正确的 CSP,因此我知道它正在被使用;它只是被主要的覆盖了。有时,主站点也会发生同样的情况,也会加载管理员 CSP。
ServiceWorker 是否缓存了 CSP,或者这里到底发生了什么?有没有办法让 ServiceWorker 尊重页面应该在其标头中发送的 CSP?目前,我只是将两个 CSP 设置合并为一个,并删除了管理区域过于宽泛的规则,但这并不理想。
答: 暂无答案
评论