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. Extraer la IP (Laravel gestiona proxies inversos automáticamente de forma segura)
$ip = $request->ip();
// Omitir las IPs de desarrollo local
if (!in_array($ip, ['127.0.0.1', '::1'])) {
try {
// 2. Consultar la API de ProxyTracer con un timeout estricto de 500 ms
$response = Http::withToken(env('PROXYTRACER_API_KEY'))
->timeout(0.5)
->get("https://api.proxytracer.com/v1/check/{$ip}");
if ($response->successful()) {
// 3. Descartar la conexión si se detecta un proxy
if ($response->json('proxy') === true) {
return response()->json([
'error' => 'Access Denied: VPN or Proxy detected.'
], 403);
}
}
} catch (\Exception $e) {
// Fail open: Registrar el error y permitir la solicitud para garantizar la disponibilidad
Log::warning("ProxyTracer validation failed: " . $e->getMessage());
}
}
// 4. El tráfico está limpio, continuar hacia el controlador
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.phpdentro de$middleware->append(). -
Laravel 10 y versiones anteriores: Añádelo al array
$middlewareen tu archivoapp/Http/Kernel.php.
Última actualización el