在节点

时间:2019-07-16 11:35:33

标签: node.js 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攻击会使我的服务器崩溃。

在允许陌生人连接到网络套接字之前,有没有办法检查令牌或其他东西?另外,套接字将在另一个域上,因此cookie无法使用。

或者如果用户在连接后仍未发送身份验证令牌,则可以通过这种方法断开连接。

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

1 个答案:

答案 0 :(得分:1)

使用Socket.io可以进行所需的设置,请参见Authenticating socket io connections

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

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攻击,如果它们具有令牌,则可以对无限的请求进行垃圾邮件处理:同一件事,您应该自己计算传入的按摩速率并实施类似“限制”策略。