1

私の Rails 2 アプリケーションで、ルーティングにセキュリティ バグが見つかりました。Rails 2.3.8 を使用しています。これが私の実装です:

# routes.rb
map.connect 'sampleview', :controller => 'sample', :action => 'view'

ある条件では、私の URL はhttp://example.com/sampleview?view_url=http://test.com?s=2&code=15のようになります

この場合、test.com に移動し (この test.com は、アプリで表示した別のドメインです)、ページは iframe タグに配置されています。

問題は、私がURLをフレーム化した場合です:

http://example.com/sampleview?view_url=http://www.google.com

Google のランディング ページは、アプリケーションの iframe タグに配置されました。これは良くない。

URL http://example.com/sampleview?view_url=http://www.google.comに test.com 以外が含まれている場合。ユーザーにメッセージを送信する必要があります。これは有効な URL ではありません。

これまたは他のソリューションをサポートするために、routes.rb をどのように変更できますか。助けてください。

4

1 に答える 1

3

ルート上の制約オプションが存在しないため、Rails3.2でこれを実行できるかどうかはわかりません。これをコントローラーに実装し、最終的には。を使用することをお勧めしますbefore_filterApplicationController異なるコントローラー間で共有する必要がある場合は、に配置できます。

更新:例を追加

class ApplicationController
  before_filter :check_view_url

  private

  def check_view_url
    if params[:view_url] && params[:view_url] !~ %r{^http://test.com}
      raise "Trying to access invalid website"
    end
  end

end
于 2012-12-14T08:44:20.410 に答える