• ベストアンサー

フォーム認証でのパスワードロック

PHPのセッションを利用して、フォーム認証を実施しています。このさい、ログイン名/パスワードを複数回間違えた場合は、ログインをロックしたいと考えています。こういった場合の具体的、一般的な実装方法を教えてください。ちなみに、ログイン名/パスワードはファイル保存です。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.4

こんにちは。 攻撃者等に対しての対策も考えていたのですね。 そうすると確かにセッションを切り替えられて試行された場合は 規定回数に達することが出来ず(ロックフラグを立てる処理が出来ない) 何回も試行できちゃいますね。 ログイン、パスワード保存ファイルがどのような仕様で格納されてるかわかりませんが ログインID,パスワード,試行回数,ロックフラグ というような1レコードにして ログイン処理一回毎にNGであった場合、試行回数を加算していき指定回数に達したらロックフラグを立てるようにすればセッションも関係なくなります。 2回目とかで認証OKだった場合は、試行回数を0にすることを忘れないで下さいね。 次のログイン時の最大試行回数が減っていっちゃいます。

tomoremo
質問者

補足

非常に丁寧な回答を頂き、大変参考になりました。 どうもありがとうございました。

その他の回答 (5)

  • taskuni
  • ベストアンサー率71% (49/69)
回答No.6

回答と言うより、質問になってしまうかもしれませんが、関連したことで疑問点があるので書かせてください。 このログインをロックするシステムは、第三者からの特定のユーザのログインをロックにするような攻撃が考えられないでしょうか。 まぁ。情報を盗まれるわけではないですし、いたずら程度かもしれませんが。 コミュニティサイトのようなユーザIDを公開するサイトで無ければ、問題は無いでしょうか。

tomoremo
質問者

補足

当然、それはあると思います。 この場合は、ログ等からアクセス元を判断し、アクセス制御する運用になるかと思います。 正規ユーザに対しては、ログインIDの変更等をお願いする形になるかもしれません。 一般的にはどうしているんでしょうか?識者の方々、回答をお願いします。

回答No.5

No3の返信です。 もし1の場合は、ログイン失敗時ユーザIDなど書いてあるファイルとは別ファイルにIPアドレス、ログイン失敗回数を書き込みます。 ログイン認証する前にこのファイルをチェックしてIPアドレスと一致しなければ認証をします。 一致していてログイン失敗回数が3ならロック処理をします。2以下なら認証をし失敗だったらこのファイルに失敗回数を足します。 この場合ネット接続状況によってはIPが固定じゃないので微妙なところではあるんですがね^^;

回答No.3

まず、ロックをかけるということですが ロックをかける条件として 1.ログインを複数回失敗したPCからのログインをロック 2.ログインを複数回失敗したユーザIDをロック どちらでしょうか? とりあえず2の場合と仮定して説明します。 3回ログイン失敗したらロックをかける場合、 (1)ファイル(ユーザID、パスがあるファイル)にログイン失敗回数を追加します(初期値として0を設定)。 (2)ログイン認証する前に失敗回数を見て3ならロック処理(他のページに飛ばすなりエラーメッセージを出す)、 2以下ならユーザIDとパスの認証。 (3)ログイン失敗時にユーザIDの失敗回数を1足します (3)ログイン成功時に失敗回数の初期化(0にする)を行います これで実現可能だと思いますよ。

tomoremo
質問者

補足

回答ありがとうございます。 ちなみに1.の場合はどうなりますでしょうか?

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.2

こんにちは。 スクリプトを全部かくわけにもいかないので大まかな処理手順の一例を 保存ファイルにロックフラグを追加する。 例)UserId,Password,LockFlg ログイン処理(認証をかける)スクリプトでNGだった場合、セッションに間違え回数を記録する。 また、すでにそのIDに対してロックフラグが立っていた場合はエラーメッセージ等を表示 間違え回数を判断し、指定の回数まで達していたらログインIDとパスワードが保存されているファイルのそのログインIDに対するLockFlgにフラグを立てる ロックされてしまった旨を表示 後は別のスクリプトにてロック状態を切り替える管理用ページを作っておけば 簡単にロック解除や強制的にロック等できると思います。

tomoremo
質問者

補足

回答ありがとうございます。 この場合は、間違い回数はセッションごとにカウントしますが、ロックフラグは全セッションで共有するということでしょうか? 例えば、攻撃者がセッションを切り替えながら(webブラウザを立ち上げなおしながら?とか)、ログインを試みた場合は、ロックができないことになるのでしょうか?

  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 指定回数で間違えた場合のログインのロックということですが、 もう一度アクセスしなおせばログインを試行できるようになるのか または、管理者がロックを解除しないと駄目なのかでプログラム内容が変わってきます。

tomoremo
質問者

補足

さっそくの回答ありがとうございます。 ご質問の件ですが、できれば管理者によるロック解除を考えています。

専門家に質問してみよう