为了在我的NodeJS / Express应用程序中防止暴力预防,我决定在我的路由文件中使用express-brute包。我使用该软件包来防止用户随机猜测某个代码,而不是输入他们给出的唯一代码。
我使用express-brute-mongo
商店(使用MongoDB)设置了速率限制器对象,如下所示:
// setup the brute force prevention system
var expressBrute = require('express-brute');
var mongoStore = require('express-brute-mongo');
var mongoClient = require('mongodb').MongoClient;
var store = new mongoStore(function(ready) {
mongoClient.connect("mongodb://localhost/app", function(err, db) {
if (err) {
console.log(err);
} else {
ready(db.collection('bruteforce-store'));
}
});
});
var bruteforce = new expressBrute(store, {
freeRetries: 2, // only allow 2 incorrect requests
minWait: 5 * 1000, // min wait time of 5 seconds
maxWait: 5 * 60 * 1000, // max wait time of 5 minutes
// use default callback function if all retries are used
failCallback: expressBrute.FailTooManyRequests
});
当发出太多请求时,将调用failCallback
属性,并将其设置为express-brute
的默认回调之一,假定为发送JSON错误消息作为响应。但是,虽然防护系统确实有效(我不能再尝试重试),但永远不会发送此错误消息。
回调 运行是非常奇怪的,就像我用
之类的东西替换回调一样failCallback: function(req,resp,next,nextdate) {
console.log("too many requests");
resp.json({ message: 'too many requests' });
}
我在控制台中收到“请求太多”的消息,而JSON命令似乎被忽略了。我甚至尝试在回调中发出GET请求,如果发出太多请求,则重定向到另一个页面,但除了输出到控制台之外,没有任何事情发生。这使我无法向用户提供关于他们被锁定在网站上的任何消息。我很困惑为什么在使用express-brute
时我根本无法更改网页。有什么办法可以从回调中更改网页吗?