IPアドレスでコメントブロック

中国からの政治的な中傷コメントがたびたび見かけられるので、ちょっと対策。中国のホストの大半が逆引きできない(IPアドレスからホスト名の名前解決ができない)のを利用して、逆引きできないIPアドレスからはコメントできないようにしました。

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
if( !$host || preg_match('/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/', $host) === 1 ){
  /* エラー処理 */
}

コメントが送信されたとき、環境変数 REMOTE_ADDR に格納されたアクセス元のIPアドレス(xxx.xxx.xxx.xxxの形式)をgethostbyaddrして、戻り値がIPアドレスのままだったら(ホスト名の解決に失敗したら)エラー処理に移行。

かの国にも熱心なファンはいるわけで、一部の狂信的愛国者のために特定地域まるっとシャットアウトするような対策を取らないといけないのは非常に心苦しいのです、が、現状致し方ない。

<2011/1/29 17:51追記>正規表現が間違ってたのを修正しました。

関連(してるかもしれない)記事たち

コメント処理を軽く
コメントの投稿処理(投稿ボタンをクリックしてから画面が更新されるまでの処理時間)を軽くしてみました。 右側の「COMME...
WordPressへCSV形式で記事を移行
4年ぶり?にサイトリニューアルしました。PHPによる独自システムからWordPressベースに変更。デザインそのものはほ...
wptouch-mobile
アップデートに負けないWPtouchカスタマイズ
カスタマイズした内容がアップデート適用で消える WPtouch Moblie Plugin(以下WPtouch) は自分...

「IPアドレスでコメントブロック」への3件のフィードバック

  1. You could improve the regex by specifying the number of possible digits in each octet. "/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/"

    Your regex would only match one digit per octet, 1.1.1.1, but would not match 22.22.22.22 as an example.

  2. >>1 Alexiaさん
    にゃっ!Exactly(そのとおりでございます)。d(任意の10進数字1文字、[0-9])単独でd+(任意の数の10進数字)してるような勘違いをしてた。

コメントは停止中です。