【发布时间】:2020-01-22 23:20:23
【问题描述】:
我正在尝试在 Django 中实现条带支付系统。对于添加卡支付,我按照this link. 中的指南在 Django 模板中添加 HTML 标记以及 CSS 和 JS 代码作为单独的静态文件后,在 Firefox 中出现以下控制台错误:
Content Security Policy: The page’s settings blocked the loading of a resource at inline (“script-src”)
我从上面的错误消息中了解到,<script src="https://js.stripe.com/v3/"></script> JS 文件包含指向其他 JS 文件的链接,而 Firefox 阻止了此类连接。应该注意的是,在这个阶段,测试信用卡支付按预期工作,客户借记的金额被添加到我的条带账户的测试余额中。为了解决这个阻塞问题,我按照this link. 中的说明进行操作,因此,我在我的 Django 模板中添加了以下meta 标签:
<meta http-equiv="Content-Security-Policy" content="connect-src https://api.stripe.com; frame-src https://js.stripe.com https://hooks.stripe.com; script-src https://js.stripe.com" />
在上面添加Content-Security-Policy 指令后,Firefox 控制台不再显示上述阻塞错误,但这次我的静态 JS 文件被阻塞了。我修改了以下指令以允许我的 JS 文件(将 'self' 添加到 'script-src' 指令):
<meta http-equiv="Content-Security-Policy" content="connect-src https://api.stripe.com; frame-src https://js.stripe.com https://hooks.stripe.com; script-src 'self' https://js.stripe.com" />
这一次之前提到的内联脚本块错误再次出现在 Firefox 控制台中。 :)
你能帮我解决这个问题吗?我对 Firefox 控制台错误原因的理解是否正确?为什么实施的解决方案不起作用?
编辑
考虑到付款按预期工作并且 Chromium 浏览器没有在开发人员工具上记录任何错误,这可能只是 Firefox 的错误吗?
【问题讨论】:
-
不是直接的答案,但可以考虑试试 Monzilla 的 Django-CSP。您可能会更幸运,并且(对我而言)配置我的 CSP 更容易。
-
@bones225 我看了那个插件。但我不想为这种“小”问题使用第三方插件,并且总是尽量避免使用它们。
-
@ElginCahangirov 我完全同意,但是,在写完你的问题的答案后,我已经认真地重新考虑使用那个包......
-
@ElginCahangirov 我知道你来自哪里。对我来说,我认为 Monzilla 包对于 Django 应用程序几乎必不可少。我喜欢将 Django 安全设置仅保留在
settings.py中。如果不同的页面需要不同的 CSP,我想一个例外。
标签: django firefox stripe-payments content-security-policy inline-scripting