first commit
This commit is contained in:
103
README.md
Normal file
103
README.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# Защищённый шаблон 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)
|
||||
```
|
||||
Reference in New Issue
Block a user