缓解 Express 中的 http 攻击

缓解 Express 中的 http 攻击

我正在使用 Express 和 Node.JS 提供一些静态文件,我该怎么做才能防范 POST 攻击和 GET 攻击等 http 洪水?

答案1

所有请求都使用 app.use 预先捕获并注入中间件函数。在请求被跟踪到 express.static 或 app.rest(req 对象)之前使用它,在响应客户端(res 对象)之前再使用它一次。您可以更改 req、res,并可选择使用回调函数(此处名为下一个)。这就是诀窍。如果你的中间件函数从不调用下一个()回调,请求未得到处理。您可以使用中间件,计算每个 ip 每次的请求数,并决定是否提供页面。考虑一下被阻止的 ip 列表会增长,并会减慢您的应用程序。中间件需要同步才能拦截。以下是您需要的代码示例,基于 express API 文档示例:

var express = require('express'),
app = express(),
util= require(util);
app.use(express.static(__dirname + '/public'));

// a first middleware, a logger in console, just to show ip
// usefull to debug
app.use(function(req, res, next){
  console.log('%s %s from %s , proxy: %s', req.method, req.url, req.ip, util.inspect(req.ips));
  next();
});

// a second middleware, what u need
app.use(filterUrReq);

app.get("blah", function(req, res) {
    res.send(req.url + " well served to " + req.ip)
});

app.listen(8080);

// here the middleware function, it filters by ip, if ip is clean, call next callback.
function filterUrReq (req, res, next) {

    if (req.ip == "15.89.111.111") {
        console.log('i dont want to serve this IP, dont call next');
    } else {
        console.log('ok clean ip, go to next app.use');
        next();
    }

}

这是 expressJS 的良好实践。http://expressjs.com/4x/api.html#app.use。也许你的问题应该在 stackoverflow 上,或者你需要一些更全球化的东西,比如失败2ban,看看有关监狱的问题。

相关内容