javascript - nodejs - 仅当来自服务器 ip 时才允许请求

标签 javascript node.js

如果请求不是来自服务器,是否可以阻止路由?我在服务器上安装了一个 http 客户端,它向我不想公开的 Web 服务发出获取请求。问题是 http 客户端没有登录到应用程序中,服务器将其视为匿名用户。

到目前为止,这是我尝试过的方法,但我不知道我应该在请求中的哪个位置查找请求者的 ip,或者它是否是实现我想做的事情的正确方法:

function isFromServer (req, res, next) {
    if(req.ip === '127.0.0.1') return next();
    else {
          var err = new Error('Not Found');
          err.status = 404;
          return next(err); 
    }
}    

//the webservice I want to allow only to the http client installed on the server
router.get('/[0-9]{3}$', isFromServer, function(req, res, next){
    var codecs = req.url.split('/')[1];
    res.render('metadata', {codecs: codecs});
});

最佳答案

根据您的语法,我假设您使用的是 Express。 在这种情况下,获取客户端 IP 的直接方法是:

req.ip // → "127.0.0.1"

您可以看到它使用的逻辑,当该数组是从 x-forwarded-for header 构造时,从代理地址数组 req.ips 中获取第一项:

defineGetter(req, 'ip', function ip(){
    var trust = this.app.get('trust proxy fn');
    return proxyaddr(this, trust);
});

如果您不使用 express,请尝试使用:

var ip = req.headers['x-forwarded-for'] 
    || req.connection.remoteAddress
    || req.socket.remoteAddress
    || req.connection.socket.remoteAddress;

这应该会处理大多数配置,并以与上述 Express 函数类似的方式工作。

来源:

关于javascript - nodejs - 仅当来自服务器 ip 时才允许请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635616/

相关文章:

javascript - 同时在 Highcharts 中显示多个工具提示

javascript - Nodeweb 套件崩溃 - Events.js :85 Error

node.js - 如何使用 Node 和 Webpack 正确加载照片?

linux - 从 GitHub : support/node-builds-v4/node-linux64: Permission denied 安装 Cloud9 时出现问题

javascript - FindOne() 可以返回记录,但无法使用 Node.js 的 MongoDB 聚合查询(id 的总记录)

javascript - 将 angular.morris-chart 添加到 Angular 应用程序

javascript - 如何测试 Jest 中的包装器是否正确调用了skip?

javascript - 通过 `getDisplayMedia` 检查浏览器/平台是否支持屏幕截图

javascript - node-phantom createPage() 从不调用回调

javascript - 衡量客户端页面加载时间的最佳方法是什么?