Skip to Content

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