【发布时间】:2020-06-14 14:19:43
【问题描述】:
我已经阅读了几篇关于为网站实施 Content-Security-Policy 的文章,但我仍然不知道如何为我的网站正确地组合在一起。抱歉,如果还有其他关于此的帖子,但到目前为止我还没有找到可以帮助我解决问题的帖子。
我有纯 HTML 文件,我使用自己的 JavaScript 根据用户的输入在 HTML 画布上进行一些渲染。
我在“js”目录中有 .js 文件。目前我在子目录中运行我的网站,所以我使用相对而不是绝对路径来包含它们:
<script type="text/javascript" src="js/wbsc-eval.js"></script>
<script type="text/javascript" src="js/wbsc-global.js"></script>
<script type="text/javascript" src="js/wbsc-input.js"></script>
<script type="text/javascript" src="js/wbsc-output.js"></script>
这是我的 CSP 标头:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; child-src 'none'; object-src 'none'; style-src 'self' https://stackpath.bootstrapcdn.com; script-src 'self';">
它允许我自己的 CSS + Bootstrap 之一,但我的 JS 被阻止了:
Refused to execute inline event handler because it violates the following Content Security Policy directive: "script-src 'self'". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enable inline execution.
根据我的阅读,我认为script-src 'self' 应该允许来自同一站点的脚本,但显然不是。
我还尝试设置一个明确的 URL,我的网站当前托管在该位置,但我认为这不是正确的方法,因为它应该是可移植的 + 无论如何它似乎不起作用。
有没有一些简单直接的方法来做到这一点?允许明确设置我自己的脚本并禁止其他所有内容?
添加'unsafe-inline' 有效,但我听说这就像根本没有 CSP 一样,我还遇到了一些我仍然不允许在我的脚本中执行的 JS 操作。我想我可以每次都计算我的 JS 的 SHA 哈希并将其传递给 HTML 标头。但是我在开发过程中不断地更改脚本,所以看起来不是很方便。最后 - 如果有一些简单的机制可以动态创建随机数,我可能会考虑使用它。但就我的目的而言,我认为我不需要一些强大的框架,我对一个 HTML + 几个 JS 文件做得很好......
【问题讨论】:
标签: javascript html http security content-security-policy