针对特定路线的Express ip过滤器?

时间:2017-01-12 03:47:33

标签: node.js express ip access-control

是否可以将不同的ip过滤器应用于不同的路由?

例如,我希望只有来自123.123.123.123的人才能访问我的服务器的/test路由,并且只有来自124.124.124.124的人才能访问我的服务器的/路由

我知道express-ipfilter可以通过IP地址限制网站访问。但它不能将过滤器应用于特定路线。

我也知道在路由中间添加app.use(ipfilter(ips, {}));只能对以下路由应用过滤器:

var express = require('express'),
    ipfilter = require('express-ipfilter').IpFilter;

var ips = ['::ffff:127.0.0.1'];
var app = express();

app.get('/test', function(req, res) {
    res.send('test');
});

app.use(ipfilter(ips, {})); // the ipfilter only applies to the routes below

app.get('/', function(req, res) {
    res.send('Hello World');
});

app.listen(3000);

但是我想为不同的路线选择不同的过滤器。

是否可以这样做?

3 个答案:

答案 0 :(得分:5)

  

警告:包return fetch(url,{ method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify(data) }).then((res) => res.json()); 现已弃用。

您可以链接中间件(而ipFilter是一个中间件)。有两种方法可以做到这一点:

express-ipfilter

或限定使用中间件:

var express = require('express'),
    ipfilter = require('express-ipfilter').IpFilter;

var ips = ['::ffff:127.0.0.1'];
var testers = ['1.2.3.4'];
var app = express();

app.get('/test', ipfilter(testers, {mode: 'allow'}), function(req, res) {
    res.send('test');
});


// the ipfilter only applies to the routes below  
app.get('/', ipfilter(ips, {mode: 'allow'}), function(req, res) {
    res.send('Hello World');
});

app.listen(3000);

答案 1 :(得分:2)

是的,这是可能的。你可以这样做:

app.get('/test', function(req, res){
    var trustedIps = ['123.123.123.123'];
    var requestIP = req.connection.remoteAddress;
    if(trustedIps.indexOf(requestIP) >= 0) {
        // do stuff
    } else {
        // handle unallowed ip
    }
})

您可能需要确保requestIP格式正确。

答案 2 :(得分:0)

在你定义app的主文件中,

app.use('/test',require('./whereever-my-route-is-located-where /test routes '));
app.use('/',require('./wherever-my-this-routes-are-located'))
路径文件中的

var express = require('express'),
    router = express.Router();
//Ip verification for all requests : for whereever-my-route-is-located-where /test routes 
router.use(function(req, res, next) {
    //verify Ip Logic
});
//this will be called for every route u define in that file, if it fails.