如何在连接到节点上的 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 将不起作用。

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

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

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攻击,如果他们有令牌,他们可以发送无限请求:同样的事情,你应该自己计算传入的按摩率,并实施类似限制策略的东西。

最新更新