gpt4 book ai didi

node.js - 如何使用 Socket.io 防止 Node.js 中的分布式拒绝服务攻击?

转载 作者:IT老高 更新时间:2023-10-28 21:54:02 24 4
gpt4 key购买 nike

我最近一直在学习 node.js 和 socket.io。我的问题是如何保护服务器免受客户端攻击?

这是我的服务器代码

io.sockets.on('connection', function (socket) { 
//users.push(socket);
socket.on('message', function (data) {

socket.on('disconnect', function () { });

socket.on('bcast', function (data) {
socket.emit('news', { 'data': data });
socket.broadcast.emit('news', { 'data': data });
});

socket.on('login', function(data){
socket.emit('login', {'data': [ socket.id, data ] });
});
});
});

例如,如果客户使用 chrome 开发者工具来做流动代码

 for(var i = 0; i<99999999999; i++)
{
socket.emit('bcast', {data: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'});
}

它会杀死服务器。

最佳答案

研究 JS 事件限制和去抖动!

这些技术将帮助您预防和检测一定程度的攻击(在我看来,这对于小型多人套接字游戏来说已经足够了)...

编辑:

在这个 jsfiddle 中:http://jsfiddle.net/y4tq9/9/

var sIO = {};

sIO.on = (function(){
var messages = {};
var speedLimit = 5; //5ms
return function(message, handler) {
messages[message] = messages[message] || {};
if(messages[message].timestamp && new Date().getTime() - messages[message].timestamp < speedLimit) return false;
else messages[message].timestamp = new Date().getTime();

handler();
return true;
//execute code, Ex:
}
}());

您可以看到,每个发送速度快于 5 毫秒的请求都将返回 false,否则处理程序将运行。

您只需断开发送请求速度超过 5 毫秒(或 2 毫秒或 3 毫秒,具体取决于您的网络和应用程序的权重...)的套接字。

您不妨在客户端站点上使用 js 事件节流,以确保您的所有请求的发送速度不会超过速度限制!

这种技术不会提供绝对的保护免受利用,但它会防止您的服务器在攻击者尝试 Dos 时崩溃...

关于node.js - 如何使用 Socket.io 防止 Node.js 中的分布式拒绝服务攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20435553/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com