복붙노트

[RUBY-ON-RAILS] 루비 레일에 4 응용 프로그램이있는 iframe하지 작업을 수행

RUBY-ON-RAILS

루비 레일에 4 응용 프로그램이있는 iframe하지 작업을 수행

어떻게 iframe을 통해 다른 웹 사이트에 내 레일 응용 프로그램을 포함 할 수 있습니다?

그것은하지만 RoR에 4, RoR에 3 잘 작동 :

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

나는 ... 내 컨트롤러에 verify_authenticity_token 및 protect_from_forgery 옵션을 사용하려고 다른 그것의 무언가를 보인다 (그러나 나는 확실하지 않다).

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

해결법

  1. ==============================

    1.이것은 기본적으로 추가 보안 프로토콜을 활성화 레일 4과 관련이있다 : http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/

    이것은 기본적으로 추가 보안 프로토콜을 활성화 레일 4과 관련이있다 : http://weblog.rubyonrails.org/2013/2/25/Rails-4-0-beta1/

    설정 원격 사이트에 휴식의 iFrame을은 X-프레임 - 옵션입니다. 기본적으로이되는로드 크로스 도메인에서 콘텐츠를 방지 SAMEORIGIN로 설정 :

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

    현재 새 기본 헤더에 대해 읽을 수 있습니다 : http://edgeguides.rubyonrails.org/security.html#default-headers

    iframe이 크로스 도메인을 작업 할 수 있도록하기 위해, 당신은 도메인에서 X-프레임을 허용하도록 기본 헤더를 변경할 수 있습니다.

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

    2.4 SAMEORIGIN의 기본 X-프레임 - 옵션 HTTP 헤더 값을 추가 레일. 이 보안을 위해 좋다, 그러나 당신이 당신의 작업은 iframe에 호출하고자 할 때, 당신은이 작업을 수행 할 수 있습니다 :

    4 SAMEORIGIN의 기본 X-프레임 - 옵션 HTTP 헤더 값을 추가 레일. 이 보안을 위해 좋다, 그러나 당신이 당신의 작업은 iframe에 호출하고자 할 때, 당신은이 작업을 수행 할 수 있습니다 :

    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 : 당신은 iframe에 액션 중 하나 이상 사용해야 할 때, 방법을 확인하고 그것을 호출하는 좋은 아이디어이다 :

    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
    

    비아 : 4 레일 : 특정 조치가 iframe으로 삽입 될 수 있도록

  3. ==============================

    3.나는 작동하지 않는 X-프레임-옵션과 레일 (6)과 크롬 (76) 이전 솔루션과 함께 일하고 있어요. 그러나 나는 우리가 JS 온라인은 iframe을 첨부 할 때 아주 잘 작동 것으로 나타났습니다. 그래서, 난 그냥 내보기에이 간단한 솔루션을 만든 :

    나는 작동하지 않는 X-프레임-옵션과 레일 (6)과 크롬 (76) 이전 솔루션과 함께 일하고 있어요. 그러나 나는 우리가 JS 온라인은 iframe을 첨부 할 때 아주 잘 작동 것으로 나타났습니다. 그래서, 난 그냥 내보기에이 간단한 솔루션을 만든 :

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

    ...이 같은 JS 코드를 추가 :

    $(document).ready(function() {
      var wrapper = $('#iframe_wrapper')[0]
      wrapper.innerHTML = wrapper.attributes['data-iframe-content'].value
    })
    
  4. from https://stackoverflow.com/questions/16561066/ruby-on-rails-4-app-does-not-work-in-iframe by cc-by-sa and MIT license