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.phpsotto$middleware->append(). -
Laravel 10 e precedenti: aggiungilo all'array
$middlewareall'interno del fileapp/Http/Kernel.php.
Ultimo aggiornamento il