【PHP】Torを利用しているか判定するプログラム
作成日時 2023/08/28 18:17
最終更新 2023/08/28 18:36
最終更新 2023/08/28 18:36
まず初めに
DNSを用いた判定法
公開されているIPアドレスを.htaccessで拒否する方法
まとめ
Torは、高い匿名性を保ってインターネット(正確にはTCP/IP空間)を利用できるとても優秀なソフトウェアですが、一方でその匿名性を悪用したサイバー攻撃や荒らしなども多くみられます。
本記事では、PHPでユーザーがTorを利用しているか判定するプログラムを二通りご紹介させて頂きます。
DNSを用いた判定法
ユーザーの出口ノードのIPアドレスがIPv4である場合、以下のようなコードでTorを経由しているか判定できます。
ただし、Torの出口ノードの後に更にVPNを経由している場合には判定できないことに注意して下さい。
<php
// Torを経由しているか判定する関数(by ActiveTK.)
function IsTor( string $ip ) : bool {
return (
gethostbyname( ReverseIPOctets( $ip ) . ".dnsel.torproject.org" ) == "127.0.0.2"
);
}
// IPv4アドレスの順番を逆にする関数
function ReverseIPOctets( string $inputip ) : string {
$ipoc = explode(".", $inputip);
return $ipoc[3] . "." . $ipoc[2] . "." . $ipoc[1] . "." . $ipoc[0];
}
if( IsTor( $_SERVER['REMOTE_ADDR'] ) )
die( "当サイトでは、荒らし防止のためTorを経由したアクセスを禁止しております。" );
else
die( "当サイトでは、警察に摘発されるリスクを減らすため、Torを経由していないアクセスを禁止しております。" );
公開されているIPアドレスを.htaccessで拒否する方法
Apacheを利用しておりAllowOverride権限が与えられている場合には、.htaccessを用いてTorの出口ノードのIPアドレスを全て拒否することもできます。
Torの出口ノードのIPアドレス一覧は、こちらで公開されているので、これを全てdenyします。
# Torを拒否する設定
order allow,deny
allow from all
deny from 176.10.99.200
deny from 54.37.16.241
(省略)
deny from 72.167.47.69
# 最後に改行を入れる(.htaccessのルール)
まとめ
本記事では、PHPでユーザーがTorを利用しているか判定し、アクセス拒否する方法を解説させて頂きました。
ただし、Torを自らのプライバシーのために合法的に利用しているユーザーも存在しますので、全て強制的に拒否するのは良くないのかもしれません。