Подтвердить что ты не робот

Как заставить Sinatra воздерживаться от добавления заголовка X-Frame-Options?

Я использую Sinatra для возврата некоторого содержимого IFRAME, и я хотел бы разрешить междоменное src. К сожалению, Sinatra автоматически добавляет заголовок X-Frame-Options к моему ответу. Как отключить это?

4b9b3361

Ответ 1

Sinatra использует Rack:: Protection, в частности параметр frame_options, который является тем, что устанавливает заголовок X-Frame-Options.

Вы можете настроить, какие защиты используются. Sinatra по умолчанию включает большинство из них (некоторые из них включены только в том случае, если вы также используете сеансы, а сама Rack:: Protection по умолчанию не включает некоторые из них).

Чтобы предотвратить отправку заголовка X-Frame-Options, вам необходимо отключить frame_options следующим образом:

set :protection, :except => :frame_options

Ответ 2

Другое решение, и тот, с которым я закончил работу, включает в себя обезглавливание Rack::Protection::FrameOptions:

# This monkeypatch is needed to ensure the X-Frame-Options header is
# never set by rack-protection.
module Rack
  module Protection
    class FrameOptions < Base
      def call(env)
        status, headers, body = @app.call(env)
        [status, headers, body]
      end
    end
  end
end

Ответ 3

Ни один из представленных здесь вариантов не работал для моего приложения sinatra. Я закончил тем, что добавил фильтр after, чтобы изменить заголовок X-Frame-Options, чтобы приложение могло быть обрамлено Facebook.

after do
  headers({ 'X-Frame-Options' => 'ALLOW-FROM apps.facebook.com' })
end

Ответ 4

Ответ "set: protection,: except = > : frame_options" не работал у меня, используя Sinatra-1.3.3

Мне пришлось взломать решение; Я поместил эту мутху в свой файл config.ru. Obvs вы можете изменить заголовок, чтобы быть тем, что вы хотите.

<я > config.ru

class Rack::Protection::FrameOptions
  def header
    @header ||= {}
  end
end

Ответ 5

Я думаю, что нашел хороший способ справиться с этим, но приветствовал бы обратную связь

Цель состоит в том, чтобы отключить X-Frame-Options только для одного маршрута, чтобы сохранить все преимущества защиты стойки:

    app.get'/hello_world' do
      headers({ 'X-Frame-Options' => '' })
      "HELLO WORLD"
    end

Я считаю, что это хороший вариант, поскольку, похоже, он предотвращает добавление заголовка SAMEORIGIN на этом маршруте.

Ответ 6

На самом деле решение, данное @matt, все еще работает с Sinatra v1.4.5.

Да, Sinatra использует Rack:: Protection и согласно Конфигурирование защита от атак

вы можете вообще отключить защиту (что не рекомендуется):

disable :protection

или отключить только frame_options:

set :protection, :except => :frame_options

Кроме того, если ваша проблема не из-за X-Frame-Options, она может быть Access-Control-Allow-Origin, то то, что вам нужно do - добавить строку ниже к вашему маршруту перед оператором return:

response['Access-Control-Allow-Origin'] = 'http://www.example.com/'