Laravel (PHP)
L'intégration de ProxyTracer dans une application Laravel est incroyablement simple. En créant un intergiciel HTTP standard, vous pouvez protéger l'ensemble de votre application de manière globale ou l'appliquer sélectivement à des routes sensibles (comme /login ou /checkout).
L'Intergiciel
La méthode native$request->ip() de Laravel gère automatiquement l'extraction de l'équilibreur de charge (en supposant que votre intergiciel TrustProxies est correctement configuré). Nous utilisons la façade native Http pour interroger l'API et bloquer la requête si elle est signalée.
<?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);
}
}Configuration
Générez l'intergiciel en utilisant php artisan make:middleware ProxyTracerMiddleware.
Pour l'appliquer globalement, ajoutez-le à votre pile d'intergiciels.
-
Laravel 11: Ajoutez-le dans votre fichier
bootstrap/app.phpsous$middleware->append(). -
Laravel 10 et inférieur: Ajoutez-le au tableau
$middlewaredans votre fichierapp/Http/Kernel.php.
Last updated on