MAX: исправление уязвимости с избранными

This commit is contained in:
Alexey Polyakov
2026-05-09 17:55:39 +03:00
parent dff6937da8
commit ddb810589f
5 changed files with 21 additions and 19 deletions

View File

@@ -204,21 +204,22 @@ class Tools:
if include_favourites: if include_favourites:
# Получаем последнее сообщение из избранного # Получаем последнее сообщение из избранного
favouriteChatId = -senderId
message, messageTime = await self.get_last_message( message, messageTime = await self.get_last_message(
senderId, db_pool, protocol_type=protocol_type favouriteChatId, db_pool, protocol_type=protocol_type
) )
# ID избранного # ID избранного для клиента
chatId = senderId ^ senderId chatId = senderId ^ senderId
# Получаем последнюю активность участника (отправителя) в избранном # Получаем последнюю активность в избранном
participants = await self.get_participant_last_activity( participants = await self.get_participant_last_activity(
senderId, [senderId], db_pool favouriteChatId, [senderId], db_pool
) )
# Получаем ID предыдущего сообщения для избранного (чат ID = senderId) # Получаем ID предыдущего сообщения для избранного
prevMessageId = await self.get_previous_message_id( prevMessageId = await self.get_previous_message_id(
senderId, db_pool, protocol_type=protocol_type favouriteChatId, db_pool, protocol_type=protocol_type
) )
# Хардкодим в лист чатов избранное # Хардкодим в лист чатов избранное

View File

@@ -23,16 +23,17 @@ class HistoryProcessors(BaseProcessor):
messages = [] messages = []
# Если пользователь хочет получить историю из избранного, # Если пользователь хочет получить историю из избранного,
# то выставляем в качестве ID чата его ID # то выставляем в качестве ID чата отрицательный ID отправителя
if chatId == (senderId ^ senderId): isFavourite = chatId == (senderId ^ senderId)
chatId = senderId if isFavourite:
chatId = -senderId
# Проверяем, существует ли чат # Проверяем, существует ли чат
async with self.db_pool.acquire() as conn: async with self.db_pool.acquire() as conn:
async with conn.cursor() as cursor: async with conn.cursor() as cursor:
# Проверяем состоит ли пользователь в чате, # Проверяем состоит ли пользователь в чате,
# только в случае того, если это не избранное # только в случае того, если это не избранное
if chatId != senderId: if not isFavourite:
await cursor.execute("SELECT * FROM chats WHERE id = %s", (chatId,)) await cursor.execute("SELECT * FROM chats WHERE id = %s", (chatId,))
chat = await cursor.fetchone() chat = await cursor.fetchone()

View File

@@ -88,9 +88,9 @@ class MessagesProcessors(BaseProcessor):
chatId = userId ^ senderId chatId = userId ^ senderId
# Если клиент хочет отправить сообщение в избранное, # Если клиент хочет отправить сообщение в избранное,
# то выставляем в качестве ID чата ID отправителя # то выставляем в качестве ID чата отрицательный ID отправителя
if chatId == (senderId ^ senderId): if chatId == (senderId ^ senderId):
chatId = senderId chatId = -senderId
participants = [senderId] participants = [senderId]
else: else:
# Если все таки клиент хочет отправить сообщение в нормальный чат, # Если все таки клиент хочет отправить сообщение в нормальный чат,
@@ -143,7 +143,7 @@ class MessagesProcessors(BaseProcessor):
participant, participant,
{ {
"eventType": "new_msg", "eventType": "new_msg",
"chatId": 0 if chatId == (senderId ^ senderId) else chatId, "chatId": 0 if chatId == -senderId else chatId,
"message": bodyMessage, "message": bodyMessage,
"prevMessageId": lastMessageId, "prevMessageId": lastMessageId,
"time": messageTime, "time": messageTime,
@@ -153,7 +153,7 @@ class MessagesProcessors(BaseProcessor):
# Данные пакета # Данные пакета
payload = { payload = {
"chatId": 0 if chatId == senderId else chatId, "chatId": 0 if chatId == -senderId else chatId,
"message": bodyMessage, "message": bodyMessage,
"unread": 0, "unread": 0,
"mark": messageTime "mark": messageTime

View File

@@ -223,12 +223,12 @@ class SearchProcessors(BaseProcessor):
) )
) )
else: else:
# Получаем последнее сообщение из чата # Получаем последнее сообщение из избранного
message, messageTime = await self.tools.get_last_message( message, messageTime = await self.tools.get_last_message(
senderId, self.db_pool, protocol_type=self.type -senderId, self.db_pool, protocol_type=self.type
) )
# ID избранного # ID избранного для клиента
chatId = senderId ^ senderId chatId = senderId ^ senderId
# Добавляем чат в список # Добавляем чат в список

View File

@@ -135,7 +135,7 @@ class MessagesProcessors(BaseProcessor):
participant, participant,
{ {
"eventType": "new_msg", "eventType": "new_msg",
"chatId": 0 if chatId == senderId else chatId, "chatId": chatId,
"message": bodyMessage, "message": bodyMessage,
"prevMessageId": lastMessageId, "prevMessageId": lastMessageId,
"time": messageTime, "time": messageTime,
@@ -145,7 +145,7 @@ class MessagesProcessors(BaseProcessor):
# Данные пакета # Данные пакета
payload = { payload = {
"chatId": 0 if chatId == senderId else chatId, "chatId": chatId,
"message": bodyMessage, "message": bodyMessage,
"unread": 0, "unread": 0,
"mark": messageTime "mark": messageTime