【问题标题】:How to pass a message while connecting to websocket server on node如何在连接到节点上的 websocket 服务器时传递消息
【发布时间】:2019-11-25 03:16:23
【问题描述】:

我这里有这段代码 -

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 将不起作用。

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

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

【问题讨论】:

    标签: node.js websocket


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

    【讨论】:

    • 有没有办法有效断开连接 x 秒后不发送消息的客户端
    • console.log('Client connected');之后可以放置setTimeout(() => ws.close(), 5000),并在收到消息时清除该超时
    • 我对你有帮助吗?
    • 是的,特别是这个链接帮助 - stackoverflow.com/questions/36788831/…
    猜你喜欢
    • 1970-01-01
    • 2020-03-25
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 1970-01-01
    • 2018-02-05
    • 2019-01-06
    相关资源
    最近更新 更多