阻止对expressjs app的公共访问

时间:2013-07-06 09:06:54

标签: javascript node.js express firewall

考虑一下,以下表达app:

var express = require('express');
var http    = require('http');
var httpApp = express();

httpApp.configure(function() {
    httpApp.use(express.static(__dirname + '/static/'));
});

var server = http.createServer(httpApp).listen(4444);

现在, 我希望这台服务器不能公开提供。 响应来自特定客户端的IP地址/域请求。其他人都应该403 - Forbidden错误。

我搜索了API Doc&找到了这样做的方法,首先通过app.enable('trust proxy')&然后检查req.ip

但是,我无法访问req对象。所以如果有人拿这个代码&可以告诉我如何拒绝基于其IP /域的请求,这将是非常有用的

2 个答案:

答案 0 :(得分:7)

只需添加一个检查IP的中间件,如果不匹配就拒绝访问:

app.use(function(req, res, next) {
  if (allowed(req.ip))
    next();
  else
    res.status(403).end('forbidden');
});

答案 1 :(得分:0)

使用express-ipfilter

<强>安装

npm install express-ipfilter

使用Express

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

// Whitelist the following IPs 
var ips = ['127.0.0.1'];

// Create the server 
app.use(ipfilter(ips, {mode: 'allow'}));
app.listen(3000);

https://www.npmjs.com/package/express-ipfilter#installation