Django stripe js blocking of inline script



我正在尝试在 Django 中实现条纹支付系统。对于添加卡付款,我遵循了此链接中的指南。在 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会阻止此类连接。应该注意的是,在此阶段,测试信用卡付款按预期工作,客户借记的金额将添加到我的 stripe 账户的测试余额中。为了解决此阻塞问题,我按照此链接中的说明进行操作。因此,我在 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 控制台中。 :)

你能帮我解决这个问题吗?我对火狐控制台错误原因的理解是否正确?为什么实施的解决方案不起作用?

编辑

考虑到付款按预期工作并且 Chromium 浏览器不会在开发人员工具上记录任何错误,它是否只是 Firefox 错误?

根据Mozilla关于Content-Security-Policy的文档,还有大量其他安全策略,如果您的js/css文件需要设置其中之一,它们将被阻止。

幸运的是,有一个简单的解决方法,default-src. 从上述文档中:

HTTP Content-Security-Policy (CSP( default-src 指令用作其他 CSPfetch 指令的回退。对于以下每个缺少的指令,用户代理将查找 default-src 指令并为其使用此值:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; ...

请注意default-src仅适用于 fetch 指令,因此您可能需要添加一些页面所需的策略。

此外,您需要为您定义的每个策略指定self,因为 Firefox 只会在所需策略为时查看default-src

因此,如果您有这样的策略:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src http://example.com;">

您将自己排除在script-src策略之外,但您应该受到所有其他策略的保护,除了在寻求default-src之前将script-src视为备份的策略(例如script-src-elem(。

不幸的是,这也扩展到脚本具有的所有依赖项,例如引导或jQuery。 每个依赖项都需要在它们所需的每个策略中显式引用。

要是有人有一个包来简化这个过程就好了......

最后,这个答案是了解内容安全策略的绝佳资源。

编辑

为了给您页面所需的确切Content-Security-Policy,我需要查看您收到的错误消息。 话虽如此,根据我掌握的信息,这里有一个猜测(为了便于阅读,使用换行符(:

<meta http-equiv="Content-Security-Policy" content="
default-src 'self'; 
connect-src 'self' https://api.stripe.com; 
frame-src 'self' https://js.stripe.com https://hooks.stripe.com; 
script-src 'self' https://js.stripe.com 'unsafe-inline'
"  />

不应在实际代码中向策略添加换行符,而应按如下方式编写:

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self' https://api.stripe.com; frame-src 'self' https://js.stripe.com https://hooks.stripe.com; script-src 'self' https://js.stripe.com 'unsafe-inline'"/>

这个问题的答案是Redux DevToolsFirefox扩展。禁用此扩展后,控制台错误将消失。您可以通过在启用了Redux DevTools的Firefox浏览器中转到此链接来轻松测试这一点。关于这个问题还有一个开放的 github 问题。

我建议你使用Mozilla的django-csp。 它非常易于配置,并且运行良好。

在这里,您可以找到存储库: https://github.com/mozilla/django-csp

这里是文档:https://django-csp.readthedocs.io/en/latest/

相关内容

  • 没有找到相关文章

最新更新