我在这里有此代码-
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无法使用。
或者如果用户在连接后仍未发送身份验证令牌,则可以通过这种方法断开连接。
如果它正在运行并且允许每个人无限期地连接,则存在安全风险。可以轻松关闭服务器。
答案 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攻击,如果它们具有令牌,则可以对无限的请求进行垃圾邮件处理:同一件事,您应该自己计算传入的按摩速率并实施类似“限制”策略。