概述在复杂前端中,脚本往往通过加载器动态引入。`script-src 'strict-dynamic'` 允许将对受信根脚本的信任(由 nonce 或 hash 赋予)传播到其动态加载的子脚本,从而简化域白名单并提升安全性与可维护性。关键语义`strict-dynamic`:对伴随 nonce/hash 的根脚本赋予信任,并将信任传播到它所加载的脚本;同时忽略白名单与 `'self'`、`'unsafe-inline'`(由受信脚本链决定)[参考1,2,3]。`nonce-source`:每次响应生成不可预测 nonce,标记内/外部脚本,浏览器校验匹配;需每请求唯一且高熵[参考1,2]。`hash-source`:为内联脚本计算 `sha256/384/512`,只匹配内容不匹配事件处理器;适合内联块但不推荐事件属性[参考1,2]。兼容性部署渐进兼容策略:`script-src 'strict-dynamic' 'nonce-<rand>' https:` 在 CSP1/CSP2 浏览器退化为 `'unsafe-inline' https:` 或 `'nonce-...'` 行为,在 CSP3 上启用严格动态[参考1,3,5]。避免 `'unsafe-inline'`;若需兼容旧浏览器内联块,可在过渡期评估风险并逐步替换为外链+nonce/hash。工程建议生成高熵 nonce(加密安全随机),仅当前响应可用;统一加载入口脚本并以 nonce 标记。使用加载器管理动态依赖,减少域白名单维护;配合 `report-to`/`Report-Only` 观测违规。参考与验证[参考1]MDN:`script-src` 指令与 `strict-dynamic`、nonce/hash 行为说明与示例:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src[参考2]MDN 文档:`script-src` 兼容性与严格动态语义说明(忽略白名单与 `'self'`):https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Security-Policy/script-src[参考3]MDN 备份:`strict-dynamic` 说明与渐进兼容策略示例:https://udn.realityripple.com/docs/Web/HTTP/Headers/Content-Security-Policy/script-src[参考4]站点:strict-dynamic 解释与 CSP 等级差异及策略范例:https://content-security-policy.com/strict-dynamic/关键词校验关键词与 CSP 严格动态加载一致。

发表评论 取消回复