SOARISTO工房 Logo

【MT5】PHPによるスパムフィルタ(強化版)続

2011/08/30

 効果テキメンでした。0xF9F8

spam01.jpg

 前回、スパム認定されたIPアドレスを含むサブネット全体を、丸ごと「完全遮断」するという強硬手段に出た訳ですが・・・、

 上記は、ここ1ヶ月半ほどのスパムコメント数の推移です。

 規制を掛ける前は、最大で1日8件、平均で1日4.3件のスパムコメントが付いていましたが、スパム認定されたIPを規制することで、1日平均2.6件にまで落とすことができました。

 さらに、スパム認定されたIPアドレスを含むサブネット全体を規制することで、1日平均0.2件(ここ数日は0件)にまで落とすことができました。

 してやったり、という感じです。

 これだけ効果が大きいものとは、当初は思いも寄りませんでした。しかも、そのほとんどが中国(cn)からのアクセスなので、実効上、なんら問題はありません。

 ついでに、PHPも、さらなる改善を図りました。

 前回のスクリプトを書いている途中に気付いたのですが、IPアドレスを解決する際に、わざわざAPNICのWebサーバに聞きに行かなくても、自分のサーバでwhoisコマンドを実行してその結果を得れば、HTTPプロトコルによるオーバーヘッドを無くせるので、レスポンスの改善を図ることができます。

 ということで、さっそく改良しました。以下、そのソース(一部)です。

 「ip2cidr()」は、IPv4形式のIPアドレス(開始アドレスと終了アドレス)から、ネットアドレスとサブネットマスクを生成する関数で、PHPの電子マニュアルに載っていたもの、そのままです。

 「GetNetMask()」が、今回のポイントとなる関数で、IPアドレスからネットアドレス等の関連情報を取得するものです。

 「exec()」関数でwhoisコマンドを実行し、結果をバッファに入れます。バッファを検索し、「inetnum」という文字列があれば、IPv4形式のIPアドレス(開始アドレスと終了アドレス)を取得します。

 あわせて、「country」という文字列があれば、国籍を取得します。

 なお、IPアドレスによっては、「inetnum」がwhoisサーバのデータベースに載っていない場合があるため、その場合には、例外処理をしています。

Trackback(0)

Trackback URL: http://www.soaristo.jpn.org/mt/mt-tb.cgi/759

Post Comment