2016-08-25 2 views
5

は、私は次のことを持っていると言う:Rails 5 - 浄化されていないリクエストパラメータからURLを生成する方法が安全でないことを誰もが説明できますか?

link_to "Excel", params.merge(format: 'xlsx')

レール5は、非消毒リクエストパラメータからURLを生成しようとすると

を言います!攻撃者は、ホストの変更など、生成されたURLに悪質なデータを挿入する可能性があります。許可されたパラメータをホワイトリストに登録し、サニタイズして安全にします。

私はこれがどのように安全でないのか分かりません。誰でもブラウザに必要なものを入力し、サーバーにGETリクエストを実行することができます。違いは何ですか?

私はそれを回避することができることを知っていますpermit!私が理解しようとしているのは、自分のパラメータを浄化することです。

+0

https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF) – coreyward

+0

@coreyward RailsはPOSTにCSRFトークンを使用していますが、私はGETリクエストを話しています。メッセージは自分のサイトで生成しているURLについて不平を言っています。そのため、CSRFでは、私のサイトに攻撃者のクラフトにURLを提案していますか? –

答えて

7

OWASPとRails itselfの両方のドキュメントを確認してください。

permitを使用すると、あなたのURLヘルパーに渡したくない属性を設定することを禁止することができます。

は、Twitterのポストから来て、あなたのウェブサイトに向け、以下のリンクを、考えてみましょう:

http://example.com/your/action?host=phishingscam.example&path=login 

あなたのコードは次のようになります場合は、あなたが困っている:今

link_to 'View Something', params.merge(format: 'xlsx') 

リンク行く:

http://phishingscam.example/login.xlsx 

攻撃のウェブサイト、phishingscam.example、にコンテンツタイプを設定することができますと入力し、ログインフォームのようなページを表示します。あなたのサイトに一瞬前にいて、あなたのサイトで何かを見るためにクリックしたユーザーは、ログアウトして再びログインする必要があると考えています。これで、攻撃者はユーザーの資格情報を持ち、適切なリンクに戻すことができ、ユーザーは何が起こったのかをまったく意識しません。

これは簡単なシナリオです。物事はかなり素早く巻き返すことができます。詳細はread the Rails security guideをご覧ください。あなたはこのようなものを持っている場合

+0

説明をいただきありがとうございました。私は実際にRailsのセキュリティガイドを読んできました。私が盲目でない限り、これについて言及していません(リダイレクトポイントは似ています)。それ以外に、Kaminari googleの事前更新版について不平を言う少数の人々もここでは近づいていません。 Railsの変更履歴、または私のパラメータをホワイトリストに登録する適切なテクニックを説明するブログ記事が分かっているなら、それを読んでみたいです。 –

+0

@ JPDuffyメッセージがすでに追加されているコミットが見つかりました。 ;) – coreyward

+0

うん。 :)私は助けることができませんが、これを行うためのより良い方法があるはずです。 https://github.com/rails/rails/commit/cacded5a0e0acc0582c2778b9dd8df684451ad53#commitcomment-18783847 –

1

簡単な方法は、

link_to title, params.merge(:sort => column, :direction => direction, :page => nil), {:class => css_class} 

あなたが許可パラメータに含める必要があります。

あなたはこれを使用することができます:

link_to title, params.permit(:direction, :page).merge(:sort => column, :direction => direction, :page => nil), {:class => css_class} 

出来上がりを!

関連する問題