• 締切済み

ベーシック認証:5回入力ミスしたら一定時間入れない

htaccessのベーシック認証において総当たり攻撃を防御したいと考えております。 ユーザがログイン画面のIDとパスワードの入力をしますが、 エンターを押す行為を指定回数おこなって、その回数以内に正解のログインID・PWを入力できればログインできて、回数以内に正解を入力できなければ、そのときは一定時間の間、例え正解のID・PWを入力してもログインができなくなる、ということをしたいのですが、htaccessファイルの記述なのかそれ以外の方策なのかわかりませんが、どのようにしたら達成できるでしょうか? 宜しくお願いします。

みんなの回答

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.2

 う~ん。ANo.1の方もおっしゃっているように、そもそもBASIC認証で「3回失敗したら」401が返るというのはWebサーバーじゃなくてブラウザーがやっている事なのでなんとも制御しづらいというところはあろうて。 BASIC認証は、 1.Webブラウザーがhttp://example.com/basic/index.htmlにアクセスする。特別なヘッダーなし。 2.Webサーバーは「401とともに」BASIC認証が使える旨をWebブラウザーに返す。 3.WebブラウザーがBASIC認証に対応していたら、ユーザー名とパスワードを入力する小窓が出てくる。 4.ユーザー名とパスワードを持ってもう一度アクセスする。BASIC認証ヘッダー付。 5.それがOKなら接続許可。NGならもう一度401で2に戻る。 という流れを繰り返しているだけで、3回(4回目の401)で諦めちゃうのはWebブラウザーの方なのだね。Webサーバーは何度来ても認証できなかったら401を返すだけ。 なので、失敗したクライアントを覚えておいて、タイムアウトするまで拒否し続けるというのは、mod_auth_basicにそういう機能をC言語で実装するしか無いんじゃないかな・・・・。その後ろにTomcatやなんやらがあれば、そちら側で制御する方が楽そうだけどね。

touchy
質問者

お礼

お礼遅れて申し訳ありませんでした。 そうですか、C言語、Tomcat・・・。 なにやら奥深いところにいかねばならないのですね・・・ ただ、No1の方がおっしゃっておられるのはCGIやPHPの手法の推挙ですので、それらの言語によって実装するお話だと思います。 その方面ならば多くのWebサイトで実際に実装されている方式なのでできるのはわかっております。 当方はその方式のやり方を再質問しておりました

回答No.1

>htaccessのベーシック認証において >どのようにしたら達成できるでしょうか? ベーシック認証ではそういう機能が存在しません。 ですので「CGIでリモートホストを取得してログに記録し、ログを見て一定時間内の連続アクセスの場合は、別のページにすっ飛ばす」と言う、CGIスクリプトを書かないと実装できません。 ここのQ&Aページも、回答の際、過去の回答と比較して、同じ回答は繰り返せないようにしています。

touchy
質問者

お礼

ありがとうございます。CGIスクリプトでできるのですね。 htaccess内に記述できなくてもそれには固執いたしませんので、そのようなCGIまたはPHPスクリプトはどうつくればできるでしょうか。 またはどこかのサイトに紹介されてあれば教えていただけましたら幸いです。

touchy
質問者

補足

なかなか検索しても出てこないのですが、「できない」なんてページなら見つかる始末で・・・ そんなことないのでしょうが・・・ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1250449622

関連するQ&A