Skip to Content

Express (Node.js)

Express 是 Node.js 生态的核心基石。要保护 API 路由或 Web 应用,您可以将 ProxyTracer 作为全局中间件或特定路由中间件引入。

中间件实现

此实现提取客户端 IP(支持正确处理位于 NGINX 或 AWS ALB 等反向代理之后的 X-Forwarded-For 请求头),使用原生 fetch 极速查询 ProxyTracer,并在检测到威胁时以 403 Forbidden 立即中断连接。

const express = require('express'); const app = express(); // 信任反向代理以确保 req.ip 精准无误 app.set('trust proxy', true); const proxyTracerMiddleware = async (req, res, next) => { // 1. 提取 IP // Express 会自动处理 'trust proxy',但我们提供后备回退以防万一 const ip = req.headers['x-forwarded-for']?.split(',')[0].trim() || req.ip; // 若为本地开发环境则直接放行 if (!ip || ip === '::1' || ip === '127.0.0.1') { return next(); } try { // 2. 查询 ProxyTracer API(Node 18+ 原生支持 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. 若检测到代理/VPN,则立即丢弃连接 if (data.proxy === true) { return res.status(403).json({ error: "Access Denied: VPN or Proxy detected." }); } } } catch (error) { // 故障开放(Fail-open):若 API 不可达,放行流量以确保可用性 console.error('ProxyTracer API Error:', error); } // 4. 流量正常,继续放行至控制器 next(); }; // 全局应用于所有路由 app.use(proxyTracerMiddleware); // 或仅严格应用于敏感路由 // app.post('/api/checkout', proxyTracerMiddleware, checkoutController);
最后更新于