Провели аудит платформы перед публичным запуском. Нашли и исправили несколько серьезных проблем.
Платежи.
Обнаружили гонки в системе оплаты: при одновременных запросах средства могли захолдиться дважды или escrow мог освободиться повторно. Добавили атомарные блокировки на уровне базы данных. Теперь каждая платежная операция проходит через SELECT FOR UPDATE - второй параллельный запрос просто получает отказ вместо дублирования.
Также закрыли возможность отрицательного hold на кошельке, добавили проверку paymentSource при смене способа оплаты, защитили webhook от повторной обработки.
XSS.
Весь пользовательский HTML-контент (блог, сообщество, новости, документация) теперь проходит через sanitize-html. Скрипты, iframe, обработчики событий вырезаются автоматически. Разрешены только безопасные теги и атрибуты.
Загрузка файлов.
Убрали из разрешенных расширений для чата файлы с расширениями js, html, ts, py и другие исполняемые форматы. Оставили документы, изображения, архивы, аудио, видео.
Производительность.
Настроили nginx proxy_cache для изображений: аватарки, фото услуг, портфолио кэшируются на уровне nginx и отдаются за 1 мс вместо прохождения через Next.js и MinIO. Исправили Cache-Control для статических ассетов: JS и CSS теперь кэшируются с immutable на год вместо no-cache (раньше браузер скачивал их каждый раз заново).
Мониторинг.
Вместо внешних сервисов мониторинга сделали систему алертов через Telegram. Администраторы получают уведомления о новых пользователях, услугах на модерации, заказах, подписках. Модерацию можно проводить прямо из Telegram через inline-кнопки. Отдельный скрипт проверяет доступность платформы каждые 2 минуты и присылает алерт если сервер не отвечает.
