操作
Code Review #965
完了Mass assignment security vulnerability
開始日:
2012/03/13
期日:
進捗率:
70%
予定工数:
説明
私の元のコードが悪いのですが、Mass assignment脆弱性があります。
@issue_template.attributes = params[:issue_template]
で値を設定すると、HTTPリクエストのパラメータにproject_idやauthor_idを勝手に追加して意図しないフィールドの値を書き換えられてしまいます。
修正方法としては、モデル側でRedmine::SafeAttributesをインクルードして書き換えてもよいフィールドを定義し、コントローラ側でattributes = の代わりにsafe_attributes =で値を設定すればよいと思います。以下の修正を参考にして下さい。
http://www.redmine.org/projects/redmine/repository/revisions/9140
Akiko Takano さんが約12年前に更新
- ステータス を 新規(New) から 担当(Assigned) に変更
- 優先度 を 通常(Normal) から 高め(High) に変更
ありがとうございます。
なるほど、全部書き換えできてしまうんですね。#なによりもお恥ずかしい...。
そして、ポイントも大変助かりました、ありがとうございます!
パラメータinjection(?)に対してもテストコードを書いたりするのがやはり定石なんでしょうか。
Akiko Takano さんが約12年前に更新
- ステータス を 担当(Assigned) から 解決(Resolved) に変更
- 進捗率 を 0 から 70 に変更
対応前の動作確認で、確かに値の変更ができてしまいましたので、commite: 05b4de5ba1b で対応してみました。
safe_attributeに変更しただけですが...。
issue_template_settingsも同様の修正をしています。
一応テストコードで、ProjectIDとAuthorIDをパラメータで渡しても上書きされないことは確認してみました。
操作