Files
andreypr207andClaude Opus 5.5 20491d1ba4 Этап 1b: сайт
- Страницы обоих брендов из блоков Payload (D-029): главная, цены,
  локации, поддержка, 4 юридические, 404 и 500. Коллекции pages
  (черновики и версии) и faq с местами показа, 12 типов блоков; поля
  sites — почта и Telegram поддержки, часы работы, SEO по умолчанию.
- Карта и глобус рисуются на сервере (d3-geo), контуры во внешнем
  SVG через <use>; выбор локации синхронизирован между картой и сеткой.
- Тексты сайта и юридические черновики на 5 языках: de, fr, es —
  перевод с глоссарием; seed создаёт страницы и FAQ, только если их
  нет, SEED_CONTENT=reset пересоздаёт.
- SEO: title и описания, canonical, hreflang с x-default,
  sitemap.xml и robots.txt на каждый домен, картинки для соцсетей.
- Статическая сборка и пересборка через revalidatePath из хуков
  Payload (D-030); /svc/internal/revalidate для проверки.
- 404 — статичная страница со статусом 404 через proxy; на сайте
  только опубликованные страницы.
- Производительность: Client Hints темы Payload только в админке,
  предзагрузка 2 файлов шрифтов вместо 6; Lighthouse mobile 97–99.
- Контраст --ink-3 по WCAG AA, радиокнопки вместо div role=button.
- Документация: итоги 1b, глоссарий de/fr/es, трактовки юридических
  черновиков подтверждены, переносимые вопросы — в этапах 3e–3h.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 04:53:15 +02:00

6.6 KiB
Raw Permalink Blame History

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, раздел 10). Поле debugCode журнала писем видят только owner и admin.
  3. Блокировка после 5 неудачных попыток входа.
  4. Денежные операции, выдача и блокировка ключей, объединение аккаунтов пишутся в журнал действий. Журнал нельзя изменить.
  5. GraphQL Payload выключен. Телеметрия Next.js и Payload выключена.
  6. Служебные эндпоинты /svc/internal/domains (домены для proxy) и /svc/internal/revalidate (пересборка маркетинговых страниц) отвечают только с токеном 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, раздел 4) — только для тестирования. В prod выключено, включение видно в админке.

5. Платежи

  1. Номер карты никогда не попадает на наши серверы: только виджеты и страницы провайдеров.
  2. Вебхуки проверяются по подписи провайдера, повторная доставка не проводит платёж дважды.
  3. Деньги — целые числа, операции в транзакциях с блокировками (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, раздел 5).
  3. Umami работает под своим пользователем: уязвимость в нём не открывает доступ к секретам Veilix.
  4. В базу каждый пользователь ОС входит только своей ролью (peer через Unix-сокет), паролей нет (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 перед выкладкой.