---

title: CSP样式策略治理(style-src nonce/hash)最佳实践

keywords:

  • CSP
  • style-src
  • nonce
  • hash
  • 内联样式

description: 通过CSP的style-src使用nonce或哈希治理内联样式,移除unsafe-inline并封装受控样式插入,降低XSS与样式注入风险。

categories:

  • 文章资讯
  • 编程技术

---

背景与价值

样式内联易被滥用。使用nonce或哈希可在保证功能的同时提升安全。

统一规范

  • 禁用unsafe-inline:统一移除style-src中的unsafe-inline。
  • 使用nonce:为受控内联样式分配nonce并插入。
  • 哈希支持:对固定样式片段使用sha256哈希。

核心实现

CSP头与nonce生成

type Res = { setHeader: (k: string, v: string) => void }

function genNonce(): string { const u = new Uint8Array(16); crypto.getRandomValues(u); let s=''; for (let i=0;i<u.length;i++) s += u[i].toString(16).padStart(2,'0'); return s }

function setCspStyle(res: Res, nonce: string) { res.setHeader('Content-Security-Policy', `style-src 'nonce-${nonce}'`) }

受控样式插入

function insertStyle(css: string, nonce: string): HTMLStyleElement {
  const el = document.createElement('style')
  el.setAttribute('nonce', nonce)
  el.textContent = css
  document.head.appendChild(el)
  return el
}

落地建议

  • 为内联样式使用nonce或哈希并移除unsafe-inline,统一封装样式插入。

验证清单

  • 是否启用style-src nonce或哈希;是否移除unsafe-inline并通过受控插入。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部