5

私は、ブレーキマンジェムを使用して、セキュリティの脆弱性についてRailsアプリを調査し始めました。

いくつかのクロスサイトスクリプティングの警告を除いて、すべてを整頓することができました。

これらはすべて、次の共通点を共有しています。

  • それらはすべてlink_toタグです
  • それらはすべて、クラス、alt、またはtitle属性にインスタンス変数を持っています
  • インスタンス変数はすべて、関連するモデルを含むアクティブなレコードクエリを表します
  • インスタンス変数はすべて「コメント可能」です。これは、このRailscastの改訂版と同様のアプローチで、ユーザーが生成したコメントの多形的な関連付けについて説明しています。

例えば

<%= link_to "Click" , :class=> @model.association.attribute, :alt=> @model.association.attribute, :title=> @model.association.attribute, @model.association %>

どこ

@model = @commentable = Model.includes(:association1, association2: {:nested-association1, :nested-association2}).find(params[:id])

これは私が心配する必要がある/行動を起こす必要があるものですか?Rails3.2はデフォルトでこれらをエスケープしていると思いました。

この問題をよりよく理解し、もしあれば、どのような手順を踏むべきかを特定するのに役立つアドバイスを歓迎します。

4

1 に答える 1

4

ご提供いただいたコードから警告を再現することができませんでした。どのバージョンのBrakemanを使用していますか?実際の警告は何でしたか(必要に応じて編集されました)?

リンクのhref値でユーザー入力が検出されているため、警告が表示されていると思われます。これが危険である理由の詳細については、このプルリクエストを参照してください。

残念ながら、これ以上の情報がなければ、これが修正が必要な誤検知なのか、それとも正当な警告なのかわかりません。

編集

さて、これでテストすると警告が表示されます。@model = @commentable = ...これは、Brakemanが割り当てを処理する方法に問題があります。

モデルのインスタンスにリンクしている場合、警告は表示されません。モデル属性にリンクしている場合、これはユーザー入力としてカウントされます。

はい、RailsはHTMLをエスケープしますが、XSSで始まるリンクjavascript:やXSSdata:使用できるリンクは処理しません。

于 2012-07-03T22:54:29.287 に答える