Files
Bridge-and-Join-s/modules/lk/relay-php
zuevav 3bb5e79272 Безопасность: остаток аудита — L2b, L3, L6, L7, L8, L10, L11, M4
- L2b: CSRF для изменяющих запросов админки — проверка Origin (иначе Referer)
  против Host на всех не-GET под /admin (sameOriginRequest в authMiddleware);
  за loopback-прокси учитывается X-Forwarded-Host. Второй слой поверх
  SameSite=Lax, без правки десятков форм настроек.
- L3: /back-to-admin меняет состояние — только POST + csrfOK (форма уже с токеном,
  проверки в обработчике не было).
- L6: EXEC процедуры DEPO по имени из настроек — через execProc с проверкой
  идентификатора (sqlident.go, см. коммит строчных событий).
- L7: сессия просмотра (impersonate) снимает IsAdmin цели — сотрудник не действует
  от имени другого администратора; свои действия — из своей сессии.
- L8: bootstrap администратора кабинета под замком lkBootstrapMu — два
  параллельных запроса не заведут двух админов (TOCTOU).
- L10: allowlist перезапуска служб не пропускает пустое имя.
- L11: ретранслятор — лимит тела проверяется по Content-Length до чтения и
  чтение ограничено RELAY_MAX_BODY+1.
- M4: .htaccess дополнительно запрещает *.lock (код установки), если данные
  оказались в веб-корне; nginx-запрет /data уже в README.

L4 (привязка сессии к сети по умолчанию выкл.) и L9 (косметическая cookie
bj_lk_admin, арбитр — ядро) оставлены как есть, отмечены в отчёте.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-22 16:28:14 +03:00
..

Личный кабинет клиента депозитария — версия для обычного хостинга (PHP)
=========================================================================

Что это. Кабинет ничего не рисует и не хранит сам: страницы собирает ядро bj-server
депозитария, а этот файл только передаёт запросы браузера ядру и ответы обратно.
Поэтому на хостинге нет ни базы данных, ни данных клиентов — только способ связи с ядром.

Что нужно от хостинга: PHP 8.1 или новее, расширения curl и sqlite (pdo_sqlite),
возможность создать домен/поддомен с сертификатом (Let's Encrypt в панели хостинга).

Установка:
  1. Создайте в панели хостинга домен, например lk.депозитарий.ru, и включите https.
  2. Скопируйте в каталог домена файлы index.php и .htaccess (например, по FTP или через
     файловый менеджер панели).
  3. Откройте https://lk.депозитарий.ru — запустится установщик: проверит сервер, спросит
     способ связи с ядром и ключ доступа, проверит связь и предложит завести
     администратора кабинета.

Способы связи с ядром:
  • Кабинет обращается к ядру — если у ядра есть адрес, доступный с хостинга (https).
  • Ядро подключается к кабинету — если у ядра нет адреса в интернете. Тогда в настройках
    ядра («Кабинет клиента») выберите «Ядро подключается к кабинету» и укажите адрес сайта.
    Ядро само дозвонится и заберёт запросы; входящих портов не нужно. Нужно расширение
    sqlite — очередь запросов лежит в файле.

Где лежат настройки: каталог bj-lk-data рядом с каталогом сайта (если хостинг разрешает
писать туда), иначе подкаталог data внутри сайта, закрытый правилами .htaccess. Файл
config.php содержит ключ доступа; чтобы пройти установку заново — удалите его.

Если у хостинга nginx без поддержки .htaccess: направьте все адреса на index.php
(try_files $uri /index.php?$query_string;) и закройте каталог data (location /data { deny all; }).
Лучше создать каталог bj-lk-data рядом с сайтом — тогда внутри сайта данных не будет.

Безопасность: заголовки защиты, куки и правила форм выставляет ядро — ретранслятор
передаёт их без изменений и ничего не пишет в журнал. Клиентам публикуйте кабинет только
по https.