Laravel(PHP)
Laravel ミドルウェアは、アプリケーションに入ってくる HTTP リクエストを検証およびフィルタリングするための便利な仕組みを提供します。ProxyTracer をグローバルまたはルート固有のミドルウェアとして追加することで、コントローラーや API リソースをプロキシの不正利用から保護できます。
ミドルウェアの実装
このミドルウェアは Laravel の信頼できるプロキシ対応 request()->ip() を使用してクライアント IP を読み取り、Laravel 組み込みの Http クライアント経由で ProxyTracer エンドポイントをクエリして、プロキシが検出された場合にリクエストライフサイクルを早期終了します。
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;
class ProxyTracerMiddleware
{
/**
* Handle an incoming request.
*/
public function handle(Request $request, Closure $next): Response
{
// 1. IPを抽出 (Laravelはリバースプロキシを自動的に安全に処理します)
$ip = $request->ip();
// ローカル開発環境のIPをスキップ
if (!in_array($ip, ['127.0.0.1', '::1'])) {
try {
// 2. 厳格な500msのタイムアウトを設定してProxyTracer APIにクエリを実行
$response = Http::withToken(env('PROXYTRACER_API_KEY'))
->timeout(0.5)
->get("https://api.proxytracer.com/v1/check/{$ip}");
if ($response->successful()) {
// 3. プロキシが検出された場合は接続を切断
if ($response->json('proxy') === true) {
return response()->json([
'error' => 'Access Denied: VPN or Proxy detected.'
], 403);
}
}
} catch (\Exception $e) {
// フェイルオープン: エラーをログに記録し、稼働率を維持するためリクエストを許可
Log::warning("ProxyTracer validation failed: " . $e->getMessage());
}
}
// 4. トラフィックは正常です。コントローラーへ処理を渡します
return $next($request);
}
}設定:
php artisan make:middleware ProxyTracerMiddleware を使用してミドルウェアを生成します。
.env ファイルに PROXYTRACER_API_KEY を追加します。
-
Laravel 11 以降:
bootstrap/app.php内で$middleware->append(ProxyTracerMiddleware::class)を使用してミドルウェアを登録します。 -
Laravel 10 以前:
app/Http/Kernel.phpの$middleware配列に\App\Http\Middleware\ProxyTracerMiddleware::classを追加します。
最終更新日: