我这里有密码-
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攻击,如果他们有一个令牌,他们就可以发送无限个垃圾邮件请求:同样的,你应该自己计算传入的推拿率,并执行一些类似于节流策略的措施。