mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-30 02:25:55 +01:00
Merge remote-tracking branch 'origin/develop'
This commit is contained in:
@@ -9,6 +9,7 @@ var nconf = require('nconf');
|
||||
var ensureLoggedIn = require('connect-ensure-login');
|
||||
var toobusy = require('toobusy-js');
|
||||
var Benchpress = require('benchpressjs');
|
||||
var LRU = require('lru-cache');
|
||||
|
||||
var plugins = require('../plugins');
|
||||
var meta = require('../meta');
|
||||
@@ -23,6 +24,10 @@ var controllers = {
|
||||
helpers: require('../controllers/helpers'),
|
||||
};
|
||||
|
||||
var delayCache = LRU({
|
||||
maxAge: 1000 * 60,
|
||||
});
|
||||
|
||||
var middleware = module.exports;
|
||||
|
||||
middleware.applyCSRF = csrf();
|
||||
@@ -186,6 +191,14 @@ middleware.processTimeagoLocales = function (req, res, next) {
|
||||
|
||||
middleware.delayLoading = function (req, res, next) {
|
||||
// Introduces an artificial delay during load so that brute force attacks are effectively mitigated
|
||||
|
||||
// Add IP to cache so if too many requests are made, subsequent requests are blocked for a minute
|
||||
var timesSeen = delayCache.get(req.ip) || 0;
|
||||
if (timesSeen > 10) {
|
||||
return res.sendStatus(429);
|
||||
}
|
||||
delayCache.set(req.ip, timesSeen += 1);
|
||||
|
||||
setTimeout(next, 1000);
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user