指向性メモ::2006-05-11

ページ情報
制作日
2006-05-11T11:53:04+09:00
最終更新日
2006-05-19T09:40:21+09:00

Railsは簡単だが、落とし穴にはまると痛い目を見る

Created:
2006-05-11T11:53:04+09:00

Railsは確かにコードの記述量を減らしてくれるのだが、セキュリティに関する知識まで補完してくれるわけではない。

たとえば、ユーザが入力した情報を元に、usersテーブルに新しいレコードを追加する場合、以下のように書けば簡単だ。

@user = User.new(params[:user])

これは大嘘である。チュートリアルを鵜呑みにしてはいけない。

もし悪意のあるユーザがこの処理を行うアクションを、自作のフォームから呼び出したらどうなるだろうか? 推測可能なテーブルのカラムはすべて設定可能となってしまうだろう。

例えば、現金に交換可能なポイントを格納するpoints int not null default 0というカラムが存在したとする。名前がそのままなので、ユーザでも簡単にカラム名を推測できるだろう。

<input type="text" name="user[points]"/>

このような場合、この1行を正規のフォームに追加するだけで、悪意のあるユーザは何ポイントでも獲得できる。

同様の状況はupdate_attributesメソッドでも発生する。これらのメソッドは、値が信用できるハッシュに対してのみ使用するべきだ。

Railsは確かに簡単ではあるが、ユーザの入力するデータに関しては、従来通り十分な注意を払う必要があるだろう。

Comments
1
Trackbacks
0
PermaLink
http://yudai.arielworks.com/memo/2006/05/11/115304
連絡先、リンク、転載や複製などについては『サイト案内』をご覧ください。Powered by HIMMEL

I ♥ Validator