PHP / Apache で取得できる「アクセスの痕跡」まとめ
WEBサーバーにアクセスがあると、サーバー側では $_SERVER などから
さまざまな情報を取得できます。
ここでは「何が取れるのか」「どこまで信用できるのか」を、実用目線でまとめます。
| 情報 | 取得例(PHP) | 何がわかる? | 信頼性 |
|---|---|---|---|
| アクセス元IP | $_SERVER['REMOTE_ADDR'] |
アクセスしてきた端末(または出口)のIP | 高(ただしCDN/プロキシ注意) |
| アクセス先URL | $_SERVER['REQUEST_URI'] |
どのパスを狙ったか(攻撃パターンが出る) | 高 |
| HTTPメソッド | $_SERVER['REQUEST_METHOD'] |
GET/POST/HEAD 等。Botや攻撃の特徴が出る | 高 |
| User-Agent | $_SERVER['HTTP_USER_AGENT'] |
ブラウザ/OS/クローラ名 | 中(偽装できる) |
| Referer | $_SERVER['HTTP_REFERER'] |
どこから来たか(検索/リンク元) | 低〜中(空が多い) |
| Host | $_SERVER['HTTP_HOST'] |
アクセスされたドメイン | 中(Host攻撃に注意) |
| Accept-Language | $_SERVER['HTTP_ACCEPT_LANGUAGE'] |
端末の言語設定(国推定の補助) | 中(偽装できる) |
| Accept | $_SERVER['HTTP_ACCEPT'] |
欲しいコンテンツ形式(HTML/JSONなど) | 中 |
| 接続方式 | $_SERVER['HTTPS'] |
httpsかどうか | 高 |
| 接続ポート | $_SERVER['SERVER_PORT'] |
80/443など | 高 |
| リモートポート | $_SERVER['REMOTE_PORT'] |
相手側のポート(基本ランダム) | 中(参考程度) |
| アクセス時刻 | time() |
いつ来たか(ログの基本) | 高 |
サーバーが「接続してきた相手」として認識するIPです。
ログの基点になる最重要情報です。
X-Forwarded-For や CF-Connecting-IP が必要になります(※設定次第)
アクセスされたパス+クエリです。
攻撃者の意図が一番出るのがここです。
/wp-login.php → WordPress狙い/.env → 環境変数ファイル狙い/phpMyAdmin/ → DB管理画面狙い?id=1 OR 1=1 → SQLインジェクション
GET が普通ですが、攻撃やスキャンでは POST や HEAD が増えます。
404監視(ハニーポッド)では特に重要です。
ブラウザやBotの名乗りです。偽装できます。
ただし偽装しても「癖」は出るので、判定材料としては超強いです。
どこから来たかの情報です。
ただし「空」のケースが多いので、これだけで判断しない方が安全です。
リクエストされたドメイン名です。
これは普通は自サイトのドメインですが、攻撃では変なHostが来ることがあります。
端末の言語設定です。
GeoIPが微妙な時の「補助材料」になります。
ja-JP,ja;q=0.9,en-US;q=0.8あなたの404監視(Watch404)用途なら、最低でも以下を保存しておくと後で困りません。
WEBアクセスで取得できる情報は「犯人特定」ではなく、
アクセスの特徴を掴むための材料です。
特に REQUEST_URI と User-Agent は、攻撃やBotの傾向を知るのに強力です。