В попытке избавиться от всего этого unsafe-inline
я пытался поиграться с необходимыми заголовками CSP.В соответствии с собственной документацией Google ,
Мы рекомендуем использовать подход, основанный на nonce, документированный с 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
и эффективноне скрывает textarea
, содержащий ответ reCAPTCHA.
Это, кажется, лишает цели добавления одноразового номера.
Там также есть аналогичные разговоры слева и справа примерно так жетак что либо это ошибка, либо я чего-то не вижу.
Если кто-то справится с этим и / или у него появятся какие-нибудь другие яркие идеи, я действительно буду признателен за это!