react-google-recaptcha 允许 CSP
react-google-recaptcha allow CSP
我正在使用 React js,其中一种形式是我使用的 react-google-captcha,并且在构建和后端时工作得很好,我使用提供 CSP 安全性的头盔,出现了其他错误
在搜索了很多网站后,我添加了以下元标记
<meta
http-equiv="Content-Security-Policy"
content="script-src 'self' https://www.google.com https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/;
frame-src https://www.google.com https://www.google.com/recaptcha/ https://recaptcha.google.com/recaptcha/"
/>
仍然没有运气。你遇到过这个问题吗?可以与我分享解决方案。提前致谢
在我的头盔配置中
这里是头盔维护员。
发生这种情况是因为 Helmet 默认设置的内容安全策略。 Helmet 在 HTTP header 中设置它,它会覆盖您在 <meta>
标记中输入的内容。
要解决您的问题,您需要配置 Helmet 的 CSP。
MDN has a good documentation about CSP which I would recommend reading for background. After that, take a look at Helmet's README 查看如何配置其 CSP 组件。
为了针对这个问题提供一些帮助,让我们看一下您看到的一个错误:
Refused to load the script 'https://google.com/recaptcha/...' because it violates the following Content Security Policy directive: "script-src 'self'". ...
此错误告诉您 CSP 的 script-src
指令不允许 JavaScript 从 google.com/recaptcha
加载,因此它被阻止了。
有几种方法可以解决这个问题:
更新您的 CSP 以允许 JavaScript 从 Google 加载。你会做这样的事情:
app.use(
helmet({
contentSecurityPolicy: {
useDefaults: true,
directives: {
"script-src": ["'self'", "google.com"],
},
},
})
);
重构您的应用程序以避免加载验证码。可能不可能,但这是一个可用的解决方案。
禁用 CSP。这是最危险的选择,所以我不推荐它。
app.use(
helmet({
contentSecurityPolicy: false,
})
);
总结:要解决您的问题,您需要告诉 Helmet 配置您的 CSP。
非常感谢@evanHahn 配置现在正在努力解决您需要在 ss 下方的后端配置头盔的问题。
app.use(
helmet({
contentSecurityPolicy: {
useDefaults: true,
directives: {
"script-src": ["'self'", "https://www.google.com/recaptcha/", "https://www.gstatic.com/recaptcha/"],
"frame-src": ["'self'", "https://www.google.com/recaptcha/", "https://www.gstatic.com/recaptcha/"],
},
},
}));
我正在使用 React js,其中一种形式是我使用的 react-google-captcha,并且在构建和后端时工作得很好,我使用提供 CSP 安全性的头盔,出现了其他错误
在搜索了很多网站后,我添加了以下元标记
<meta
http-equiv="Content-Security-Policy"
content="script-src 'self' https://www.google.com https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/;
frame-src https://www.google.com https://www.google.com/recaptcha/ https://recaptcha.google.com/recaptcha/"
/>
仍然没有运气。你遇到过这个问题吗?可以与我分享解决方案。提前致谢
在我的头盔配置中
这里是头盔维护员。
发生这种情况是因为 Helmet 默认设置的内容安全策略。 Helmet 在 HTTP header 中设置它,它会覆盖您在 <meta>
标记中输入的内容。
要解决您的问题,您需要配置 Helmet 的 CSP。
MDN has a good documentation about CSP which I would recommend reading for background. After that, take a look at Helmet's README 查看如何配置其 CSP 组件。
为了针对这个问题提供一些帮助,让我们看一下您看到的一个错误:
Refused to load the script 'https://google.com/recaptcha/...' because it violates the following Content Security Policy directive: "script-src 'self'". ...
此错误告诉您 CSP 的 script-src
指令不允许 JavaScript 从 google.com/recaptcha
加载,因此它被阻止了。
有几种方法可以解决这个问题:
更新您的 CSP 以允许 JavaScript 从 Google 加载。你会做这样的事情:
app.use( helmet({ contentSecurityPolicy: { useDefaults: true, directives: { "script-src": ["'self'", "google.com"], }, }, }) );
重构您的应用程序以避免加载验证码。可能不可能,但这是一个可用的解决方案。
禁用 CSP。这是最危险的选择,所以我不推荐它。
app.use( helmet({ contentSecurityPolicy: false, }) );
总结:要解决您的问题,您需要告诉 Helmet 配置您的 CSP。
非常感谢@evanHahn 配置现在正在努力解决您需要在 ss 下方的后端配置头盔的问题。
app.use(
helmet({
contentSecurityPolicy: {
useDefaults: true,
directives: {
"script-src": ["'self'", "https://www.google.com/recaptcha/", "https://www.gstatic.com/recaptcha/"],
"frame-src": ["'self'", "https://www.google.com/recaptcha/", "https://www.gstatic.com/recaptcha/"],
},
},
}));