[ // Минимальная длина пароля. Для УЗ-1 — не менее 12 символов. 'min_length' => (int) env('SECURITY_PASSWORD_MIN_LENGTH', 12), // Требования к сложности. 'require_mixed_case' => env('SECURITY_PASSWORD_MIXED_CASE', true), 'require_numbers' => env('SECURITY_PASSWORD_NUMBERS', true), 'require_symbols' => env('SECURITY_PASSWORD_SYMBOLS', true), // Проверка по базе утёкших паролей (HIBP). В закрытом контуре отключить. 'check_compromised' => env('SECURITY_PASSWORD_UNCOMPROMISED', false), // Запрет повтора последних N паролей (история). 'history_limit' => (int) env('SECURITY_PASSWORD_HISTORY', 5), // Принудительная смена пароля каждые N дней (для УЗ-1 — 90). 'max_age_days' => (int) env('SECURITY_PASSWORD_MAX_AGE_DAYS', 90), ], /* |-------------------------------------------------------------------------- | Блокировка учётной записи (ИАФ.6, УПД.6) |-------------------------------------------------------------------------- */ 'lockout' => [ // Количество неудачных попыток до блокировки. 'max_attempts' => (int) env('SECURITY_LOCKOUT_MAX_ATTEMPTS', 5), // Длительность блокировки в минутах. 'decay_minutes' => (int) env('SECURITY_LOCKOUT_DECAY_MINUTES', 30), ], /* |-------------------------------------------------------------------------- | Многофакторная аутентификация (ИАФ.4) |-------------------------------------------------------------------------- */ 'mfa' => [ // Обязательность MFA. Для УЗ-1 — true. 'required' => env('SECURITY_MFA_REQUIRED', true), // Количество резервных кодов восстановления. 'recovery_codes' => (int) env('SECURITY_MFA_RECOVERY_CODES', 8), ], /* |-------------------------------------------------------------------------- | Шифрование персональных данных (ЗНИ, ОЦЛ.2) |-------------------------------------------------------------------------- | | driver: laravel | gost | laravel — встроенный шифратор Laravel (AES-256-GCM); | gost — заглушка под СКЗИ КриптоПро CSP (ГОСТ Р 34.12-2015). | */ 'encryption' => [ 'driver' => env('SECURITY_PDN_CIPHER_DRIVER', 'laravel'), // Ключ для псевдонимизации (HMAC). Хранить отдельно от APP_KEY. 'pseudonym_key' => env('SECURITY_PSEUDONYM_KEY'), 'gost' => [ // Параметры подключения к внешнему СКЗИ (КриптоПро CSP и т.п.). 'binary' => env('SECURITY_GOST_BINARY', '/opt/cprocsp/bin/amd64/csptest'), 'container' => env('SECURITY_GOST_CONTAINER'), ], ], /* |-------------------------------------------------------------------------- | HTTP-заголовки безопасности (ЗИС.* ) |-------------------------------------------------------------------------- */ 'headers' => [ 'hsts_max_age' => (int) env('SECURITY_HSTS_MAX_AGE', 31536000), 'csp' => env( 'SECURITY_CSP', "default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'none'; base-uri 'self'" ), ], /* |-------------------------------------------------------------------------- | Ограничение доступа по IP (УПД.* , опционально) |-------------------------------------------------------------------------- */ 'ip_whitelist' => [ 'enabled' => env('SECURITY_IP_WHITELIST_ENABLED', false), // Список через запятую в .env: SECURITY_IP_WHITELIST="10.0.0.0/8,192.168.1.5" 'ranges' => array_filter(explode(',', (string) env('SECURITY_IP_WHITELIST', ''))), ], ];