【发布时间】:2021-02-26 00:27:03
【问题描述】:
这可能有一个简单的解决方案,但我想不通。
我有一个这样定义的 CSP:
"Content-Security-Policy: default-src * 'unsafe-inline' 'unsafe-eval' data: blob:; style-src 'unsafe-inline' 'self' cdnjs.cloudflare.com fonts.googleapis.com; script-src www.google-analytics.com cdnjs.cloudflare.com 'self' 'nonce-". $_SESSION['nonce'] . "'; img-src * 'self' data:;object-src 'self' sias.dev:8000; connect-src * 'unsafe-inline'; frame-src 'self' sias.dev:8000 www.google.com;"
CSP 需要稍作调整,但可以部分工作。我需要一个随机数,因为我有一些带有一些内联脚本的旧网站。随机数是动态生成的,并在页面加载时更改。但是,我遇到了一个问题,我在通过 AJAX 调用的页面上加载了一些“自我”脚本(不是内联,而是脚本 src 标签。这可能是不好的做法,但我不想加载那些除了通过 ajax 调用的页面。
奇怪的是我在那个页面上没有任何内联脚本,只有像下面这样的脚本 src 标签,其中 nonce 是动态的并且与 CSP 策略中的匹配。
<script nonce = "" src="/js/create_dicom/js/plupload.full.min.js"></script>
<script nonce = "" src="/js/create_dicom/js/jquery.ui.plupload.min.js"></script>
<script nonce = "" src="/js/create_dicom/js/main.js"></script>
<script nonce = "" src="/bower/pdfjs/src/pdf.js"></script>
<script nonce = "" src="/bower/pdfjs/src/pdf.worker.js"></script>
当我不使用 nonce 时,我得到:
"Content Security Policy: The page’s settings blocked the loading of a resource at inline (“script-src”)."
当我使用 nonce 时,它们可以正常加载并且页面可以正常工作。我认为您只需要内联脚本的随机数而不是“自我”脚本。我应该以某种方式使用严格动态吗?我不需要在 script-src 标签的主页中使用随机数。他们在那里加载得很好?
另外,我需要 nonce 的地方大多是通过 AJAX 加载的页面上。有没有办法重构东西(即将它们放在 .js 文件中并以这种方式加载相关的 .js )。这有点痛苦,因为我没有脚本加载器,我只想为通过 AJAX 加载的文件加载相关的 js。
谢谢。
【问题讨论】:
标签: javascript ajax content-security-policy nonce