ログイン画面のセキュリティを考える(CakePHP修行 #020)
July 3, 2007 1:47 AM written by Gen Taguchi
さてさてログインフォームの改善を続けます。
次はセキュリティ関連。気になる点は以下の二つ。
- ログイン画面ってわけではないですが、パスワードを平文で保存しているのが不安。ハッシュ化したいところ。
- 不正な入力値がないようになにか対策をすべきかどうか?するならどうする?
■ パスワードのハッシュ化
まずDBにパスワードをそのまま突っ込んでいるのが不安です。これはハッシュ化すべきでしょう。そこでDBのpwdフィールドには「任意のキーワード+パスワード」をsha1でハッシュ化したものを突っ込むことにします。任意のキーワードを足すのはセキュリティを高めるためです。
ちなみに今までmd5を使っていたのですが、青い人によると「選べるならsha1の方が良い。md5はぜい弱性が発見されたから」とのことでした。
まずは任意のキーワードを設定します。こういう共通定数っぽいものは/app/config/app.phpに記述してAppControllerで読み込んじゃうのがよさそう。
参考にしたのはこちら(← これも青い人に教えてもらった)。
» CakePHP アプリケーションの設定情報をまとめる | Shin x blog
そのとおりにやってみます。
/app/config/app.phpは以下のとおり。
<?php
define('PWD_KEY', 'abcde');
次に /app/app_controller.php に次の一行を追加。
config ('app');
これでPWD_KEYへアクセスできるはずです。
そしてログインの認証処理を変更します。ちなみに変更前はこんな感じ。
if(!empty($someone['User']['pwd']) && $someone['User']['pwd'] == $this->data['User']['pwd'])
これを以下のように変更。
if(!empty($someone['User']['pwd']) && $someone['User']['pwd'] == sha1(PWD_KEY.$this->data['User']['pwd']))
なお、データベースに突っ込んだデータは平文だったので、別途sha1でPWD_KEYとパスワードを連結したものをDBにいれておきます。
それでもってテスト・・・うまくいきました!これで一安心ですね。ちなみに現在のDBのpwdフィールドはこんな感じ。
mysql> select id,pwd from users; +----+------------------------------------------+ | id | pwd | +----+------------------------------------------+ | 1 | e1ad1bc1b9e6cf491a54db3b2291bb85a811012d | | 2 | 9652fda44b24564558bef08a873c2d4f922fe168 | +----+------------------------------------------+ 2 rows in set (0.01 sec)
これなら万が一DBを覗かれても安心ですね(100%じゃないけど)。
■ 不正な入力値を防ぐ
いわゆるインジェクション系の穴を防ぐために何ができるかですが・・・考えに考え抜いて・・・・青い人にチャットで聞くことにしました(← そろそろうざがられているのではないかと心配です)。
そうしたら以下のサイトを教えてくれました。
» CakePHP 比較演算子インジェクションに注意 | Shin x blog
つまるところ、現在のログイン処理ではfindByEmailが使われているからOKっぽいということでした。というわけでこれについては今のところ大丈夫、と。
さてさて、セキュリティチェックも終わったし、次はいよいよちょっと複雑なロジック(でもないか)を書いていきます。
※ CakePHP修業は百式管理人がSNSっぽいものをCakePHPで作ろうとして挫折するまでの日記です。前回までのあらすじはこちらへ。
Info: CakePHP修行! |
固定リンク |
コメント (2) |
トラックバック (0) |
↑


