# CLAUDE.md Шаблон защищённого Laravel-приложения для ИСПДн (ФСТЭК №21, УЗ-1/К1; ФСБ №378). Используется как основа для новых проектов с персональными данными. ## Команды ```bash composer lint # Pint (стиль) ./vendor/bin/phpstan # Larastan, level 7 — держать 0 ошибок ./vendor/bin/pest # тесты (включая tests/Feature/Security) composer audit # уязвимости зависимостей npm run build # сборка фронтенда (нужна для рендера Inertia-страниц) php artisan migrate php artisan migrate --database=audit --path=database/migrations/audit php artisan db:seed # роли RBAC php artisan user:create-admin # создать администратора php artisan audit:verify # контроль целостности журнала (РСБ.3) php artisan audit:purge # ротация журнала по сроку (РСБ.4/8) php artisan security:audit-deps # composer audit (УКФ.4) ``` ## Архитектура безопасности (что где) - **Конфигурация мер:** `config/security.php`, `config/audit.php`. Все параметры через `.env` (пароли, lockout, MFA, шифрование, заголовки). - **Шифрование ПДн:** трейт `App\Models\Concerns\HasPdnEncryption` + свойство `$encrypted` в модели. Драйвер за интерфейсом `App\Services\Crypto\PdnCipher` (`LaravelAesCipher` / `GostCipher`), биндинг в `SecurityServiceProvider`. - **Аудит:** `App\Services\Audit\AuditService` (фасад `App\Facades\Audit`). Записи в отдельном соединении `audit`, подписаны HMAC + хеш-цепочка. Не писать ПДн в журнал — только идентификаторы объектов. - **Аутентификация:** контроллеры в `App\Http\Controllers\Auth`, блокировка в `LoginRequest`, MFA в `TwoFactorService`/`EnsureMfaIsVerified`, парольная политика в `App\Support\PasswordPolicy` + `PasswordManager` + `PasswordNotReused`. - **Доступ:** `spatie/laravel-permission` (роли в `RolesAndPermissionsSeeder`), Policies (`PersonalDataPolicy`). - **Middleware-стек защищённой зоны:** `auth` → `mfa` → `password.fresh` → `audit` (см. `routes/web.php`, алиасы в `bootstrap/app.php`). ## Конвенции - Любая новая модель с ПДн: `use HasPdnEncryption` + `$encrypted` + `checksum` (контроль целостности, ОЦЛ.2) + Policy (УПД.2) + регистрация просмотра/изменения через `Audit::log()` (РСБ.2). - Все операции, изменяющие/раскрывающие ПДн, должны журналироваться. Новые типы событий добавлять в `config/audit.php` и `docs/org/perechen-sobytiy.md`. - Валидация — только через Form Request. Пароли — через `PasswordPolicy::rule()`. - Не понижать меры: `APP_DEBUG=false`, TLS, MFA обязательны в production. - После изменений держать зелёными Pint, PHPStan (level 7), Pest. ## Фронтенд (Inertia v3 + Vue 3 + NaiveUI) - **Inertia v3** (`@inertiajs/vue3`). HTTP — встроенными хелперами: `useForm` (формы/редиректы, как на страницах входа), `useHttp` (JSON-эндпоинты), `router`, `