Development Tip

Ruby on Rails 4 앱이 iframe에서 작동하지 않습니다.

yourdevel 2021. 1. 5. 19:43
반응형

Ruby on Rails 4 앱이 iframe에서 작동하지 않습니다.


iframe을 통해 Rails 앱을 다른 웹 사이트에 삽입하려면 어떻게해야합니까?

RoR 3에서는 잘 작동하지만 RoR 4에서는 잘 작동하지 않습니다.

<iframe src="http://myrailsapp.com/" width="100%" height="50" id="rails_iframe">error!</iframe>

내 컨트롤러에서 verify_authenticity_tokenprotect_from_forgery옵션 을 사용하려고했습니다 ... 다른 것 같습니다 (하지만 확실하지 않습니다).

upd. 예 : http://jsfiddle.net/zP329/


이는 기본적으로 추가 보안 프로토콜을 활성화하는 Rails 4와 관련이 있습니다. http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/

원격 사이트에서 iFrame을 중단하는 설정은 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'
}

Rails 4 추가 기본 X-Frame-Options의 HTTP 헤더 값을 SAMEORIGIN. 이것은 보안에 좋지만 에서 호출 되기를 원할 때 다음을 수행 할 수 있습니다.actioniframe


모든 오리진을 허용하려면 :

class MyController < ApplicationController
  def iframe_action
    response.headers.delete "X-Frame-Options"
    render_something
  end
end


특정 출처를 허용하려면 :

class MyController < ApplicationController
  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

다음과 같이 컨트롤러에서 사용하십시오.

class MyController < ApplicationController
  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 : 특정 작업을 iframe으로 삽입


I'm working with Rails 6 and Chromium 76. Previous solution with X-Frame-Options is not working. But I've noticed that it works very well when we attach online iframe with JS. So, I just made this simple solution in my view:

<div id='iframe_wrapper' 'data-iframe-content'='<iframe src="https://host.com/"></iframe>'>
</div>

...and add JS code like this:

$(document).ready(function() {
  var wrapper = $('#iframe_wrapper')[0]
  wrapper.innerHTML = wrapper.attributes['data-iframe-content'].value
})

ReferenceURL : https://stackoverflow.com/questions/16561066/ruby-on-rails-4-app-does-not-work-in-iframe

반응형