跳到主要内容
AZ Tools

CSP 哈希生成器

粘贴内联脚本或样式的精确内容(不含 <script> 标签,无前后空白差异),工具会对其 UTF-8 字节计算 SHA-2 摘要,进行 base64 编码,并输出 CSP 接受为白名单条目的 'sha256-…' 形式令牌。浏览器在解析时以相同方式哈希,因此任何字节不一致 —— 包括行尾 —— 都将匹配失败,块无法执行。当你确实需要一段极小的内联代码时,用它替代 'unsafe-inline'。

算法
目标指令

粘贴要哈希的内容。

浏览器按内联元素的精确字节进行哈希。空白、缩进与行尾都会影响。

使用方法

  1. 粘贴脚本主体(<script> 与 </script> 之间的全部内容)或样式主体。
  2. 选择算法(几乎所有场景 sha256 足够;如政策要求可用 384/512)。
  3. 把结果 'sha256-…' 令牌复制到对应的 -src 指令中。

常见问题

空白和换行重要吗?
重要 —— 浏览器哈希的是元素的字面字节。末尾换行或不同缩进会令哈希失效。粘贴标签间的精确内容即可。
应该总是用 sha512 吗?
不必。sha256 是事实上的基线;只有政策或审计要求时才需要 sha384/sha512。更长的摘要在此并不增加真正的安全性 —— 威胁模型假定内联内容是作者本人写的。
该用哈希还是 nonce?
内容永不改变的脚本适合用哈希:算一次,贴进静态头部即可。按请求动态生成的内容适合用 nonce:它是服务器在每个响应里新生成的随机值,同时写进头部和标签。nonce 绝不能做的事是被复用或可被预测——一个能跨响应存活的 nonce,恰好放行了这条策略本要阻止的注入。
上线之后哈希对不上了,是什么变了?
几乎肯定是脚本的字节变了。重命名变量的压缩器、重写模板的构建步骤、从制表符改成空格、编辑器补上的末尾换行——即使代码行为完全相同,它们都会算出不同的摘要。请把哈希作为构建过程的一步,从真正发布出去的那份文本生成,而不是从你编辑的源码生成。

相关工具