Files
laravel-gost-template/config/security.php
2026-06-24 17:20:43 +09:00

114 lines
5.1 KiB
PHP
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.

<?php
/*
|--------------------------------------------------------------------------
| Централизованные настройки безопасности (ФСТЭК №21, УЗ-1 / К1)
|--------------------------------------------------------------------------
|
| Файл собирает все параметры мер защиты в одном месте, чтобы их было
| удобно проверять при аттестации ИСПДн. Значения берутся из .env, чтобы
| настройки можно было менять без правки кода (мера УКФ.1).
|
*/
return [
/*
|--------------------------------------------------------------------------
| Парольная политика (ИАФ.3, УПД.5)
|--------------------------------------------------------------------------
*/
'password' => [
// Минимальная длина пароля. Для УЗ-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', ''))),
],
];