익스프레스(Node.js)
Express는 Node.js 생태계의 중추입니다. API 경로 또는 웹 애플리케이션을 보호하기 위해 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);최종 수정일: