15

セキュリティの問題を特定するためにBrakemanを使用しています。params.mergeクロス サイト スクリプティングの脆弱性として使用されるリンクにフラグを立てています。次のようなものをサニタイズするにはどうすればよいですか?

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

1 に答える 1

17

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

あなたが持っているものはFTP、クエリ文字列を変更することでそのリンクに好きなものを追加することを可能にし、セキュリティの脆弱性への扉を開きます. の代わりに使用するハッシュを作成することで、レンダリングしているテンプレートで使用する予想されるクエリ文字列コンポーネントを効果的にホワイトリストに登録できますparamsparams.merge(...


例として、GET次のような URL を期待する場合

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

あなたがするかもしれないあなたのコントローラーアクション

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

そして @cleaned_pa​​rams をlink_to

=  link_to "FTP", @cleaned_params

このように手動でURLを入力すると

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

あなたの見解では、params[:maliciousopt]決してあなたの中にそれを作ることはありません。FTP link_to

リクエストにも同じ動作が適用されPOSTますが、悪意があるだけで、フォームを送信する前にいくつかのフィールドをフォームに追加する可能性があります

<input type="hidden" name="maliciousopt" value="somexss" />
于 2012-09-04T21:00:17.847 に答える