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

113
config/security.php Normal file
View File

@@ -0,0 +1,113 @@
<?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', ''))),
],
];