Вопрос по iframe, ruby-on-rails, ruby-on-rails-4, ruby-on-rails-3 – Приложение Ruby on rails 4 не работает в iframe

55

Как я могу встроить свое приложение rails на другой сайт через iframe?

Он хорошо работает с RoR 3, но не с RoR 4:

error!

Я пытался использоватьverify_authenticity_token а такжеprotect_from_forgery опции в моем контроллере ... кажетсячто-то еще (но яя не уверен)

UPD. Пример:http://jsfiddle.net/zP329/

Для меня коллега загружал мое приложение в свой личный IFrame.HTML-страница, которая загружала несколько его ежедневных сайтов и инструментов. jcypret»ответ был то, что мне было нужно Matthew Clark
Почему фрейм? Определенно нет лучшего варианта, например использовать встроенный виджет JS для доступа к данным вашего сайта через AJAX? Matt Gibson

Ваш Ответ

2   ответа
100

что в Rails 4 включены дополнительные протоколы безопасности по умолчанию:http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/

Параметр, который ломает iFrames на удаленных сайтах, является X-Frame-Options. По умолчанию это установлено в SAMEORIGIN, что предотвращает загрузку контента между доменами:

config.action_dispatch.default_headers = {
    'X-Frame-Options' => 'SAMEORIGIN'
}

Вы можете прочитать о новых заголовках по умолчанию здесь:http://edgeguides.rubyonrails.org/security.html#default-headers

Чтобы разрешить iFrame работать между доменами, вы можете изменить заголовки по умолчанию, чтобы разрешить X-Frame для всего домена.

config.action_dispatch.default_headers = {
    'X-Frame-Options' => 'ALLOWALL'
}
После изменения конфигурации ваш браузер все еще может кэшировать старые заголовки. Вы можете убедиться в этом, открыв свой iframe в Инкогнито / Личное окно. " georgelx
Это все еще в силе?ipsec.pl/web-application-security/2013/... Ernest
Я должен также упомянуть, что chrome будет кэшировать старое значение, поэтому вам нужно отключить chrome кеш при разработке. JZ.
ПОЗВОЛЯТЬ ВСЕ" не указан в качестве опции для X-Frame-Options:developer.mozilla.org/en-US/docs/HTTP/X-Frame-Options , Isn»Можно ли удалить заголовок? Cristian
Использование пустой строки вместо ALLOWALL работает в Chromium и Firefox. Fabrizio Regini
47

Rails 4 добавленной по умолчаниюX-Frame-Options Значение HTTP-заголовкаSAMEORIGIN, Это хорошо для безопасности, но когда выделать хочу твойaction быть вызванным вiframe, вы можете сделать это:

Разрешить все происхождение:
  def iframe_action
    response.headers.delete "X-Frame-Options"
    render_something
  end
end



Разрешить конкретное происхождение:

  def iframe_action
    response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://some-origin.com"
    render_something
  end
end



Использование: after_filter

Когда вам нужно использовать более одногоaction вiframe, Это'Хорошая идея сделать метод и вызвать его с помощью::after_filter

class ApplicationController < ActionController::Base

  private
  def allow_iframe
    response.headers.delete "X-Frame-Options"
  end
end

Используйте его в своих контроллерах, как это:


  after_filter :allow_iframe, only: [:basic_embed, :awesome_embed]

  def basic_embed
      render_something
  end

  def awesome_embed
      render_something
  end

  # Other Actions...
end

С помощью:Rails 4: пусть конкретные действия будут встроены в iframes

Похожие вопросы