Express (Node.js)
Express jest fundamentem ekosystemu Node.js. Aby chronić swoje trasy API lub całą aplikację webową, możesz wdrożyć ProxyTracer jako middleware globalny lub przypisany do konkretnych tras.
Middleware
Ta implementacja wyodrębnia adres IP klienta (obsługując nagłówki X-Forwarded-For, jeśli aplikacja działa za reverse proxy takim jak NGINX lub AWS ALB), odpytuje ProxyTracer za pomocą natywnego fetch i natychmiast odrzuca połączenie ze statusem 403 Forbidden, jeśli wykryto zagrożenie.
const express = require('express');
const app = express();
// Zaufaj reverse proxy, aby upewnić się, że req.ip jest prawidłowe
app.set('trust proxy', true);
const proxyTracerMiddleware = async (req, res, next) => {
// 1. Pobierz adres IP
// Express automatycznie obsługuje 'trust proxy', ale dodajemy fallback na wszelki wypadek
const ip = req.headers['x-forwarded-for']?.split(',')[0].trim() || req.ip;
// Przepuść żądanie w środowisku deweloperskim (localhost)
if (!ip || ip === '::1' || ip === '127.0.0.1') {
return next();
}
try {
// 2. Odpytaj API ProxyTracer (Node 18+ obsługuje natywne 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. Odrzuć połączenie, jeśli wykryto proxy/VPN
if (data.proxy === true) {
return res.status(403).json({
error: "Access Denied: VPN or Proxy detected."
});
}
}
} catch (error) {
// Fail-open: Jeśli API jest niedostępne, przepuść ruch, aby zapewnić ciągłość działania
console.error('ProxyTracer API Error:', error);
}
// 4. Ruch jest czysty, przekaż żądanie do kontrolera
next();
};
// Zastosuj globalnie do wszystkich tras
app.use(proxyTracerMiddleware);
// Lub zastosuj wyłącznie do wrażliwych tras
// app.post('/api/checkout', proxyTracerMiddleware, checkoutController);Ostatnia aktualizacja: