セキュリティの問題を特定するためにBrakemanを使用しています。params.merge
クロス サイト スクリプティングの脆弱性として使用されるリンクにフラグを立てています。次のようなものをサニタイズするにはどうすればよいですか?
- @archives.each do |archive|
= link_to "FTP", params.merge(:action => :ftp, :archive => archive, :recipient => "company")
セキュリティの問題を特定するためにBrakemanを使用しています。params.merge
クロス サイト スクリプティングの脆弱性として使用されるリンクにフラグを立てています。次のようなものをサニタイズするにはどうすればよいですか?
- @archives.each do |archive|
= link_to "FTP", params.merge(:action => :ftp, :archive => archive, :recipient => "company")
リンクparams
の一部になることを期待し、許可したい要素のみに基づいて新しいハッシュを作成し、それを使用して追加のパラメーターをマージする必要があります。FTP
あなたが持っているものはFTP
、クエリ文字列を変更することでそのリンクに好きなものを追加することを可能にし、セキュリティの脆弱性への扉を開きます. の代わりに使用するハッシュを作成することで、レンダリングしているテンプレートで使用する予想されるクエリ文字列コンポーネントを効果的にホワイトリストに登録できますparams
。params.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_params を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" />