Skip to Content

Laravel (PHP)

Integracja ProxyTracer z aplikacją Laravel jest niezwykle prosta. Tworząc standardowy middleware HTTP, możesz zabezpieczyć całą aplikację globalnie lub wybiórczo chronić wrażliwe trasy (np. /login lub /checkout).

Middleware

Natywna metoda $request->ip() w Laravelu automatycznie obsługuje pobieranie IP zza load balancera (zakładając poprawną konfigurację middleware TrustProxies). Do odpytania API używamy fasady Http i odrzucamy żądanie w przypadku wykrycia zagrożenia.

<?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. Pobierz adres IP (Laravel automatycznie i bezpiecznie obsługuje reverse proxy) $ip = $request->ip(); // Pomiń lokalne adresy IP środowiska deweloperskiego if (!in_array($ip, ['127.0.0.1', '::1'])) { try { // 2. Odpytaj API ProxyTracer ze ścisłym limitem czasu 500 ms $response = Http::withToken(env('PROXYTRACER_API_KEY')) ->timeout(0.5) ->get("https://api.proxytracer.com/v1/check/{$ip}"); if ($response->successful()) { // 3. Odrzuć połączenie, jeśli wykryto proxy if ($response->json('proxy') === true) { return response()->json([ 'error' => 'Access Denied: VPN or Proxy detected.' ], 403); } } } catch (\Exception $e) { // Fail-open: Zaloguj błąd i przepuść żądanie, aby zapewnić dostępność usługi Log::warning("ProxyTracer validation failed: " . $e->getMessage()); } } // 4. Ruch jest czysty, przekaż żądanie do kontrolera return $next($request); } }

Konfiguracja:

Wygeneruj middleware za pomocą php artisan make:middleware ProxyTracerMiddleware.

Aby zastosować middleware globalnie, dodaj go do swojego stosu middleware.

  • Laravel 11: Dodaj go w pliku bootstrap/app.php wewnątrz $middleware->append().
  • Laravel 10 i starsze: Dodaj go do tablicy $middleware w pliku app/Http/Kernel.php.
Ostatnia aktualizacja: