Защита от подмены src в пакетах

This commit is contained in:
RoyceDa
2026-04-07 15:10:27 +02:00
parent 986cd765d8
commit 435d6fefa8
2 changed files with 20 additions and 1 deletions

View File

@@ -18,7 +18,9 @@ public class CallSession {
* Клиенты в этом списке не могут принимать другие звонки, так как они уже заняты дозвоном, * Клиенты в этом списке не могут принимать другие звонки, так как они уже заняты дозвоном,
* но они еще не в звонке, так как не приняли звонок * но они еще не в звонке, так как не приняли звонок
* *
* Клиенты удаляются из этого списка, когда они принимают звонок или отклоняют его, тогда они либо переходят в звонок, либо становятся свободными для других звонков * Клиенты удаляются из этого списка, когда они принимают звонок или отклоняют его,
* тогда они либо переходят в звонок, либо становятся свободными для других звонков
* pk -> время начала дозвона (timestamp в миллисекундах)
*/ */
public HashMap<String, Long> ringing; public HashMap<String, Long> ringing;
/** /**
@@ -48,6 +50,16 @@ public class CallSession {
this.clients.put(publicKey, client); this.clients.put(publicKey, client);
} }
/**
* Проверяет, может ли этот публичный ключ выполнять какие-либо действия в рамках этой сессии звонка,
* чтобы не допустить выполнение действий от посторонних публичных ключей, которые не участвуют в звонке
* @param publicKey Публичный ключ для проверки
* @return true, если этот публичный ключ может выполнять действия в рамках этой сессии звонка, false иначе
*/
public boolean isValidSource(String publicKey) {
return this.ringing.containsKey(publicKey) || this.clients.containsKey(publicKey);
}
/** /**
* Получаем публичный ключ клиента по его сокету, чтобы понимать, кто отправляет сигналы в рамках звонка * Получаем публичный ключ клиента по его сокету, чтобы понимать, кто отправляет сигналы в рамках звонка
* @param client Сокет клиента, для которого нужно получить публичный ключ * @param client Сокет клиента, для которого нужно получить публичный ключ

View File

@@ -127,6 +127,13 @@ public class Executor26SignalPeer extends PacketExecutor<Packet26SignalPeer> {
client.disconnect(Failures.NO_CALL_SESSION); client.disconnect(Failures.NO_CALL_SESSION);
return; return;
} }
if(!session.isValidSource(src)) {
/**
* Клиент не состоит в сессии звонка, отключаем его от сервера, так как он отправляет некорректные данные
*/
client.disconnect(Failures.DATA_MISSMATCH);
return;
}
Room room = this.fus.createRoom(); Room room = this.fus.createRoom();
session.setRoom(room); session.setRoom(room);
session.joinCall(src, client); session.joinCall(src, client);