Skip to Content

Express (Node.js)

Express — это основа экосистемы Node.js. Чтобы защитить API-маршруты или веб-приложение, вы можете внедрить ProxyTracer как глобальный middleware или для отдельных маршрутов.

Middleware

Эта реализация извлекает IP клиента (обрабатывая заголовки X-Forwarded-For, если вы находитесь за reverse proxy, таким как NGINX или AWS ALB), обращается к ProxyTracer через встроенный fetch и немедленно разрывает соединение с кодом 403 Forbidden при обнаружении угрозы.

const express = require('express'); const app = express(); // Доверять reverse proxy, чтобы гарантировать точность req.ip app.set('trust proxy', true); const proxyTracerMiddleware = async (req, res, next) => { // 1. Извлечь IP // Express обрабатывает 'trust proxy' автоматически, но на всякий случай можно использовать резервный вариант const ip = req.headers['x-forwarded-for']?.split(',')[0].trim() || req.ip; // Пропустить при локальной разработке if (!ip || ip === '::1' || ip === '127.0.0.1') { return next(); } try { // 2. Выполнить запрос к API ProxyTracer (Node 18+ поддерживает нативный fetch) const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${ip}`, { method: 'GET', headers: { 'Authorization': `Bearer ${process.env.PROXYTRACER_API_KEY}` } }); if (ptResponse.ok) { const data = await ptResponse.json(); // 3. Сбросить соединение, если обнаружен прокси/VPN if (data.proxy === true) { return res.status(403).json({ error: "Access Denied: VPN or Proxy detected." }); } } } catch (error) { // Fail open: если API недоступен, разрешить трафик для обеспечения непрерывной работы console.error('ProxyTracer API Error:', error); } // 4. Трафик чист, перейти к контроллеру next(); }; // Применять глобально ко всем маршрутам app.use(proxyTracerMiddleware); // Или применять строго к конфиденциальным маршрутам // app.post('/api/checkout', proxyTracerMiddleware, checkoutController);
Последнее обновление: