PHPセキュリティ対策:プロキシ経由かどうか調べる

(1/1)
掲示板の荒らし対策として、プロキシサーバ経由の書き込みを禁止することがよくおこなわれる。
そこで今回は、プロキシ経由のアクセスかどうかを調べるプログラムを作ってみることにする。

(2022年6月27日)FastCGIで正常動作しない不具合を修正
(2022年5月23日)大幅改訂,PHP8対応

目次

サンプル・プログラムの実行例

PHPセキュリティ対策:プロキシ経由かどうか調べる

サンプル・プログラム

圧縮ファイルの内容
isproxy.phpサンプル・プログラム本体。
pahooInputData.phpデータ入力に関わる関数群。
使い方は「PHPでGET/POSTでフォームから値を受け取る」「数値入力とバリデーション」「文字入力とバリデーション」などを参照。include_path が通ったディレクトリに配置すること。

サンプル・プログラムの解説

プロキシサーバを経由すると、HTTP変数に特有の値が書き込まれる。
HTTP_VIA
プロキシ名称、バージョンなど。
HTTP_CLIENT_IP
要求元IPアドレス。ただし偽装されていることがある。
HTTP_X_FORWARDED_FOR
要求元IPアドレス。ただし偽装されていることがある。
そこで、これらの値が配列 [$_SERVER] に存在していたら、プロキシ経由と判断する。

 103: /**
 104:  * プロキシ経由かどうか調べる
 105:  * @return  bool TRUE:プロキシ経由である
 106: */
 107: function isproxy() {
 108:     return (isset($_SERVER['HTTP_VIA']) || isset($_SERVER['CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']));
 109: }

参考サイト

(この項おわり)
header