概述


`strict-dynamic` 允许由可信脚本动态加载的脚本继承信任,配合随机 `nonce` 可替代来源白名单并提升安全性。该策略防止非预期脚本执行并简化第三方脚本管理。


关键实践与参数


  • 头部策略: `Content-Security-Policy: script-src 'nonce-<random>' 'strict-dynamic' https:; object-src 'none'`
  • 随机nonce: 每请求生成不可预测字符串
  • 动态加载: 仅从带nonce的根脚本引入下游脚本
  • 监控与报告: 使用 `report-to`/`report-uri`

示例/配置/实现


// Node服务端生成nonce并注入
import crypto from 'crypto'
function genNonce() { return crypto.randomBytes(16).toString('base64') }
app.use((req, res, next) => {
  const nonce = genNonce()
  res.setHeader('Content-Security-Policy', `script-src 'nonce-${nonce}' 'strict-dynamic' https:; object-src 'none'`)
  res.locals.nonce = nonce
  next()
})

<script nonce="{{nonce}}">/* bootstrap可信脚本 */</script>

// 可信脚本中动态加载
const s = document.createElement('script')
s.src = 'https://cdn.example.com/app.js'
document.head.appendChild(s)

验证


  • 非可信拦截: 未带nonce的内联脚本与插入的脚本被拒绝
  • 信任链: 由带nonce脚本加载的下游脚本正常执行
  • 报告: 违规事件通过CSP报告端点可见
  • 兼容性: 在现代浏览器上工作, 旧版需回退策略

注意事项


  • 每请求生成唯一nonce, 禁止复用
  • 移除 `'unsafe-inline'` 与广泛白名单
  • 第三方脚本需通过可信引导加载
  • 搭配COOP/COEP与Permissions-Policy协同治理

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部