У меня есть приложение, у которого есть страница, которая должна отображаться в фрейме другого приложения.Тем не менее, он в настоящее время имеет настройку X-Frame-Options = sameorigin
, чтобы избежать перехвата кликов, но также предотвращает отображение в фреймах в другом приложении.Изменение с sameorigin
на allow-from
не решает мою проблему, поскольку Chrome и Safari не поддерживают этот параметр и выпускают для просмотра в фреймах для любого домена, поскольку я хочу выпустить только в конкретный домен, чтобы уменьшить вероятность клик-джеккинга.
Когда я исследовал проблему, я обнаружил, что Chrome и Safari используют CSP (Content Security Policy), которая имеет параметр frame-ancestors
, который можно использовать для решения моей проблемы.
ОднакоЯ не могу сделать так, чтобы Padrino / Sinatra вставил этот параметр в заголовок ответа.
Вот как был установлен мой config/apps.rb
:
Padrino.configure_apps do
set :session_secret, '<some session secret>'
set :protection, :except => :path_traversal
set :protect_from_csrf, true
end
Вот код, который пытался решитьмоя проблема с CSP:
Padrino.configure_apps do
set :session_secret, '<some session secret>'
set :protection, {:use => [:content_security_policy], :except => [:path_traversal, :frame_options], :frame_ancestors => "self <domain that will open my page in an iframe>"}
set :protect_from_csrf, true
end
Заголовки ответа в Chrome:
HTTP/1.1 200 OK
Server: nginx/1.15.6
Date: Mon, 26 Nov 2018 19:52:42 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 18327
Connection: keep-alive
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
проблема в том, что CSP не добавляется в заголовок.:except
правильно отключает настройки, которые включены по умолчанию, но :use
не включает настройки, которые отключены по умолчанию.Я следую за этим модулем для справки.Я могу только думать, что я использую это неправильно, но я не понимаю, как это следует использовать вместо этого.
CSP rack :: protection для справки.