Я обслуживаю несколько статических файлов, используя Express и Node.JS, что я могу сделать для защиты от http-потоков, таких как POST-атаки и GET-атаки?
1 ответ
Все запросы предварительно отслеживаются с помощью app.use и внедряются в функцию промежуточного программного обеспечения. Это используется до того, как запрос будет передан express.static или app.rest (объект req), и еще один раз, прежде чем beeing ответит клиенту (объект res). Вы можете изменить req, res и, необязательно, использовать функцию обратного вызова (здесь она называется далее). Здесь это трюк. Если ваша функция промежуточного программного обеспечения никогда не вызывает обратный вызов next () , запрос не обслуживается. Вы можете использовать промежуточное программное обеспечение, которое считает количество запросов на ip за раз и обслуживает или не обрабатывает страницу. Подумайте, список заблокированных ip будет расти и будет замедлять работу вашего приложения. Промежуточное программное обеспечение должно быть синхронизировано, чтобы перехватить. Вот пример необходимого вам кода, основанный на примере экспресс-документа doc:
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, или, может быть, вам нужно что-то более глобальное, например fail2ban, взгляните на проблемы с тюрьмами.