WordPress – 海外からのアクセスを遮断する – PHP

海外からの不明アクセスが減る (11/25)

下記の方法で、廃棄リダイレクトを続けていましたが、最初は相変わらずのアクセスがありました。しかし最近はめっきり減り、通常のアクセスになってきました。効果があったものと思います。
それとは別にGoogle等は、ロボット以外でもアナリティス等もアクセスしてきますから、正常なクローラーとして扱う必要があります。今後これを加えてゆく予定です。

ブログにスパム? 海外からアクセス

it-azusaのトップに時々多量のアクセスがあります。ロボットでもなく、通常のアクセスでもないようです。アクセスログを調べていますが、米国だったり、他の国だったり、日本ではないようです。
リファラスパムという可能性もあるようです。リファラスパムというのは、このようにアクセス解析をおこなっているものが、リファラを辿って送信先のページをクリックするのを狙っているようです。最悪の場合はウィルスを拾うことにもなりかねないようです。
いずれにしろ、海外からのアクセスはロボットを除いては必要ないので、これをシャットアウトしようと思います。

前回の「IPアドレスの計算方法」で海外かどうかの判断ができるようになりました。
海外からのアクセスを制限する方法は、.htaccessファイルでおこなう方法や、Googleアナリティクスのフィルタ等がいくつか紹介されています。これらはプログラムの知識なしにできるので便利だと思います。ただ、.htaccessでおこなう方法は前回作成したipアドレスのデータベースが書かれているファイルをダウンロードするらしく、.htaccessファイルが少し重苦しい感じを受けます。処理そのものは多分高速だと思いますが。

PHPコードで記述

ここでは、自作のPHPプログラムでアクセスの制限をしようと思います。
そこで問題になるのは、WordPressのどこにPHPコードを書けばいいかということです。最初の頃はWordPressの仕組みがよく分からないので、ウィジェットにPHPコードを書けるプラグイン「PHP Code Widget」を使用していました。しかしあくまでコンテンツ用のせいなのか、肝心のheader()関数はエラーになり、受け付けてくれませんでした。
その後調べてみると、WordPressには「ショートコード」というPHPコードを呼び出す方法が用意されていることが分かりました。また同時に、テーマの編集で、page.phpやfunction.phpを直接編集するのが普通の方法ということも分かりました。逆にプラグインでPHPコードを書くのは、セキュリティホールになり易いく、避けた方がいいらしいことも。

テーマの編集

トップページなので、テーマの編集でindex.phpを編集します。
index.phpの先頭、

<?php
/**
 * @package WordPress
 * @subpackage My_Theme
 */
get_header(); 
?>

を、

<?php
/**
 * @package WordPress
 * @subpackage My_Theme
 */
include __DIR__ . /**/mycode.php' ;
get_header(); 
?>

に変更する。
mycode.phpに制限コードを記述しておきます。/**/はmycode.phpの相対ディレクトリです。自動インストールのWordPressでは、仮想ディレクトリになるので、少し面倒かもしれません。
投稿記事のページはsingle.phpを同様に編集します。

mycode.phpでは、

if ($ipkaigai){
	$nurl = "http://"  ;
	$ltxt = "Location: " . $nurl;
	header($ltxt,TRUE,301);
	exit;
}

等のコードを書きます。ここでは存在しないURLに永久リダイレクトしています。送信先がブラウザなら、DNSか何らかのエラーを出すと思います。行儀の悪いアクセスにはこのくらいの返事でいいでしょう。

Comments are closed.