Express (Node.js)
Per le applicazioni Node.js basate su Express, creare un middleware dedicato ti consente di intercettare il traffico malevolo prima che raggiunga le route della tua API o i controller di autenticazione.
Il Middleware
Questa implementazione estrae l'IP del client (gestendo gli header X-Forwarded-For se sei dietro un reverse proxy come NGINX o AWS ALB), interroga ProxyTracer utilizzando fetch nativo e interrompe immediatamente la connessione con un 403 Forbidden se viene rilevata una minaccia.
const express = require('express');
const app = express();
// Fidati del reverse proxy per assicurarti che req.ip sia accurato
app.set('trust proxy', true);
const proxyTracerMiddleware = async (req, res, next) => {
// 1. Estrarre l'IP
// Express gestisce 'trust proxy' automaticamente, ma possiamo avere un fallback per ogni evenienza
const ip = req.headers['x-forwarded-for']?.split(',')[0].trim() || req.ip;
// Lascia passare in caso di sviluppo locale
if (!ip || ip === '::1' || ip === '127.0.0.1') {
return next();
}
try {
// 2. Interroga l'API ProxyTracer (Node 18+ supporta fetch nativo)
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. Interrompi la connessione se viene rilevato un proxy/VPN
if (data.proxy === true) {
return res.status(403).json({
error: "Access Denied: VPN or Proxy detected."
});
}
}
} catch (error) {
// Fail open: se l'API non è raggiungibile, consenti il traffico per garantire l'uptime
console.error('ProxyTracer API Error:', error);
}
// 4. Il traffico è pulito, procedi al controller
next();
};
// Applica globalmente a tutte le route
app.use(proxyTracerMiddleware);
// Oppure applica rigorosamente alle route sensibili
// app.post('/api/checkout', proxyTracerMiddleware, checkoutController);Ultimo aggiornamento il