first commit

This commit is contained in:
brusnitsyn
2026-06-24 17:20:43 +09:00
commit 43499acf1c
165 changed files with 25929 additions and 0 deletions

125
.env.example Normal file
View File

@@ -0,0 +1,125 @@
###########################################################################
# ШАБЛОН ЗАЩИЩЁННОГО Laravel-ПРИЛОЖЕНИЯ (ФСТЭК №21, УЗ-1 / К1)
# Значения подобраны под production. Для локальной разработки см. README.
###########################################################################
APP_NAME="Защищённый сервис ПДн"
APP_ENV=production
APP_KEY=
# ВАЖНО (ОДТ.3/ЗИС): в production отладку отключаем — не раскрываем трассировку.
APP_DEBUG=false
APP_URL=https://example.local
APP_LOCALE=ru
APP_FALLBACK_LOCALE=ru
APP_FAKER_LOCALE=ru_RU
APP_MAINTENANCE_DRIVER=file
# Хранение паролей: bcrypt cost >= 12 (ИАФ.3)
BCRYPT_ROUNDS=12
###########################################################################
# Логирование. В production уровень не ниже warning, debug запрещён (ОДТ.3).
###########################################################################
LOG_CHANNEL=stack
LOG_STACK=daily
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=warning
###########################################################################
# Основная БД — PostgreSQL (раздел 10 гайда: изоляция, отдельный сегмент).
###########################################################################
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=app
DB_USERNAME=app
# Секрет хранить в Vault/Secret Manager, не в репозитории (ЗИС).
DB_PASSWORD=
###########################################################################
# Отдельная БД журнала аудита (РСБ.3). Учётка приложения — только INSERT.
###########################################################################
AUDIT_DB_CONNECTION=audit
AUDIT_DB_HOST=127.0.0.1
AUDIT_DB_PORT=5432
AUDIT_DB_DATABASE=app_audit
AUDIT_DB_USERNAME=app_audit_writer
AUDIT_DB_PASSWORD=
# Ключ HMAC-подписи записей журнала (отдельный от APP_KEY).
AUDIT_HMAC_KEY=
AUDIT_HASH_CHAIN=true
AUDIT_RETENTION_DAYS=1095
AUDIT_SIEM_ENABLED=false
AUDIT_SIEM_CHANNEL=siem
###########################################################################
# Сессии (ИАФ.5). Для УЗ-1: 30 минут, secure, http_only, same_site=strict.
###########################################################################
SESSION_DRIVER=redis
SESSION_LIFETIME=30
SESSION_EXPIRE_ON_CLOSE=true
SESSION_ENCRYPT=true
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true
SESSION_SAME_SITE=strict
SESSION_PATH=/
SESSION_DOMAIN=null
BROADCAST_CONNECTION=log
FILESYSTEM_DISK=local
QUEUE_CONNECTION=redis
CACHE_STORE=redis
###########################################################################
# Redis (сессии, кэш, очереди). Пароль обязателен.
###########################################################################
REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=
REDIS_PORT=6379
MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_FROM_ADDRESS="noreply@example.local"
MAIL_FROM_NAME="${APP_NAME}"
###########################################################################
# Параметры мер защиты (config/security.php)
###########################################################################
# Парольная политика (ИАФ.3)
SECURITY_PASSWORD_MIN_LENGTH=12
SECURITY_PASSWORD_MIXED_CASE=true
SECURITY_PASSWORD_NUMBERS=true
SECURITY_PASSWORD_SYMBOLS=true
SECURITY_PASSWORD_UNCOMPROMISED=false
SECURITY_PASSWORD_HISTORY=5
SECURITY_PASSWORD_MAX_AGE_DAYS=90
# Блокировка после неудачных попыток (ИАФ.6)
SECURITY_LOCKOUT_MAX_ATTEMPTS=5
SECURITY_LOCKOUT_DECAY_MINUTES=30
# Многофакторная аутентификация (ИАФ.4)
SECURITY_MFA_REQUIRED=true
SECURITY_MFA_RECOVERY_CODES=8
# Шифрование ПДн (ЗНИ). driver: laravel | gost
SECURITY_PDN_CIPHER_DRIVER=laravel
SECURITY_PSEUDONYM_KEY=
# Для драйвера gost (КриптоПро CSP):
SECURITY_GOST_BINARY=/opt/cprocsp/bin/amd64/csptest
SECURITY_GOST_CONTAINER=
# Заголовки безопасности (ЗИС)
SECURITY_HSTS_MAX_AGE=31536000
# Ограничение доступа по IP (опционально)
SECURITY_IP_WHITELIST_ENABLED=false
SECURITY_IP_WHITELIST=
VITE_APP_NAME="${APP_NAME}"