ログイン試行過多をチェック

category-icon

 こんばんは。昨日に引き続き。

 ppBlogでは、現状、ログイン試行をチェックする機構は特に採り入れていません。特に、これまで不正ログインを食らったという報告もないようですし。しかしながら、やはり、不正ログインを試みようとする情報は、把握してても良いかなとは思いますので、そういう機能を付けてみました。目指したのは、

  • 3回続けてログインに失敗すると、管理者にメールで知らせる。
  • 6回、同じIPアドレスからログイン試行があって、いずれも失敗すると、そのIPアドレスがアクセス拒否リストに追加される。管理者にもその旨、通知する。

です。基本的には、admin.phpをいじるだけなのですが、IPアドレス毎にアクセス拒否を行う動作を検証中に、現行バージョンではこの機能が動いていないことを見つけました。この影響で、admin.phpに加えて、utils.phpも若干の修正があります。

admin.phpに関しては、331行目からの部分に以下の追記をしました。

  $loginf = OD."login.txt"; // このファイル(ownerディレクトリの中)にログイン失敗情報を記録する
  $ltime = time(); $ldate = date('Y-m-d@H:i:s', $ltime);
  if(is_file($loginf)){
   $loginfo = file($loginf); $lsize = count($loginfo);
   $ips = preg_grep("{.+$ip}", $loginfo); $ips = count($ips);
   if($ips > 5){
    $ban_ini_file = OD.'ban.ini.php';
    include($ban_ini_file); $hit = FALSE;
    foreach ($BAN_LIST as $i => $item){
     if(strpos($item, "$ip|0") || strpos($item, "$ip|1")){
      $BAN_LIST[$i] = "$ltime|$ip|1"; // アクセス拒否対象とする
      $hit = TRUE; break;
     }
    }
    if(!$hit) array_push($BAN_LIST, "$ltime|$ip|1"); // アクセス拒否IPリストに追加
    rewrite_ini($ban_ini_file, $BAN_LIST);
    if(trim(MAILTO) != ''){
     include_once('modules/mail.inc.php');
     $msg  = 'ログイン試行が頻発しているようで、とりあえずブロックしました。IPアドレスは '.$ip.NL;
     $msg .= 'アクセス自体を拒否してます。解除するには、管理画面→「IPコントロール」→「コメント・TB拒否」から。';
     @send_jp_mail('ppBlog::連続ログイン試行', $msg, '', MAILTO);
    }
    exit("ログイン試行過多でブロックされました。");
   }
   if($lsize > 1){
    list($time1,,$ip1) = explode("¥t", trim($loginfo[$lsize - 1]));
    list($time2,,$ip2) = explode("¥t", trim($loginfo[$lsize - 2]));
    if(($ip1 == $ip2 && $ip1 == $ip) && $ltime - $time1 < 30){
     if(trim(MAILTO) != ''){
      include_once('modules/mail.inc.php');
      @send_jp_mail('ppBlog::連続ログイン試行',
       '3回ログインに失敗したかログイン試行が頻発しているようです。IPアドレスは '.$ip.NL, '', MAILTO);
     }
     $loginfo[] = $ltime."¥t$ldate¥t$ip".NL;
     rewrite($loginf, array_unique($loginfo));
     exit("ログイン試行が頻発しているので管理者に知らせました。");
    }
   }
   $loginfo = array_slice($loginfo, 0, 29); // とりあえず30件ほどに
   $loginfo[] = $ltime."¥t$ldate¥t$ip".NL;
   rewrite($loginf, array_unique($loginfo));
  } else rewrite($loginf, $ltime."¥t$ldate¥t$ip".NL);

 ソースにあるように、ログインに失敗した時点で、ownerディレクトリにlogin.txtファイルが自動的に作成されます。最大30件を記録するようにしていますが、分かる方は適宜変えてもよいでしょう。

 ログインに失敗したIPアドレスは記録するようにしています。統べて6回ログインに失敗すると、とりあえずそのIPアドレスをアクセス拒否リストに追加します(404 Not Foundを返す)。これは、管理画面の「IPコントロール」から、その解除が可能です。もし、勘違いか何かで、管理者自身がアクセス拒否を食らう可能性もありますが、この際は、ブラウザから管理画面には入れないので、FTPソフトを使って、ownerディレクトリにあるban.ini.phpをダウンロード、自身のIPアドレスが含まれる行を削除して、再度アップすればOKです。

 普段、不正ログインを試みる対象なんて気にもしませんが、こういう機能が付いていても良いかなと思いました。この機能を実装するには、添付のutils.phpとadmin.phpを既存のやつと入れ替えるだけで良いです。

添付ファイル: utils.phpattachedIcon  admin.phpattachedIcon 

— posted by martin at 07:48 am   commentComment [7]  pingTrackBack [0]

この記事に対するコメント・トラックバック [7件]

scrollUp1. thida Website — 2008/12/05@00:05:45

martinさん、こんばんは。
この機能はすごく助かります;-)
セキュリティの基本はもちろん自己のIDやパスワードの管理に尽きるのですが、ブログの内容によっては不正アクセスをされないとも限りませんからね(**!)
実際に危うく被害に遭いそうだった私としては本当にありがたい機能です。
感謝!

Owner Comment martin Website  2008/12/06@07:47:39

こんばんは。この機能、勿論ここのサイトでも適用してみましたが、ちらほらとアクセスがありますね。IPアドレスを、「ドメイン/IPアドレス【whois情報検索】」
http://www.cman.jp/network/support/ip.htmlLink
みたいなところにかけてみると、ノルウェーのサーバーだったり:o

3. 初心者 Website — 2008/12/06@16:34:35

今朝、更新しました。

さっそく、機能発揮です。
ポーランド?からのアクセスでした。
【77.252.33.106】

これってロボットかと思いますが、
なんのためにadmin.phpを何度も叩くのかなぁf(--;

4. アイリー — 2008/12/07@11:57:05

martin様 みなさまはじめまして。

これからppBlogを利用させていただこうと思っている初心者です。

自分が運営している掲示板では、ロシアからの良俗公序に反する書き込みに辟易しておりまして、いわゆるNGワード阻止機能にて酷いコメントを除外したりしているのですが、ppBlogではそういった機能は存在しているのでしょうか。教えてください。

Owner Comment martin Website  2008/12/10@05:57:48

 こんばんは。ティダさんのコメントにもあるように、NGワード機能やIPアドレスでのコントロールなどもサポートしています。なお、コメント投稿時には、ひらがな入力での認証が必要になるため、ロシアなど海外からの、宣伝目的の投稿はやりにくくなってると思います。

scrollUp6. ティダ Website — 2008/12/07@17:51:20

アイリーさん、はじめまして。
ppblogを利用させていただいているthidaと申します。
ppblogにはそうしたコメントやトークバック拒否の設定はもちろん、ブログ自体へのアクセス拒否も設定できますよ:)
よからぬ相手のIPアドレスさえわかれば、そうした設定ができます。

Owner Comment martin Website  2008/12/10@05:54:23

ティダさん、フォローありがとうございました。

この記事に対する TrackBack URL:

設定によりTB元のページに、こちらの記事への言及(この記事へのリンク)がなければ、TB受付不可となりますのであらかじめご了承下さい。

コメントをどうぞ。 名前(ペンネーム)と画像認証のひらがな4文字は必須で、ウェブサイトURLはオプションです。

ウェブサイト (U):

タグは使えません。http://・・・ は自動的にリンク表示となります

:) :D 8-) ;-) :P :E :o :( (TT) ):T (--) (++!) ?;w) (-o-) (**!) ;v) f(--; :B l_P~

     
T: Y: ALL: Online:
Created in 0.0041 sec.
prev
2024.3
next
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31