Вы можете использовать пакет express-ipfilter и применять его только к определенным маршрутам, которые вы хотите защитить:
const express = require('express'),
ipfilter = require('express-ipfilter').IpFilter;
// Whitelist the following IPs
const ips = ['127.0.0.1'];
// Create the route
app.get("/securePath", ipfilter(ips, {mode: 'allow'}), (req, res) => {
// only requests from 127.0.0.1 (localhost/loopback) can get here
});
app.get("/openPath", (req, res) => {
// all requests can get here
});
app.listen(3000);
Если вы используете Node за прокси-сервером,вам может потребоваться настроить прокси-сервер для установки заголовка с фактическим IP-адресом, а затем передать функции ipfilter
функцию в свойстве detectIp
второму параметру.
Допустим, вы используете nginx и настроили его для отправки исходного IP через заголовок x-Real-IP
, вы можете передать эту функцию в ipfilter
:
const express = require('express'),
ipfilter = require('express-ipfilter').IpFilter,
ips = ['127.0.0.1'];
app.get("/securePath", ipfilter(ips, {mode: 'allow', detectIp: getIp}), (req, res) => {
// only requests from 127.0.0.1 (localhost/loopback) that go through the proxy can get here.
});
app.get("/openPath", (req, res) => {
// all requests can get here
});
app.listen(3000);
function getIp(req) { return req.headers["X-Real-IP"] }