Как настроить Синатру, чтобы поставить CSP в заголовок ответа - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть приложение, у которого есть страница, которая должна отображаться в фрейме другого приложения.Тем не менее, он в настоящее время имеет настройку 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 для справки.

...