Estoy sirviendo algunos archivos estáticos utilizando Express y Node.JS, ¿qué puedo hacer para protegerme contra las inundaciones de http, como los ataques POST y los ataques GET?
Todas las solicitudes se capturan previamente con app.use y se inyectan en una función de middleware. Esto se usa antes de seguir la solicitud para express.static o app.rest (el objeto req), y una vez más antes de responder al cliente (el objeto res). Puede modificar req, res y opcionalmente usar la función de devolución de llamada (aquí se denomina siguiente ). Aquí está el truco. Si su función de middleware nunca llama al siguiente() devolución de llamada, la solicitud no se sirve. Puede usar un middleware, que cuenta las solicitudes por ip por tiempo, y sirve o no a la página. Piense en la lista de direcciones IP bloqueadas que aumentará y ralentizará su aplicación. Middlewares deben estar sincronizados para interceptar. Aquí un ejemplo de su código necesario, basado en el ejemplo expreso de la 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();
}
}
Aquí las buenas prácticas para ExpressJS. http://expressjs.com/4x/api.html#app.use . Tal vez su pregunta debería estar en stackoverflow, o tal vez necesita algo más global como fail2ban , echa un vistazo a la problemática de las cárceles.