2012年4月9日

Yii Framework: ログインの試行回数を制限する

セキュリティを考えるとログインの試行回数は制限したほうがいいように思います。Twitter ではログインを数回失敗するとスパム対策のためキャプチャの入力を強制するようになっていたり、また、はてななどはログインを数回失敗すると、一定期間ログインできないようになっています。

今回はそういったものを Yii で作ってみます。キャプチャは難しそうなので、まずは数回ログインを失敗すると、一定期間ログインできないような機能を追加してみます。

全体的な流れ

  1. login_attempt テーブルを作成
  2. LoginAttempt モデルを作成
  3. LoginController.php に試行回数の制限を実施するコードを追加
  4. login.php ビューの切り替え

1. login_attempt テーブルを作成

`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(32) NOT NULL,
`login` varchar(32) NOT NULL,
`create_time` int(11) NOT NULL,
`expiration_time` int(11) NOT NULL,

 login カラムは、フォームから入力されたログイン情報が挿入されます。expiration_time は有効期限です。基本的に一定の短い期間に連続してログインに失敗したものを、IPアドレスの判定でログインできないようにする、という形をとります。

2. LoginAttempt モデルを作成

3. LoginController.php に試行回数の制限を実施するコードを追加

禁止されている IP かを見て、禁止されていなければログインのフォームを入力できるようになっています (未入力の場合は、カウントしない) 。$isBanned には true (禁止されているIP) もしくは false (禁止されていないIP) の値が入っていて、それをビューに渡して、表示の切り替えも行います。ビューは以下。

4. login.php ビューの切り替え 

上記の流れでは、禁止された IP アドレスでも、有効期限が切れればテーブルから削除され、ログインできるようになっていますが、禁止されるまでにはいたっていないデータはテーブルに溜まってしまいます。そういうものに対しては一定期間が過ぎれば削除するコマンドを作って、cron で定期的に実行すれば良いのかな?と今のところ考えています。

参考リンク

0 件のコメント:

コメントを投稿