Laravel (PHP)
Интеграция ProxyTracer в приложение Laravel невероятно проста. Создав стандартный HTTP Middleware, вы можете защитить приложение целиком или точечно применить его к конфиденциальным маршрутам (например, /login или /checkout).
Middleware
Встроенный метод $request->ip() в Laravel автоматически справляется с извлечением IP-адресов за балансировщиками нагрузки (при условии правильной настройки middleware TrustProxies). Мы используем нативный фасад Http для запроса к API и блокировки подозрительных запросов.
<?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. Извлечь IP (Laravel безопасно обрабатывает обратные прокси автоматически)
$ip = $request->ip();
// Пропускать IP-адреса локальной разработки
if (!in_array($ip, ['127.0.0.1', '::1'])) {
try {
// 2. Выполнить запрос к API ProxyTracer со строгим таймаутом 500 мс
$response = Http::withToken(env('PROXYTRACER_API_KEY'))
->timeout(0.5)
->get("https://api.proxytracer.com/v1/check/{$ip}");
if ($response->successful()) {
// 3. Сбросить соединение, если обнаружен прокси
if ($response->json('proxy') === true) {
return response()->json([
'error' => 'Access Denied: VPN or Proxy detected.'
], 403);
}
}
} catch (\Exception $e) {
// Fail open: записать ошибку в лог и разрешить запрос для обеспечения непрерывной работы
Log::warning("ProxyTracer validation failed: " . $e->getMessage());
}
}
// 4. Трафик чист, перейти к контроллеру
return $next($request);
}
}Конфигурация
Сгенерируйте middleware с помощью php artisan make:middleware ProxyTracerMiddleware.
Чтобы применять его глобально, добавьте его в свой стек middleware.
-
Laravel 11: Добавьте его в файл
bootstrap/app.phpв блоке$middleware->append(). -
Laravel 10 и ниже: Добавьте его в массив
$middlewareвнутри файлаapp/Http/Kernel.php.
Последнее обновление: