https://developers.google.com/web/fundamentals/security/csp/
CSP 基于白名单来源,因为此方法可明确指示浏览器将特定的资源集视为可接受的资源,并拒绝其余资源。
https://developers.google.com/web/fundamentals/security/csp/
- 使用白名单告诉客户端允许加载和不允许加载的内容。
- 了解可使用哪些指令。
- 了解这些指令接受哪些关键字。
- 内联代码和 eval() 被视为是有害的。
- 向服务器举报政策违规行为,以免执行这些行为。
<meta http-equiv="Content-Security-Policy"
content="default-src https://cdn.example.net; child-src 'none'; object-src 'none'" />
https://github.com/xgqfrms-GitHub/webgeeker/blob/gh-pages/CSP/readme.md
如果您一定要使用它 ...
CSP Level 2 可为内联脚本提供向后兼容性,即允许您使用一个加密随机数(数字仅使用一次)或一个哈希值将特定内联脚本列入白名单。
尽管这可能很麻烦,但它在紧急情况下很有用。
要使用随机数,请为您的 script 标记提供一个随机数属性。该值必须与信任的来源列表中的某个值匹配。 例如:
现在,将随机数添加到已追加到 nonce- 关键字的 script-src 指令。
请记住,必须为每个页面请求重新生成随机数,并且随机数必须是不可猜测的。
哈希值的工作方式与此大致相同。创建脚本自身的 SHA 哈希值并将其添加到 script-src 指令,而不是为 script 标记添加代码。
例如,假设您的页面包含以下内容:
您的政策将包含以下内容:
以下是几点注意事项。
sha*- 前缀指定生成此哈希值的算法。 上面的示例中便运用了 sha256-。
CSP 同样支持 sha384- 和 sha512-。 生成此哈希值时 不包含
<script>
标记。大写字母和空格也同样重要,包括前导空格或结尾空格。
使用 Google 搜索如何生成 SHA 哈希值,将会返回任何语言的解决方法。
使用 Chrome 40 或更高版本,您可以打开 DevTools,然后重新加载您的页面。
Console 标签将包含错误消息,提供每个内联脚本的正确的 sha256 哈希值。