什么是最大允许内容安全策略?

时间:2016-07-19 14:21:37

标签: content-security-policy

我有一个庞大的遗留代码库,我想在其上引入Content-Security-Policy标头。在短期内真正锁定网站是不可行的(例如,在整个地方都没有自动化测试覆盖的内联脚本),但至少我可以开始禁止访问我知道的内容源当然,目前还没有使用,然后随着时间的推移慢慢减速。

不幸的是,未使用的源列表相当短。这是我第一次尝试Content-Security-Policy值:

default-src * 'unsafe-eval' 'unsafe-inline'

这破坏了许多事情,例如images sourced using the data: scheme。环顾四周,我看到了a number of things you might want to include,例如connect-src ws:the docs未明确提到这些内容。

什么是最大允许Content-Security-Policy标头值,它基本上允许网站执行浏览器默认允许执行的所有操作?问另一种方式:我可以介绍什么标题值,绝对不会破坏网站上的任何内容?

如果我可以从我知道不会破坏任何内容的内容开始,那么我会觉得将标头引入旧网站更为舒服,然后减去我知道可以安全删除的权限。

2 个答案:

答案 0 :(得分:6)

tl; dr使用"仅报告"模式,用于向旧网站引入策略。

参见w3.org/TR/CSP2/#source-list-guid-matching。

  

如上所述,引用特定部分的特殊URL方案   独特内容,例如"数据:"," blob:"和"文件系统:"是   排除匹配*的政策,必须明确列出。

因此,default-src * 'unsafe-eval' 'unsafe-inline' 'unsafe-dynamic' data: filesystem: about: blob: ws: wss:的某些内容可能接近最宽松的政策。当然,还有更多协议可能需要列入白名单。

无论其

通常人们采取相反的方法。他们将使用Content-Security-Policy-Report-Only: default-src 'none'部署标头,这不会影响您网站的加载,并允许您根据违规或控制台警告来降低策略。

我强烈建议您从caspr chrome extension开始创建初始策略,然后使用report-uri.io查看违规报告。当您的策略看起来稳定并且违规很少时,请将策略切换为强制模式。

答案 1 :(得分:3)

尝试

default-src *  data: blob: 'unsafe-inline' 'unsafe-eval'; 
script-src * 'unsafe-inline' 'unsafe-eval'; 
connect-src * 'unsafe-inline'; 
img-src * data: blob: 'unsafe-inline'; 
frame-src *; 
style-src * data: blob: 'unsafe-inline';
font-src * data: blob: 'unsafe-inline';

即使这样,您仍然可能会发现违规行为,如果发现违规行为,请向我报告!