- Новый порядок этапов (D-026): фаза 1 — концепт на dev без внешних сервисов (1b сайт, 1c вход, 1d ключи, 1e счёт и демо-оплата, 1f демо-выдача, 1g продления, 1h рефералы); фаза 2 — Telegram; фаза 3 — ALTCHA, ЮKassa, почта, Twenty, Chatwoot, Umami, выдача через API и публичный запуск; фаза 4 — звёзды и эквайринги. - Решения: демо-оплата по списку IP (D-027), выдача ключей через адаптер manual/demo/api (D-028), страницы сайта из блоков Payload (D-029), пересборка через revalidatePath (D-030), RU-адрес у mass (D-031), счётчик свободных серверов (D-032), переводы на 5 языков в каждом этапе (D-033). - Тексты описывают работающий продукт; Вейликс — выделенный IP на общем сервере; Telegram поддержки — @veilix_support; сроки ответа не обещаем; VPN-серверы не ведут журналов. - Ссылки на этапы во всех документах, Q-12 решён (ЮKassa для RUB), R-19 (библиотеки для headless Chromium) сделано. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
60 lines
6.5 KiB
Markdown
60 lines
6.5 KiB
Markdown
# 10. Безопасность и приватность
|
||
|
||
## 1. Идентификаторы
|
||
|
||
1. Все `id` — UUID. В URL, API и консоли браузера нет последовательных номеров.
|
||
2. Номера заказов, ключей, платежей и реферальные коды — случайные строки (алфавит Crockford base32, без похожих символов).
|
||
|
||
## 2. Секреты
|
||
|
||
1. Секреты — только в `.env` своего окружения, права 600, вне git: строка подключения к базе, секрет сессий и кодов, ключ шифрования полей, ключ ALTCHA, ключи платёжных систем, токены ботов.
|
||
2. Чувствительные поля в базе шифруются приложением (AES-256-GCM): содержимое подключений (конфиги WG, ссылки подписок), SMTP-пароль, id сохранённых карт у провайдера.
|
||
3. Для prod ключи свои, не такие, как в dev.
|
||
|
||
## 3. Админка
|
||
|
||
1. Только на `plc.veilix.cc` и `dev.plc.veilix.cc`, вход только с разрешённых IP (nginx).
|
||
2. Роли owner, admin, support, content ([03-data-model.md](03-data-model.md), раздел 10). Поле `debugCode` журнала писем видят только owner и admin.
|
||
3. Блокировка после 5 неудачных попыток входа.
|
||
4. Денежные операции, выдача и блокировка ключей, объединение аккаунтов пишутся в журнал действий. Журнал нельзя изменить.
|
||
5. GraphQL Payload выключен. Телеметрия Next.js и Payload выключена.
|
||
6. Служебный эндпоинт `/svc/internal/domains` отвечает только с токеном `INTERNAL_TOKEN` из `.env`, иначе 404. Cookie администратора — только по HTTPS.
|
||
|
||
## 4. Пользователи
|
||
|
||
1. Коды входа хранятся только как HMAC, проверяются за постоянное время, 5 попыток, 10 минут жизни.
|
||
2. Лимиты по IP и email на запрос кода; ALTCHA — с этапа 3a.
|
||
3. Ответ на запрос кода не выдаёт, есть ли аккаунт.
|
||
4. Токены сессий в базе — только SHA-256. Cookie — `HttpOnly`, `Secure`, `SameSite=Lax`, привязаны к хосту.
|
||
5. CSRF: `SameSite=Lax`, проверка Origin в server actions и своих POST-эндпоинтах.
|
||
6. Доступ к данным — правила Payload: пользователь видит только свои ключи, заказы, платежи и движения. Кабинет ходит в Local API с `overrideAccess: false`.
|
||
7. Коды входа в журнале ([05-auth.md](05-auth.md), раздел 4) — только для тестирования. В prod выключено, включение видно в админке.
|
||
|
||
## 5. Платежи
|
||
|
||
1. Номер карты никогда не попадает на наши серверы: только виджеты и страницы провайдеров.
|
||
2. Вебхуки проверяются по подписи провайдера, повторная доставка не проводит платёж дважды.
|
||
3. Деньги — целые числа, операции в транзакциях с блокировками ([04-billing.md](04-billing.md), раздел 14).
|
||
|
||
## 6. Приватность
|
||
|
||
1. Храним минимум: email, Telegram, язык, валюту, история заказов и платежей.
|
||
2. IP пользователей в базе не храним в открытом виде — только HMAC для сравнения (самоприглашения, лимиты). Логи nginx — ротация 14 дней.
|
||
3. В списке приглашённых почта замаскирована: `m···@gmail.com`.
|
||
4. Аналитика — Umami без cookies, данные не уходят третьим лицам.
|
||
5. VPN-серверы не ведут журналов трафика и подключений: так сказано в политике конфиденциальности, и выдача через API (этап 3g) это соблюдает.
|
||
6. Что и зачем храним — в политике конфиденциальности (этап 1b).
|
||
|
||
## 7. Окружения
|
||
|
||
1. Dev и prod — разные пользователи ОС (vx_dev и vx_prod), базы, роли и секреты. Dev закрыт от посторонних и от индексации.
|
||
2. Сессии Claude и редактор работают под vx_dev и не имеют доступа к файлам, секретам, логам и базе prod. Под vx_prod нет ни редактора, ни ИИ-агентов, VSCode Remote под vx_prod не подключаем. Своего SSH-входа у vx_prod нет: под него заходят из root (`sudo -iu vx_prod`). Код попадает в prod только через тег в Gitea и команду выкладки ([02-architecture.md](02-architecture.md), раздел 5).
|
||
3. Umami работает под своим пользователем: уязвимость в нём не открывает доступ к секретам Veilix.
|
||
4. В базу каждый пользователь ОС входит только своей ролью (`peer` через Unix-сокет), паролей нет ([09-infrastructure.md](09-infrastructure.md), раздел 5).
|
||
5. Порты приложений 3000 и 3100 слушают 127.0.0.1, к ним может подключиться любой пользователь сервера в обход ограничения по IP в nginx. Секретов это не открывает: админку защищает пароль с блокировкой после 5 попыток. Строже — правило nftables, которое пускает к порту prod только nginx (`www-data`) и vx_prod (R-16).
|
||
|
||
## 8. Обновления
|
||
|
||
1. Payload и Next.js выпускают исправления безопасности часто: проверять при каждом этапе, обновлять патч-версии.
|
||
2. `pnpm audit` перед выкладкой.
|