Archive for the ‘PHP’ Category

ホームページ – 不具合を修正しました

木曜日, 6月 22nd, 2017

少し前から、ホームページの画像が一部表示されない状態になっていましたが、ようやく不具合を修正することができました。
原因は、「.htaccess」ファイルの内容が、画像を表示しないように書き換えられていたことによるものです。
SSL(https)の設定ミスによるものか、外部からの攻撃によるものかは、分かっていません。
インターネットは常にこういったトラブルと隣あわせでいます。放っておくと、ゾンビサーバーにされ、他のサイトへの攻撃の踏み台になることもあります。
サイトを運営している限り、注意を払っていることが必要だと思われます。
設定ミスか、攻撃によるものかは、分かりしだい記載する予定です。
(6/21)

 
 

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

水曜日, 11月 25th, 2015

海外からの不明アクセスが減る (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か何らかのエラーを出すと思います。行儀の悪いアクセスにはこのくらいの返事でいいでしょう。