first commit
This commit is contained in:
79
CLAUDE.md
Normal file
79
CLAUDE.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# 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`, `<Form>`. **axios не используется** — не добавлять.
|
||||
- **UI: NaiveUI** (перенесён движок из проекта onboard). Подключение в
|
||||
`resources/js/app.ts`: провайдеры `NConfigProvider`/`NLoadingBar`/`NDialog`/
|
||||
`NNotification`/`NMessage` оборачивают приложение; тема следует системной
|
||||
(`plugins/naive.ts → preferredTheme`). Discrete API доступен как
|
||||
`window.$message`/`$notification`/`$dialog`/`$loadingBar` и через `this.$...`.
|
||||
- **Pinia** подключён (для сторов состояния).
|
||||
- Структура: `resources/js/{pages,layouts,components,composables,plugins}`.
|
||||
Макеты: `layouts/AuthLayout.vue` (страницы входа), `layouts/AppLayout.vue`
|
||||
(общий каркас с шапкой и индикатором загрузки).
|
||||
- Composables: `useGlobalLoading` (баннер на переходах Inertia),
|
||||
`useNotification`, `useAppDialog` (+`AppDialog`/`AppDialogManager`).
|
||||
- Шрифт Golos Text (`public/fonts`, `@font-face` в `resources/css/app.css`).
|
||||
- Проверки фронтенда: `npm run lint:check`, `npm run types:check`, `npm run build`.
|
||||
|
||||
## Документация
|
||||
|
||||
- `docs/security/compliance.md` — сопоставление мер ФСТЭК с кодом.
|
||||
- `docs/security/checklist.md` — чек-лист со статусами.
|
||||
- `docs/security/crypto-gost.md` — подключение СКЗИ (ГОСТ/КриптоПро).
|
||||
- `docs/org/` — шаблоны организационных документов.
|
||||
- `deploy/` — nginx (TLS/заголовки), docker-compose, Dockerfile, fail2ban.
|
||||
- `database/sql/audit_grants.sql` — права INSERT/SELECT для журнала (РСБ.3).
|
||||
Reference in New Issue
Block a user