Я экспериментировал с Hanami для небольшого сайта. Он имеет очень строгие настройки безопасности по умолчанию в производстве. Вот заголовки ответа сервера:Строгие правила безопасности контента в блоке безопасности ReCaptcha в производстве
cf-ray:2f14dcb05e2307e5-LAX
content-encoding:gzip
content-security-policy:form-action 'self'; frame-ancestors 'self'; base-uri 'self'; default-src 'none'; script-src 'self' 'sha256-IAaN58htbUDxfKhUX+LYHn2kWUEjPKf5lepkdtqd1gU=' https://www.google.com/recaptcha/api.js https://www.gstatic.com https://www.google-analytics.com/analytics.js https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; connect-src 'self'; img-src 'self' https: data:; style-src 'self' 'unsafe-inline' https:; font-src 'self' https://fonts.gstatic.com https://fonts.googleapis.com; object-src 'none'; plugin-types application/pdf; child-src 'self'; frame-src 'self' https://www.google.com/recaptcha/; media-src 'self'
content-type:text/html; charset=utf-8
date:Thu, 13 Oct 2016 18:30:19 GMT
server:cloudflare-nginx
status:200
via:1.1 vegur
x-content-type-options:nosniff
x-frame-options:DENY
x-xss-protection:1; mode=block
Результирующее в:
Что-то в моем заголовке политики безопасности контента не позволяет ReCaptcha работать. Имейте в виду, что это прекрасно работает в разработке на локальном хосте, со следующими заголовками ответа:
Content-Security-Policy:form-action 'self'; frame-ancestors 'self'; base-uri 'self'; default-src 'none'; script-src 'self' 'sha256-IAaN58htbUDxfKhUX+LYHn2kWUEjPKf5lepkdtqd1gU=' https://www.google.com/recaptcha/api.js https://www.gstatic.com https://www.google-analytics.com/analytics.js https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/; connect-src 'self'; img-src 'self' https: data:; style-src 'self' 'unsafe-inline' https:; font-src 'self' https://fonts.gstatic.com https://fonts.googleapis.com; object-src 'none'; plugin-types application/pdf; child-src 'self'; frame-src 'self' https://www.google.com/recaptcha/; media-src 'self'
Content-Type:text/html; charset=utf-8
Transfer-Encoding:chunked
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block
Вот блок, который определяет ПСУ для производства:
# Content Security Policy usage:
#
# * http://content-security-policy.com/
# * https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy
#
# Content Security Policy references:
#
# * https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives
#
security.content_security_policy %{
form-action 'self';
frame-ancestors 'self';
base-uri 'self';
default-src 'none';
script-src 'self' 'sha256-IAaN58htbUDxfKhUX+LYHn2kWUEjPKf5lepkdtqd1gU=' https://www.google.com/recaptcha/api.js https://www.gstatic.com https://www.google-analytics.com/analytics.js https://www.google.com/recaptcha/ https://www.gstatic.com/recaptcha/;
connect-src 'self';
img-src 'self' https: data:;
style-src 'self' 'unsafe-inline' https:;
font-src 'self' https://fonts.gstatic.com https://fonts.googleapis.com;
object-src 'none';
plugin-types application/pdf;
child-src 'self';
frame-src 'self' https://www.google.com/recaptcha/;
media-src 'self'
}
Похоже, мне нужно, чтобы добавить разрешение для загрузки скриптов. I'm following Google's own CSP rules.
В чем проблема?
Редактировать: похоже, политика безопасности запрещает мне загружать сценарий 'https://www.google.com/recaptcha/api.js'
, так как на странице отсутствует объект grecaptcha
.
Google использует ',' как разделитель для 'script-src'. Вы используете 'space' – slowjack2k
@ slowjack2k. Похоже, это то, как инфраструктура потребляет хеш политики безопасности. [Взгляните сюда] (https://github.com/hanami/hanami/blob/113eeb41df8e9c5b8d763b2a6e40d68e9ff61885/test/fixtures/security_headers/apps/web/application.rb#L36). –