Skip to Content

Laravel (PHP)

Интеграция ProxyTracer в приложение Laravel невероятно проста. Создав стандартный HTTP Middleware, вы можете защитить приложение целиком или точечно применить его к конфиденциальным маршрутам (например, /login или /checkout).

Middleware

Встроенный метод $request->ip() в Laravel автоматически справляется с извлечением IP-адресов за балансировщиками нагрузки (при условии правильной настройки middleware TrustProxies). Мы используем нативный фасад Http для запроса к API и блокировки подозрительных запросов.

<?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. Выполнить запрос к API ProxyTracer со строгим таймаутом 500 мс $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) { // Fail open: записать ошибку в лог и разрешить запрос для обеспечения непрерывной работы Log::warning("ProxyTracer validation failed: " . $e->getMessage()); } } // 4. Трафик чист, перейти к контроллеру return $next($request); } }

Конфигурация

Сгенерируйте middleware с помощью php artisan make:middleware ProxyTracerMiddleware.

Чтобы применять его глобально, добавьте его в свой стек middleware.

  • Laravel 11: Добавьте его в файл bootstrap/app.php в блоке $middleware->append().
  • Laravel 10 и ниже: Добавьте его в массив $middleware внутри файла app/Http/Kernel.php.
Последнее обновление: