Skip to Content

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: