🛡️ 如何快速生成 CSP script-src Hash(支持 sha256/sha384/sha512)

在设置 Content Security Policy(内容安全策略) 时,经常会遇到这种错误:

content_security_policy_script_src: 值必须是 'unsafe-eval' 或 'wasm-unsafe-eval',或者是 '<hash algorithm>-<base64 value>' 形式…

也就是说,当你想允许内联 <script> 或动态脚本时:

:white_check_mark: 必须使用 CSP Hash 格式

:cross_mark: 不能随便写 unsafe-inlineunsafe-eval(不安全且被浏览器拒绝)

典型格式如下:


Content-Security-Policy: script-src 'self' 'sha256-AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcd=';

那这个 hash 从哪来?当然用工具来帮你算!


:fire: 两个极好用的在线工具


:brain: 1) report-uri.com — CSP Hash 生成 + 安全检测

:backhand_index_pointing_right: https://report-uri.com/home/hash

这是业内最常用的 CSP Hash 工具之一,也兼具 CSP 安全检查功能。

:hammer_and_wrench: 使用方式(一步搞定)

  1. 打开网站

  2. 在 textarea 粘贴你要允许的 JS 代码

  3. 下拉选择算法(推荐:SHA-256SHA-384

  4. 点击 “Generate”

:backhand_index_pointing_down: 它会输出类似这样:


sha256-AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcd=

你只需在 CSP 里这么写:


Content-Security-Policy: script-src 'self' 'sha256-AbCdEfGhIjKlMnOpQrStUvWxYz1234567890abcd=';

:sparkles: 优点:

  • 自动处理 base64

  • 支持多种 hash(sha256/384/512)

  • UI 简洁、速度快

  • 生成的 hash 与浏览器规则一致


:link: 2) srihash.org — 专注 SRI / CSP Hash 生成

:backhand_index_pointing_right: https://www.srihash.org/

这个网站专门用于生成 Subresource Integrity (SRI) + CSP Hashes,同时支持:

:check_mark: SHA-256

:check_mark: SHA-384

:check_mark: SHA-512

它的输出格式是类似:


sha384-Base64HashValue==

同样可以直接用于 CSP script-src


Content-Security-Policy: script-src 'self' 'sha384-Base64HashValue==';

:sparkles: 优点:

  • 专注 hash,简洁快速

  • 支持更高安全级别(sha384 / sha512)

  • 可用于 script / style /资源完整性


:pushpin: 什么时候需要用 Hash?

你可能会碰到这些情况:

:white_check_mark: 页面里直接写了 <script> 内联代码

:white_check_mark: 第三方 SDK 需要动态脚本但 CSP 严格

:white_check_mark: 有 CSP 但不想全局放开 ‘unsafe-inline’

此时最安全的方式是:

:right_arrow: 用 hash 白名单允许这段内联脚本

:right_arrow: 避免使用 unsafe-inlineunsafe-eval


:pushpin: 实用示例

HTML 示例


<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Security-Policy"

content="script-src 'self' 'sha256-AbCdEfGhIjK123...='">

</head>

<body>

<script>

console.log('Hello CSP!');

</script>

</body>

</html>


:pushpin: 小技巧

:small_blue_diamond: 如果脚本内容变了,hash 必须重新生成

:small_blue_diamond: 支持多个 hash,用空格隔开

:small_blue_diamond: 推荐用 SHA-384SHA-512(更安全)

示例:


script-src 'self' 'sha256-...' 'sha384-...' 'sha512-...';


:chequered_flag: 结语

使用 CSP hash 白名单,不仅能:

:check_mark: 让策略更安全

:check_mark: 防止 XSS 攻击

:check_mark: 避免乱用 unsafe-inline

还能最大限度满足现代浏览器的 CSP 要求。