Skip to Content

Laravel (PHP)

Integrare ProxyTracer in un'applicazione Laravel è incredibilmente semplice. Creando un middleware HTTP standard, puoi proteggere l'intera applicazione a livello globale o applicarlo selettivamente a route sensibili (come /login o /checkout).

Il Middleware

Il metodo nativo $request->ip() di Laravel gestisce automaticamente l'estrazione dai bilanciatori di carico (supponendo che il tuo middleware TrustProxies sia configurato correttamente). Usiamo la facade nativa Http per interrogare l'API e bloccare la richiesta se segnalata.

<?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. Estrai l'IP (Laravel gestisce automaticamente i reverse proxy in modo sicuro) $ip = $request->ip(); // Salta gli IP di sviluppo locale if (!in_array($ip, ['127.0.0.1', '::1'])) { try { // 2. Interroga l'API ProxyTracer con un timeout rigoroso di 500ms $response = Http::withToken(env('PROXYTRACER_API_KEY')) ->timeout(0.5) ->get("https://api.proxytracer.com/v1/check/{$ip}"); if ($response->successful()) { // 3. Interrompi la connessione se viene rilevato un proxy if ($response->json('proxy') === true) { return response()->json([ 'error' => 'Access Denied: VPN or Proxy detected.' ], 403); } } } catch (\Exception $e) { // Fail open: registra l'errore e consenti la richiesta per garantire l'uptime Log::warning("ProxyTracer validation failed: " . $e->getMessage()); } } // 4. Il traffico è pulito, procedi al controller return $next($request); } }

Configurazione:

Genera il middleware usando php artisan make:middleware ProxyTracerMiddleware.

Per applicarlo globalmente, aggiungilo al tuo stack middleware.

  • Laravel 11: aggiungilo all'interno del file bootstrap/app.php sotto $middleware->append().
  • Laravel 10 e precedenti: aggiungilo all'array $middleware all'interno del file app/Http/Kernel.php.
Ultimo aggiornamento il