为了摆脱整个unsafe-inline
,我一直在尝试弄乱必要的CSP标头。根据Google的own documentation,
我们建议使用CSP3中记录的基于随机数的方法。使 确保在reCAPTCHA api.js脚本标记中包含您的现时,并且 我们会处理剩下的。
接下来,您可以或者添加style-src 'unsafe-inline'
(我宁可不要)。
但是据我所知,这要比他们说出的要复杂得多。 我已经从添加使用CSP标头切换为使用
app.Use(async (context, next) =>
{
context.Response.Headers.Add("Content-Security-Policy",
"script-src 'self' 'unsafe-inline' https://www.google.com https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; " +
"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; " +
"img-src 'self'"
);
await next();
});
实施NWebsec软件包并进行
app.UseCsp(options => options
.ScriptSources(s => s.Self().CustomSources(
"https://www.google.com",
"https://www.google.com/recaptcha/",
"https://www.gstatic.com/recaptcha/"))
.StyleSources(s => s.Self().UnsafeInline())
.ImageSources(s => s.Self()));
添加时
@addTagHelper *, NWebsec.AspNetCore.Mvc.TagHelpers
到_ViewImports.cshtml
,然后相应地添加nws-csp-add-nonce="true"
标签属性。
<script nws-csp-add-nonce="true" src="https://www.google.com/recaptcha/api.js"></script>
这可以解决随机数问题,但是如果不添加unsafe-inline
,产生一堆style-src
违规错误以及有效地不隐藏包含reCAPTCHA响应的textarea
,它仍然无法正常工作。
这似乎违反了添加随机数的目的。
关于同一件事,也有类似的话题left,所以这是一个错误或者我什么都没看到。
如果有人解决了这个问题和/或有其他聪明的主意,我将不胜感激!