内容安全策略

1. 概念

XSS 攻击的核心机制,是攻击者向页面注入了未经过滤的外部恶意脚本。内容安全策略是一种旨在显著降低和预防此类攻击的安全防御体系。

CSP 通过要求服务端给出对应的响应头设定(或配合 <meta> 标签配置),来告诉浏览器当前网页被允许加载和执行的具体资源来源依据。

2. 运作机制

CSP 的核心理念是白名单声明。

Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; img-src *

声明了该策略之后,浏览器会予以执行规则判断:

  • 脚本只能从当前同级域名或指定的 https://trusted.cdn.com 读取加载。任何其他域名的请求将被直接拦截阻止。
  • 图像允许从任何合规的地方加载。
  • 其他未特殊指定的资源默认从 default-src 'self' 的层级规则应用,即只能从自己同源地址加载。

3. 防护效果

CSP 可以应对大量典型的隐患注入方式:

  1. 内联脚本阻断: 默认情况下,CSP 会阻止任何形式的内联脚本执行(包括直接放置的 <script> 标签内容代码,或者 onclick 等内联点击事件)。除非管理者显式配置规则开启了 'unsafe-inline' 权限判定。
  2. 禁止 eval 执行调用: CSP 同样默认禁止应用 eval()new Function() 执行字符串代码环境,以消灭各种不受控字符串直接执行造成逻辑风险。

4. Report-Only 模式

在庞大的业务系统接轨过程中,如果突然变更全面和确定的严格防守型检查规则,容易造成第三方正常资源的被错误处理拦截,出现部分显示白屏错误。

针对此现象的平稳部署配置常常使用 Content-Security-Policy-Report-Only 头标识。在单独此标语下,浏览器将不再拦截违规操作流程,而是对于疑似违反策略判定目标的加载触发,转去发起上报的告警日志传输至配置内。收集完善遗留的正常特例后并在规则中补全扩容调整,最终实施正式无缝的限制规则部署落地。