fix: закрыть IDOR в бронях, пароль админа и обработку callback_data (PRJ-3)
- IDOR: отмена/редактирование брони только владельцем (проверка user_id) - пароль админа: убран дефолт admin123, обязателен из env; сравнение через hmac.compare_digest; TTL сессии 1ч - callback_data: безопасный парсинг int + .get() вместо прямого индексирования (KeyError/ValueError)
This commit is contained in:
+10
-2
@@ -61,7 +61,11 @@ async def start_booking(message: Message, state: FSMContext):
|
||||
async def choose_service(callback: CallbackQuery, state: FSMContext):
|
||||
from app.config import SERVICES
|
||||
|
||||
service_name = SERVICES[callback.data]
|
||||
service_name = SERVICES.get(callback.data)
|
||||
if not service_name:
|
||||
await callback.answer("Услуга не найдена")
|
||||
return
|
||||
|
||||
logger.debug("User {uid} selected first service: {srv}", uid=callback.from_user.id, srv=service_name)
|
||||
|
||||
await state.update_data(service=service_name, extra_services=[])
|
||||
@@ -133,7 +137,11 @@ async def choose_extra_service(callback: CallbackQuery, state: FSMContext):
|
||||
async def choose_master(callback: CallbackQuery, state: FSMContext):
|
||||
from app.config import MASTERS
|
||||
|
||||
master_name = MASTERS[callback.data]
|
||||
master_name = MASTERS.get(callback.data)
|
||||
if not master_name:
|
||||
await callback.answer("Мастер не найден")
|
||||
return
|
||||
|
||||
logger.debug("User {uid} selected master: {m}", uid=callback.from_user.id, m=master_name)
|
||||
|
||||
await state.update_data(master=master_name)
|
||||
|
||||
Reference in New Issue
Block a user