按资源类型表达允许规则

服务器通常以Content-Security-Policy响应头传递策略,用指令区分脚本、图像、连接等用途。default-src为其他取用类指令提供回退值,但不是所有安全指令的总开关,也不是把一条来源名单无条件叠加给所有显式规则。

例如显式script-src会按相应规则处理脚本,不继续从default-src继承一个附加允许集合。策略中写出某来源,含义也取决于所在指令;允许取得图片并不自动表示同一位置的脚本也可执行。

参考:[1]

nonce区分被明确许可的内容

策略可用nonce来源表达式与相应元素的nonce关联,许可原本会受内联限制的内容。这一值的作用是可验证关联,不是把脚本文字加密,也不能让页面随意给未知脚本补上相同值而仍指望隔离有效。

CSP3要求每次传送含nonce的策略时产生唯一值,并强调难以预测。一个长期不变、所有页面共用的常量不能提供同样保证;若攻击者能取得并正确复用被许可的nonce,也可能把自己的内容放入这一许可范围。

参考:[1]

报告不等于阻断,多策略需分别通过

Content-Security-Policy-Report-Only只观察并报告违反情况,不据此阻止执行。多个执行策略则各自生效:某请求须同时满足它们,另加一条较宽松的策略不会把原先较严格的限制抹去;meta交付方式也并非支持全部响应头能力。

这些机制可发现部署问题并增加执行约束,但不能把不可信文本变成代码的数据流自动改好。输出上下文、HTML净化和模板保护仍需成立;浏览器允许执行某脚本,也不是服务端授权该脚本发出的所有业务操作。

参考:[1] [2]