XSS 攻击的核心机制,是攻击者向页面注入了未经过滤的外部恶意脚本。内容安全策略是一种旨在显著降低和预防此类攻击的安全防御体系。
CSP 通过要求服务端给出对应的响应头设定(或配合 <meta> 标签配置),来告诉浏览器当前网页被允许加载和执行的具体资源来源依据。
CSP 的核心理念是白名单声明。
声明了该策略之后,浏览器会予以执行规则判断:
https://trusted.cdn.com 读取加载。任何其他域名的请求将被直接拦截阻止。default-src 'self' 的层级规则应用,即只能从自己同源地址加载。CSP 可以应对大量典型的隐患注入方式:
<script> 标签内容代码,或者 onclick 等内联点击事件)。除非管理者显式配置规则开启了 'unsafe-inline' 权限判定。eval() 或 new Function() 执行字符串代码环境,以消灭各种不受控字符串直接执行造成逻辑风险。在庞大的业务系统接轨过程中,如果突然变更全面和确定的严格防守型检查规则,容易造成第三方正常资源的被错误处理拦截,出现部分显示白屏错误。
针对此现象的平稳部署配置常常使用 Content-Security-Policy-Report-Only 头标识。在单独此标语下,浏览器将不再拦截违规操作流程,而是对于疑似违反策略判定目标的加载触发,转去发起上报的告警日志传输至配置内。收集完善遗留的正常特例后并在规则中补全扩容调整,最终实施正式无缝的限制规则部署落地。