提问者:小点点

连接到节点上的websocket服务器时如何传递消息


我这里有密码-

const wss = new SocketServer({ express() });

wss.on('connection', ws => {
    console.log('Client connected');
    ws.on('message', msg => {
        console.log('received: %s', msg);
    });
    ws.on('close', () => console.log('Client disconnected'));
});

现在有一些问题,一个D-Dos攻击可以使我的服务器崩溃。

在允许一个陌生人连接到WebSocket之前,有没有办法检查一个令牌什么的?此外,套接字将在另一个域上,因此cookie将无法工作。

或者如果用户连接后还没有发送身份验证令牌,是否有办法断开连接。

如果它正在运行,并且允许每个人无限期地连接,那么这就是一个安全风险。服务器可以很容易地被关闭。


共1个答案

匿名用户

使用socket.io可以进行您需要的设置,请参见验证套接字io连接

否则你必须自己实现,但是你应该遵循一些标准。我能想到的第一个难看的手工解决方案是这样的:

wss.on('connection', ws => {
    console.log('Client connected');

    isAuthenticated = false

    ws.on('message', msg => {
        if (!isAuthenticated ) {
            // check if message is a token
            // else comunicates back the error
        }

        console.log('received: %s', msg);
    });

    ws.on('close', () => console.log('Client disconnected'));
});

对于DDos攻击,如果他们有一个令牌,他们就可以发送无限个垃圾邮件请求:同样的,你应该自己计算传入的推拿率,并执行一些类似于节流策略的措施。