Skip to Content

Laravel (PHP)

Integrar ProxyTracer en una aplicación Laravel es increíblemente sencillo. Creando un HTTP Middleware estándar, puedes proteger toda tu aplicación de manera global o aplicarlo selectivamente en rutas sensibles (como /login o /checkout).

El Middleware

El método nativo $request->ip() de Laravel gestiona automáticamente la extracción desde balanceadores de carga (asumiendo que el middleware TrustProxies está correctamente configurado). Utilizamos el facade nativo Http para consultar la API y bloquear la solicitud si es detectada.
<?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. Extract the IP (Laravel safely handles reverse proxies automatically) $ip = $request->ip(); // Skip local development IPs if (!in_array($ip, ['127.0.0.1', '::1'])) { try { // 2. Query ProxyTracer API with a strict 500ms timeout $response = Http::withToken(env('PROXYTRACER_API_KEY')) ->timeout(0.5) ->get("https://api.proxytracer.com/v1/check/{$ip}"); if ($response->successful()) { // 3. Drop the connection if a proxy is detected if ($response->json('proxy') === true) { return response()->json([ 'error' => 'Access Denied: VPN or Proxy detected.' ], 403); } } } catch (\Exception $e) { // Fail open: Log the error and allow the request to ensure uptime Log::warning("ProxyTracer validation failed: " . $e->getMessage()); } } // 4. Traffic is clean, proceed to the controller return $next($request); } }

Configuración

Genera el middleware utilizando el comando php artisan make:middleware ProxyTracerMiddleware.

Para aplicarlo de forma global, añádelo a tu pila de middlewares.

  • Laravel 11: Añádelo en tu archivo bootstrap/app.php dentro de $middleware->append().
  • Laravel 10 y versiones anteriores: Añádelo al array $middleware en tu archivo app/Http/Kernel.php.
Last updated on