krona-staff/docs/AUDIT-REMEDIATION-2026-09-18.md
Ochenstarik 7c8e7fcaf1
Some checks are pending
ci / verify (push) Waiting to run
fix: close terminal audit findings
2026-09-18 01:34:36 +07:00

5.2 KiB
Raw Permalink Blame History

Устранение замечаний аудита 2026-09-18

Исходный отчёт проверял ревизию 14ed610. Исправления подготовлены после b88ff91.

Исправлено

  • №1–5: регистрация отпечатка отменяется при блокировке, смене сотрудника и через 60 секунд; повторный палец отклоняется; поток захвата корректно завершается; связь контролируется и восстанавливается автоматически.
  • №2–3, №27: повреждённое состояние обрабатывается fail-closed, ведутся три резервные копии, записи сериализованы и принудительно сбрасываются на диск, фоновые ошибки журналируются, crash.log ротируется.
  • №6–8: роли мигратора и приложения разделены; runtime-роль имеет NOSUPERUSER NOBYPASSRLS; пароли согласованы; мигратор использует schema_migrations, advisory lock и откатывает только последнюю миграцию после явного подтверждения.
  • №9–12: отметка обычного сотрудника не теряется при открытом диалоге администратора; PIN усилен и защищён задержкой; второй экземпляр перенаправляет активацию первому; дубликат пальца запрещён.
  • №13–14: журнал экспортируется в CSV, имеет ограничение размера и восстановимые резервные копии; уход после полуночи определяется по настраиваемой максимальной длительности смены.
  • №15–20: readiness возвращает 503 без деталей; маршруты соответствуют /api/v1/staff; OpenAPI сравнивается с runtime; пул БД обрабатывает ошибки; добавлен реальный RLS-тест двух tenant; audit log доступен runtime только на чтение/добавление; outbox хранит subject/actor; Redis-зависимости удалены до появления сценария.
  • №21–23, №25–29, №31–33: автозапуск открывает приложение в трее и не сохраняет Debug-путь; новый профиль не включает автозагрузку без решения администратора; защита последнего администратора исправлена; PIN совместим со старыми значениями; публичные имена по умолчанию маскируются; проект только x64; manifest очищен; correlation ID проверяется как ULID; версия синхронизируется проверкой; graceful shutdown имеет таймаут; standalone запрещён в production; базовые Docker-образы закреплены digest.
  • npm-зависимости обновлены: npm audit сообщает 0 уязвимостей. Форматирование включено в CI.

Осознанно сохранено

  • №24: повторная авторизация перед удалением отпечатков, сотрудников и журнала сохранена по прямому требованию владельца.
  • №30: EULA ZKTeco добавлена рядом с DLL. Автоматическая Windows-сборка и подпись требуют Windows runner и сертификат подписи; этих ресурсов в текущем Forgejo окружении нет.

Требует решения владельца, не является локальным исправлением кода

  • A1: окончательный контракт терминала как edge-клиента Staff и серверная синхронизация вместо постоянного локального source of truth.
  • A2: письменные согласия на биометрию, сроки хранения, правовое основание передачи уведомлений и политика трансграничной передачи должны быть утверждены с юристом.

Проверка

  • npm run check — пройдено.
  • npm run format:check — пройдено.
  • npm audit --audit-level=moderate — 0 уязвимостей.
  • dotnet build apps/KronaStaffTerminal/KronaStaffTerminal.csproj -c Release -p:Platform=x64 — 0 ошибок и 0 предупреждений.
  • PostgreSQL/Docker up/down и реальный RLS-тест добавлены в CI, но локально не запускались: Docker и PostgreSQL на машине разработки отсутствуют.