6.5 KiB
Защищённый шаблон Laravel для ИСПДн (ФСТЭК №21, УЗ-1 / К1)
Шаблон веб-приложения на Laravel 13 для обработки персональных данных с реализацией технических мер защиты по приказу ФСТЭК России №21, 152-ФЗ и с учётом требований ФСБ (приказ №378) к криптографической защите.
⚠️ Важно. Соответствие УЗ-1/К1 достигается только сочетанием технических мер (этот код), инфраструктурных мер (ОС, сеть, СКЗИ, антивирус, СОВ) и организационных мер (политики, регламенты, модель угроз, аттестация). Шаблон закрывает прикладной (программный) уровень и даёт заготовки для остального. См. 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/checklist.md.
Фронтенд
Inertia.js v3 + Vue 3 + NaiveUI (движок перенесён из проекта onboard:
тема по системным настройкам, discrete API, диалоги, индикатор загрузки) +
Pinia. HTTP — встроенными средствами Inertia (useForm/useHttp), без
axios. Готовая страница входа и каркас кабинета в resources/js/pages,
layouts, components. Подробнее — в CLAUDE.md.
Требования
- PHP 8.3+, расширения:
pdo_pgsql,mbstring,openssl,redis - PostgreSQL 14+ (основная БД и отдельная БД журнала аудита)
- Redis (сессии, кэш, очереди)
- Node.js 20+ (сборка фронтенда)
Быстрый старт (локально)
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
- Заполните
.envпо образцу.env.example(PostgreSQL, Redis, секреты из хранилища,APP_DEBUG=false,APP_ENV=production). - Сгенерируйте ключи:
php artisan key:generate, а такжеAUDIT_HMAC_KEYиSECURITY_PSEUDONYM_KEY(напримерphp artisan key:generate --show). - Примените миграции основной и аудит-БД (см. выше).
- Выдайте учётной записи приложения к аудит-БД только права INSERT/SELECT — database/sql/audit_grants.sql.
- Настройте TLS и заголовки на Nginx — deploy/nginx/app.conf.
- Настройте регламентные задачи (
php artisan schedule:work/ cron) — проверка целостности журнала, ротация, аудит зависимостей. - Инфраструктура: антивирус (ЗАВ), СОВ (СОВ), сегментация сети (ЗИС.1), hardening ОС/PHP (УКФ.1), полнодисковое шифрование (ЗНИ.1).
Пример docker-стенда — deploy/docker-compose.yml.
Криптография по ГОСТ (ФСБ №378)
Встроенный AES-256-GCM не является сертифицированным СКЗИ. Для государственных ИСПДн переключите драйвер на ГОСТ и подключите КриптоПро CSP / VipNet — см. docs/security/crypto-gost.md.
Организационные документы
Технические меры без организационных не дают соответствия. Шаблоны документов — в docs/org/ (политика обработки ПДн, модель угроз, регламент реагирования на инциденты, перечень регистрируемых событий, акт классификации).
Проверки качества и безопасности
composer lint # Pint (стиль кода)
./vendor/bin/phpstan # Larastan (статический анализ)
./vendor/bin/pest # тесты, включая тесты мер защиты
composer audit # уязвимости зависимостей (УКФ.4)