2012-09-04 7 views
13

params.mergeをクロスサイトスクリプティングの脆弱性として使用しているすべてのリンクにはフラグが立てられています。どのように私は次のようなものを浄化することができますか?params.mergeとクロスサイトスクリプティング

- @archives.each do |archive| 
    = link_to "FTP", params.merge(:action => :ftp, :archive => archive, :recipient => "company") 

答えて

15

あなたが期待するとFTPリンクの一部になると、あなたの追加パラメータをマージすることを使用できるようにしたいparamsの要素のみに基づいて新しいハッシュを作成する必要があります。

は何を持っていることは、私は、クエリ文字列を修正するセキュリティ上の脆弱性への扉を開くことにより、そのFTPリンクに私が欲しいものは何でも追加することができます。 params.merge(...paramsの代わりに使用するハッシュを構築することによって、あなたは効果的にあなたがレンダリングしているテンプレートで使用するために期待されるクエリ文字列コンポーネントをホワイトリストしています。


あなたは

/some/path?opt1=val1&opt2=val2 

お使いのコントローラのアクションのようなURLを期待していた場合GET例として、あなたは

@cleaned_params = { opt1: params[:opt1], opt2: params[:opt2] } 
@cleaned_params.merge! action: :ftp, archive: archive, recipient: :company 

を行う可能性があります。そしてlink_to

= link_to "FTP", @cleaned_params 
に@cleaned_pa​​ramsを渡します

私は

/some/path?opt1=val1&opt2=val2&maliciousopt=somexss 

params[:maliciousopt]はあなたのビューでFTPlink_toにそれを作ることは決してありませんようにURLを手動で入力する場合はこの方法です。

同じ動作が...あなたは私の例を与えることができる唯一の私はそれ

<input type="hidden" name="maliciousopt" value="somexss" /> 
+0

感謝を送信する前にフォームにカップルのフィールドを追加する可能性がある悪質なことを、POSTの要求に適用されますか?私は本当にそれを取得しません。 – snowangel

+0

あなたのために私の答えを更新しました。 – deefour

+0

完全に負債です - ありがとうございます。 – snowangel