Railsで特定のサイトだけX-Frame-Optionsを変更してiframeでの表示を許可したい
2017-08-16 | カテゴリ >> Rails

どこの馬の骨かもわからねーサイトのiframe内に埋め込みを許可しないよう、Rails4以降はデフォルトで
X-Frame-Options SAMEORIGIN
がHTTPレスポンスヘッダに追加されるようになっとるらしい

今回ある特定のサイトだけはiframe内にWebアプリを表示させたかったので、そのサイトだけ許可する設定を入れました。

リファラをチェック

とりあえず request.referer でリファラをチェックし対象のサイトからのアクセスかどうか判定。
ちなみにリファラを見るしか術はないのでしょうか・・・(?_?)

X-Frame-Optionsの付与

response.headers[‘X-Frame-Options’] を設定してやれば、デフォルトのSAMEORIGINじゃなくて指定した値になるらしいです。
今回はApplicationController内で

response.headers['X-Frame-Options'] = 'ALLOW-FROM http://example.com'

と書いてみました。

コントローラを特定のものだけに絞ってもいいかもですね。

今回は、特定のリファラを見て動的に制御するべく最終的に以下のようにしてみました。

※ちなみに &. があるので、ruby2.3未満では動きません。
また、 after_action のタイミングじゃないとダメなのかどうか など詳しくは検証していないのでサーセン

class ApplicationController < ActionController::Base
  after_action :add_xframe

  private
    def add_xframe
      if specific_site?
        response.headers['X-Frame-Options'] = 'ALLOW-FROM http://example.com'
      end
    end

    def specific_site?
      return true if request.referer&.start_with?('http://example.com')
    end
end

おわり

 

Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn
2017-08-16 | カテゴリ >> Rails 

関連記事

Comment





Comment



*