[ Expressjs ]破解坚果,把 IP 地址列入黑名单

[ Expressjs ]破解坚果,把 IP 地址列入黑名单

原文:https://medium.com/hackernoon/cracking-nut-nodejs-express-block-get-remote-request-client-ip-address-e4cdfa461add

对付不受欢迎的人的最好办法是把他踢出你的派对。对付不受欢迎的 IP 的最好方法是列入黑名单。

今天的背景是一个运行在 Node.js 服务器上的应用服务,包括一个静态的 HTML 网站和 API 服务。我们手头有一些不受欢迎的 IP 名单,我的老板告诉我“彼得,把他们列入黑名单。”。

我喜欢 Node.js 和 Express,中间件加速的设计我完成了工作,然后早早离开办公室去过周五晚上。

这个问题被分解为三个部分:

  1. 定义黑名单 IP
  2. 获取客户端 IP
  3. 阻止客户端 IP,如果它在黑名单中

在 Express.js 中提取客户端 ID 超级简单, 路由器req 都是加速提取所有客户端信息的工具,包括头、Cookies、帖子正文、获取 URL 参数等。

定义黑名单 IP

将不受欢迎的 IP 放在一个数组中,该数组将在中间件中用于检查路由器将指向哪里。

**var BLACKLIST =['192.0.0.1'];
//better to store as an String in process.env.BLACKLIST**

获取客户端 IP

*Express 提供了一个超级友好的req在几行代码内获取客户端 IP。*

req . connection . remote address返回的 IP,可能是 ipv4 或 ipv6。

var getClientIp = function(req) {
 ***var ipAddress = req.connection.remoteAddress;***if (!ipAddress) {
    return '';
  }// convert from "::ffff:192.0.0.1"  to "192.0.0.1"
 ***if (ipAddress.substr(0, 7) == "::ffff:") {
    ipAddress = ipAddress.substr(7)
  }***return ipAddress;
};

阻止客户端 IP,如果它在黑名单中

在 app.use()内增加一个用户阻塞中间件函数(req,res,next),这个中间件函数会在每次请求 app 时执行。就像一个过滤器,让正确的 IP 通过。

app.use(function(req, res, next) {
  var ipAddress = getClientIp(req);if(**BLACKLIST**.indexOf(ipAddress) !== -1){
    next();
  } else {
    res.send(ipAddress + ' IP is not in whiteList')
  }
});

把所有的放在一起

这是一个在 Express.js 框架中把以上三部分放在一起的例子。要修改一个适合你的黑名单 IP,去推你的 IP 在黑名单阵列,他们永远不会访问该服务。

var express = require(‘express’) 
var app = express()

// Part1, defining blacklist
**var BLACKLIST =['192.0.0.1'];**// Part2, Geting client IP
**var getClientIp = function(req) {
  var ipAddress = req.connection.remoteAddress;****if (!ipAddress) {
    return '';
  }****// convert from "::ffff:192.0.0.1"  to "192.0.0.1"
  if (ipAddress.substr(0, 7) == "::ffff:") {
    ipAddress = ipAddress.substr(7)
  }****return ipAddress;
};**//Part3, Blocking Client IP, if it is in the blacklist
**app.use(function(req, res, next) {
  var ipAddress = getClientIp(req);** **if(BLACKLIST.indexOf(ipAddress) === -1){
    next();
  } else {
    res.send(ipAddress + ' IP is not in whiteList')
  }
});**app.get(‘/’, function (req, res) {
   res.send(‘Hello World!’)
})

感谢【Javascript】override object . constructor()

【Expressjs】override RES . send

喜欢这个故事?对别人有帮助吗?这有助于我知道你是否想看到更多关于他的话题,并有助于人们在点击下面的 时看到这个故事。

参考:

git: https://github . com/wahengcang/JavaScript-must-know/tree/master/middleware _ block IP

express-IP filter https://www.npmjs.com/package/express-ipfilter

expressjs.com http://expressjs.com/en/api.html

stack overflow http://stack overflow . com/questions/10849687/express-js-how-to-get-remote-client-address http://stack overflow . com/questions/24896386/request-connection-remote address-now-prefixed-in-ffff-in-node-js http://stack overflow . com/questions/5999379/

黑客中午是黑客如何开始他们的下午。我们是这个家庭的一员。我们现在接受投稿并乐意讨论广告&赞助机会。

如果你喜欢这个故事,我们推荐你阅读我们的最新科技故事趋势科技故事。直到下一次,不要把世界的现实想当然!


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除