我正在集成Stripe Checkout,并且一直在Safari中遇到CSP错误。我一直在调整我的CSP,以修复错误。
这是一个广泛使用的CSP的最新版本,用于查找该错误消失的基准:
<meta http-equiv="Content-Security-Policy" content="script-src * 'unsafe-inline';">
尽管即使运行了这种最宽松的CSP,我仍然在Safari中收到以下错误(由于某种原因,在Firefox中不是)。
[错误]拒绝执行脚本,因为脚本的哈希,现时或“ unsafe-inline”未出现在脚本的script-src指令中内容安全政策。(controller-c8316b84ec1741b377c2f37269945d8f.html,第0行)
此文件似乎是Stripe控制器资产。
一旦我得到错误排序,这就是我想使用的CSP:
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'; img-src 'self' https://*.stripe.com https://www.google-analytics.com; connect-src 'self' https://www.google-analytics.com https://checkout.stripe.com; script-src 'self' https://checkout.stripe.com https://js.stripe.com *.jquery.com *.cloudflare.com *.bootstrapcdn.com *.google-analytics.com 'unsafe-inline' 'unsafe-eval'; style-src https://*.bootstrapcdn.com *.stripe.com 'self' 'unsafe-inline'; frame-src https://checkout.stripe.com https://js.stripe.com https://hooks.stripe.com;">
我不知道是页面的CSP引发了错误还是Stripe的CSP?这是我在Stripe的V3.js(我的页面包含以启用Stripe检出)标题中看到的内容:
Content-Security-Policy: default-src 'self'; connect-src 'self' https://api.stripe.com https://errors.stripe.com; script-src 'self'; style-src 'self' 'unsafe-inline'; frame-src 'self'; img-src 'self' https://q.stripe.com; font-src data: https:; media-src 'none'; object-src 'self';
我认为此可能相关的原因是,因为您可以看到script-src指令不包含'unsafe-inline',而我的CSP确实包含了该内容。
好吧,我得到了这种分类,在此过程中我学到了两个重要的东西:
首先,CSP错误是由Safari扩展引起的!
首要经验是禁用所有扩展,并查看是否仍然出现错误。重新启用所有扩展仍然会导致错误,但是我的功能现在可以使用了。这导致了我学到的第二件事:
HTML按钮自动提交。我不知道为什么我的点击事件似乎在页面加载之前没有注册。将按钮更改为输入type = button可使我触发单击事件,并启动stripe.redirectToCheckout。
对我来说是很大的收获,希望对SO社区来说是小的收获?
检查您的扩展程序,并检查您的按钮,然后查看您的位置。
干杯。