速率限制以防止ExpressJS中的恶意行为
Rate limiting to prevent malicious behavior in ExpressJS
有人让我意识到我正在开发的应用程序中存在一些缺陷(主要是在前端的JavaScript中),这让我有可能一次点击大量按钮并发送大量事务性电子邮件。这显然不好。
我认为在ExpressJS中处理这一问题的一种方法是使用app.all()
来计算在特定时间段内发生的请求数量。我会将其存储在带有时间戳的会话元数据中,如果在Y时间内发生了X个以上的请求,我会将它们中断一段时间,直到限制到期。
以前有人做过这件事吗?或者有什么建议/提示可以帮助我吗?更可取的是,我的应用程序中可以轻松进出的东西。谢谢
您可以在网页中使用Collate
对象。
function Collate(timeout) {
this.timeout = timeout || 1000;
}
Collate.prototype = {
time: 0,
idle: function() {
var t = new Date().getTime();
return (t - this.time > this.timeout && (this.time = t));
},
prefer: function(func) {
this.func = func;
clearTimeout(this.timer);
this.timer = setTimeout(func, this.timeout);
}
};
如果您希望函数运行一次,而在接下来的1秒内不再运行。就像如果你想阻止用户多次提交表格,你可以这样做:
var timer = new Collate(3000); //3 seconds
button1.onclick = function() {
if(timer.idle()) {
button1.form.submit();
} else alert("Don't click too quickly!");
}
//or on the form tag
<script>var submitTimer = new Collate(3000);</script>
<form action="post" onsubmit="return submitTimer.idle();">
如果您希望一个事件触发多次,但只想对上次触发作出反应。就像如果你想在用户完成输入后进行搜索,你可以这样做:
var timer = new Collate(700); //0.7 seconds
textfield1.onkeyup = function() {
timer.prefer(function() {
autocomplete.search(textfield1.value);
});
};
相关文章:
- 无法导出函数expressjs/requestjs中的变量
- nodejs-expressjs上传图像并显示它们
- NodeJS expressJS使用multer和passport将文件上传并保存到MongoDB
- Expressjs/AngularJS:实现req-flash后出错
- 在post-expressjs之后持久化表单数据
- 如何使用ExpressJS(在主视图/根视图上)呈现带有参数的HTML视图
- 谷歌caja-阻止恶意代码
- Expressjs-将表单数组/括号字段解析为实际数组
- 如何在同一端口上使用ExpressJS和Socket.io
- 将数据从ExpressJS发送到AngularJS ERROR json
- 扩展expressjs-res属性
- ExpressJS/NodeJS/Promises:从promise链提前返回
- 在文件中发现此恶意javascript..它做什么
- ExpressJS:奇怪的字符串比较
- Expressjs不知道如何处理多个用户
- 尝试在expressJS应用程序中使用haml咖啡时出现奇怪错误
- ExpressJs+Passport.js+MySQL身份验证
- expressjs:获取请求的url
- CRUD with ExpressJS router
- 速率限制以防止ExpressJS中的恶意行为