5.9 KiB
5.9 KiB
10. Безопасность и приватность
1. Идентификаторы
- Все
id— UUID. В URL, API и консоли браузера нет последовательных номеров. - Номера заказов, ключей, платежей и реферальные коды — случайные строки (алфавит Crockford base32, без похожих символов).
2. Секреты
- Секреты — только в
.envсвоего окружения, права 600, вне git: строка подключения к базе, секрет сессий и кодов, ключ шифрования полей, ключ ALTCHA, ключи платёжных систем, токены ботов. - Чувствительные поля в базе шифруются приложением (AES-256-GCM): содержимое подключений (конфиги WG, ссылки подписок), SMTP-пароль, id сохранённых карт у провайдера.
- Для prod ключи свои, не такие, как в dev.
3. Админка
- Только на
plc.veilix.ccиdev.plc.veilix.cc, вход только с разрешённых IP (nginx). - Роли owner, admin, support, content (03-data-model.md, раздел 10). Поле
debugCodeжурнала писем видят только owner и admin. - Блокировка после 5 неудачных попыток входа.
- Денежные операции, выдача и блокировка ключей, объединение аккаунтов пишутся в журнал действий. Журнал нельзя изменить.
4. Пользователи
- Коды входа хранятся только как HMAC, проверяются за постоянное время, 5 попыток, 10 минут жизни.
- ALTCHA и лимиты по IP и email на запрос кода.
- Ответ на запрос кода не выдаёт, есть ли аккаунт.
- Токены сессий в базе — только SHA-256. Cookie —
HttpOnly,Secure,SameSite=Lax, привязаны к хосту. - CSRF:
SameSite=Lax, проверка Origin в server actions и своих POST-эндпоинтах. - Доступ к данным — правила Payload: пользователь видит только свои ключи, заказы, платежи и движения. Кабинет ходит в Local API с
overrideAccess: false. - Коды входа в журнале (05-auth.md, раздел 4) — только для тестирования. В prod выключено, включение видно в админке.
5. Платежи
- Номер карты никогда не попадает на наши серверы: только виджеты и страницы провайдеров.
- Вебхуки проверяются по подписи провайдера, повторная доставка не проводит платёж дважды.
- Деньги — целые числа, операции в транзакциях с блокировками (04-billing.md, раздел 14).
6. Приватность
- Храним минимум: email, Telegram, язык, валюту, история заказов и платежей.
- IP пользователей в базе не храним в открытом виде — только HMAC для сравнения (самоприглашения, лимиты). Логи nginx — ротация 14 дней.
- В списке приглашённых почта замаскирована:
m···@gmail.com. - Аналитика — Umami без cookies, данные не уходят третьим лицам.
- Что и зачем храним — в политике конфиденциальности (этап 1b).
7. Окружения
- Dev и prod — разные пользователи ОС (vx_dev и vx_prod), базы, роли и секреты. Dev закрыт от посторонних и от индексации.
- Сессии Claude и редактор работают под vx_dev и не имеют доступа к файлам, секретам, логам и базе prod. Под vx_prod нет ни редактора, ни ИИ-агентов, VSCode Remote под vx_prod не подключаем. Своего SSH-входа у vx_prod нет: под него заходят из root (
sudo -iu vx_prod). Код попадает в prod только через тег в Gitea и команду выкладки (02-architecture.md, раздел 5). - Umami работает под своим пользователем: уязвимость в нём не открывает доступ к секретам Veilix.
- В базу каждый пользователь ОС входит только своей ролью (
peerчерез Unix-сокет), паролей нет (09-infrastructure.md, раздел 5). - Порты приложений 3000 и 3100 слушают 127.0.0.1, к ним может подключиться любой пользователь сервера в обход ограничения по IP в nginx. Секретов это не открывает: админку защищает пароль с блокировкой после 5 попыток. Строже — правило nftables, которое пускает к порту prod только nginx (
www-data) и vx_prod (R-16).
8. Обновления
- Payload и Next.js выпускают исправления безопасности часто: проверять при каждом этапе, обновлять патч-версии.
pnpm auditперед выкладкой.