Files
laravel-gost-template/README.md
2026-06-24 17:20:43 +09:00

104 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Защищённый шаблон Laravel для ИСПДн (ФСТЭК №21, УЗ-1 / К1)
Шаблон веб-приложения на Laravel 13 для обработки персональных данных с
реализацией технических мер защиты по приказу ФСТЭК России №21, 152-ФЗ и
с учётом требований ФСБ (приказ №378) к криптографической защите.
> ⚠️ **Важно.** Соответствие УЗ-1/К1 достигается **только** сочетанием
> технических мер (этот код), инфраструктурных мер (ОС, сеть, СКЗИ, антивирус,
> СОВ) и организационных мер (политики, регламенты, модель угроз, аттестация).
> Шаблон закрывает прикладной (программный) уровень и даёт заготовки для
> остального. См. [docs/security/compliance.md](docs/security/compliance.md).
## Что реализовано в коде
| Область | Реализация | Меры ФСТЭК |
|---|---|---|
| Аутентификация | Вход с блокировкой после N попыток, регенерация сессии | ИАФ.1, ИАФ.6 |
| MFA (2ФА) | TOTP (`pragmarx/google2fa`) + резервные коды | ИАФ.4 |
| Парольная политика | ≥12 симв., сложность, история, срок действия 90 дней | ИАФ.3 |
| Управление доступом | RBAC (`spatie/laravel-permission`) + Policies | УПД.2, УПД.4, УПД.5 |
| Шифрование ПДн | Прозрачное шифрование полей (AES-256-GCM, драйвер ГОСТ) | ЗНИ, ЗИС.16 |
| Контроль целостности | Контрольные суммы записей ПДн | ОЦЛ.2 |
| Журнал аудита | Отдельная БД, HMAC-подпись + хеш-цепочка, SIEM | РСБ.2, РСБ.3, РСБ.7 |
| Защита транспорта | Принудительный HTTPS, HSTS, заголовки безопасности | ЗИС.9, ЗИС |
| Защита от атак | CSRF, throttling, валидация Form Request, CSP | ЗИС |
| Контроль конфигурации | `APP_DEBUG=false`, `composer audit` в CI | ОДТ.3, УКФ.4 |
Подробное сопоставление мер и кода — в
[docs/security/compliance.md](docs/security/compliance.md).
Чек-лист со статусами — в [docs/security/checklist.md](docs/security/checklist.md).
## Фронтенд
Inertia.js v3 + Vue 3 + **NaiveUI** (движок перенесён из проекта onboard:
тема по системным настройкам, discrete API, диалоги, индикатор загрузки) +
Pinia. HTTP — встроенными средствами Inertia (`useForm`/`useHttp`), **без
axios**. Готовая страница входа и каркас кабинета в `resources/js/pages`,
`layouts`, `components`. Подробнее — в [CLAUDE.md](CLAUDE.md).
## Требования
- PHP 8.3+, расширения: `pdo_pgsql`, `mbstring`, `openssl`, `redis`
- PostgreSQL 14+ (основная БД и отдельная БД журнала аудита)
- Redis (сессии, кэш, очереди)
- Node.js 20+ (сборка фронтенда)
## Быстрый старт (локально)
```bash
composer install
npm install
cp .env.example .env # либо используйте готовый .env для локалки
php artisan key:generate
# Локально работает на sqlite (см. .env). Создание схемы:
php artisan migrate
php artisan migrate --database=audit --path=database/migrations/audit
php artisan db:seed # базовые роли (RBAC)
# Администратор (мера УПД.1):
php artisan user:create-admin
npm run build # или: npm run dev
php artisan serve
```
## Развёртывание в production
1. Заполните `.env` по образцу `.env.example` (PostgreSQL, Redis, секреты из
хранилища, `APP_DEBUG=false`, `APP_ENV=production`).
2. Сгенерируйте ключи: `php artisan key:generate`, а также `AUDIT_HMAC_KEY` и
`SECURITY_PSEUDONYM_KEY` (например `php artisan key:generate --show`).
3. Примените миграции основной и аудит-БД (см. выше).
4. Выдайте учётной записи приложения к аудит-БД только права INSERT/SELECT —
[database/sql/audit_grants.sql](database/sql/audit_grants.sql).
5. Настройте TLS и заголовки на Nginx — [deploy/nginx/app.conf](deploy/nginx/app.conf).
6. Настройте регламентные задачи (`php artisan schedule:work` / cron) — проверка
целостности журнала, ротация, аудит зависимостей.
7. Инфраструктура: антивирус (ЗАВ), СОВ (СОВ), сегментация сети (ЗИС.1),
hardening ОС/PHP (УКФ.1), полнодисковое шифрование (ЗНИ.1).
Пример docker-стенда — [deploy/docker-compose.yml](deploy/docker-compose.yml).
## Криптография по ГОСТ (ФСБ №378)
Встроенный AES-256-GCM **не является сертифицированным СКЗИ**. Для
государственных ИСПДн переключите драйвер на ГОСТ и подключите КриптоПро CSP /
VipNet — см. [docs/security/crypto-gost.md](docs/security/crypto-gost.md).
## Организационные документы
Технические меры без организационных не дают соответствия. Шаблоны документов —
в [docs/org/](docs/org/) (политика обработки ПДн, модель угроз, регламент
реагирования на инциденты, перечень регистрируемых событий, акт классификации).
## Проверки качества и безопасности
```bash
composer lint # Pint (стиль кода)
./vendor/bin/phpstan # Larastan (статический анализ)
./vendor/bin/pest # тесты, включая тесты мер защиты
composer audit # уязвимости зависимостей (УКФ.4)
```