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:
# Получаем последнее сообщение из избранного
favouriteChatId = -senderId
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
# Получаем последнюю активность участника (отправителя) в избранном
# Получаем последнюю активность в избранном
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(
senderId, db_pool, protocol_type=protocol_type
favouriteChatId, db_pool, protocol_type=protocol_type
)
# Хардкодим в лист чатов избранное

View File

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

View File

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

View File

@@ -223,12 +223,12 @@ class SearchProcessors(BaseProcessor):
)
)
else:
# Получаем последнее сообщение из чата
# Получаем последнее сообщение из избранного
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
# Добавляем чат в список

View File

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