Skip to Content

Express(Node.js)

Express.js は軽量なミドルウェア関数を使用して HTTP リクエストをインターセプトおよび処理します。ProxyTracer を Express パイプラインに統合することで、プロキシ、VPN、Tor 接続がアプリケーションのルートに到達する前に確実に検出・ブロックされます。

ミドルウェアの実装

このミドルウェアは受信リクエストの IP を検証し、ProxyTracer API への非同期クエリを実行して、悪意あるプロキシ活動が検出された場合に 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) { // フェイルオープン: APIに接続できない場合でも稼働率を維持するためトラフィックを許可 console.error('ProxyTracer API Error:', error); } // 4. トラフィックは正常です。コントローラーへ処理を渡します next(); }; // すべてのルートにグローバルに適用 app.use(proxyTracerMiddleware); // または、機密ルートに厳密に適用 // app.post('/api/checkout', proxyTracerMiddleware, checkoutController);
最終更新日: