如何在连接到节点上的 websocket 服务器时传递消息
Posted
技术标签:
【中文标题】如何在连接到节点上的 websocket 服务器时传递消息【英文标题】:How to pass a message while connecting to websocket server on node 【发布时间】: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 将不起作用。
或者如果用户在连接后没有发送身份验证令牌,有没有办法断开连接。
如果它正在运行并允许每个人无限期地连接,那么这是一个安全风险。服务器可以轻松关闭。
【问题讨论】:
【参考方案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)
,并在收到消息时清除该超时
我对你有帮助吗?
是的,特别是这个链接帮助 - ***.com/questions/36788831/…以上是关于如何在连接到节点上的 websocket 服务器时传递消息的主要内容,如果未能解决你的问题,请参考以下文章
Node 在连接到 Postgres 方面比 .NET Core 快 20 倍
我在连接到数据库时遇到错误使用节点包 mysql v2.16.0 错误:数据包乱序。得到:80 预期:0
使用服务器端 Blazor,在连接到 SQL Server 数据库时如何使用 Windows 身份验证模拟用户?