为了防止我的应用程序发送垃圾邮件,我正在考虑记录给定IP连接的次数,例如刷新页面或者什么,所以如果它们超过每秒说一秒或一分钟的连接数量,我可以记录他们的IP,我怎么能在Express或socket.io中实现这一点?
答案 0 :(得分:0)
This answer详细说明了如何获取请求IP。您需要构建一些中间件,以跟踪特定IP请求您的服务器的次数。
这是一种粗略的记忆内方法
var ips = {};
app.enable('trust proxy')
app.use(function(req, res, next) {
if (ips[req.ip]) {
var tracker = ips[req.ip];
// If they've accessed less than a minute ago the same route increase count
if (req.route === tracker.lastRoute && (new Date() - tracker.initReqTimestamp) < 60000)
tracker.count++;
else { // Reset the counter
tracker.count = 1
tracker.initReqTimestamp = new Date();
tracker.lastRoute = req.route;
}
ips[req.ip] = tracker;
}
else {
ips[req.ip] = {
count: 1,
initReqTimestamp: new Date(),
lastRoute: req.route
};
}
if (ips[req.ip].count > connThreshold)
// Do something
else
return next(); // Continue to routes
});
// Put your Express Routes below this
就Socket.io而言,this answer详细说明了如何捕获套接字客户端的IP。您还可以编写socket.io middleware来跟踪IP使用与上述Express中间件示例类似的方法建立的连接数。