我已经阅读了几篇有关为网站实施内容安全策略的文章,但是我仍然不知道如何为我的网站正确地将其组合在一起。抱歉,如果还有其他话题,但到目前为止,我还没有找到一个可以帮助我解决问题的线索。
我有纯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,该URL当前托管在我的网站上,但是我认为这不是正确的方法,因为它应该是可移植的,而且似乎也无法正常工作。
是否有一些简单明了的方法?要允许我自己的脚本的明确集并禁止其他所有内容?
添加'unsafe-inline'
可行,但是我听说这完全没有CSP,而且我还遇到了一些我在脚本中仍然不允许执行的JS操作。我想我可以每次计算JS的SHA哈希并将其传递给HTML标头。但是我在开发过程中经常更改脚本,因此看起来不太方便。最后-如果有一些简单的机制可以动态创建随机数,我可能会考虑使用它。但是出于我的目的,我认为我不需要一些健壮的框架,使用一个HTML +几个JS文件就可以了...
拒绝执行内联事件处理程序
因此问题与正在加载的<script>
元素无关(至少直接无关)。>您在某处有类似的东西:
<button onclick="call_a_function()">
这是一个内联事件处理程序。
用addEventListener
替换