Express (Node.js)
Express est l'épine dorsale de l'écosystème Node.js. Pour protéger vos routes API ou votre application web, vous pouvez implémenter ProxyTracer en tant qu'intergiciel global ou spécifique à une route.
L'Intergiciel
Cette implémentation extrait l'IP du client (en gérant les en-têtes X-Forwarded-For si vous êtes derrière un proxy inverse comme NGINX ou AWS ALB), interroge ProxyTracer en utilisant la fonction native fetch, et coupe immédiatement la connexion avec un 403 Forbidden si une menace est détectée.
const express = require('express');
const app = express();
// Faire confiance au proxy inverse pour garantir que req.ip est précis
app.set('trust proxy', true);
const proxyTracerMiddleware = async (req, res, next) => {
// 1. Extraire l'IP
// Express gère automatiquement 'trust proxy', mais nous pouvons avoir un plan de secours au cas où
const ip = req.headers['x-forwarded-for']?.split(',')[0].trim() || req.ip;
// Laisser passer en cas de développement local
if (!ip || ip === '::1' || ip === '127.0.0.1') {
return next();
}
try {
// 2. Interroger l'API ProxyTracer (Node 18+ prend en charge fetch natif)
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. Interrompre la connexion si un proxy/VPN est détecté
if (data.proxy === true) {
return res.status(403).json({
error: "Access Denied: VPN or Proxy detected."
});
}
}
} catch (error) {
// Fail open : si l'API est inaccessible, autoriser le trafic pour garantir la disponibilité
console.error('ProxyTracer API Error:', error);
}
// 4. Le trafic est sain, poursuivre vers le contrôleur
next();
};
// Appliquer globalement à toutes les routes
app.use(proxyTracerMiddleware);
// Ou appliquer strictement aux routes sensibles
// app.post('/api/checkout', proxyTracerMiddleware, checkoutController);Dernière mise à jour le