🔐 Безопасность системы

Назад к списку Редактировать
Информация
Slug:
security.html
Обновлено:
30.05.2026 15:03
Размер:
14.42 KB
Путь:
/resources/docs/developer/ security.html
Ссылки
Публичная ссылка:
Ссылка в админке:
🔐 Безопасность системы

⚠️ Внимание: Данный документ содержит конфиденциальную информацию о безопасности системы. Не распространяйте его за пределы команды разработки.

Архитектура безопасности

Многоуровневая система защиты DEXA:

1. Аутентификация

  • Multiple Guards: Раздельные сессии для пользователей и админов
  • bcrypt: Хеширование паролей с cost 12
  • Email подтверждение: Обязательно для пользователей
  • Токены: Для сброса пароля и верификации

2. Авторизация

  • RBAC: Ролевая модель (4 уровня)
  • Permission-based: Гранулярные права
  • Middleware: Проверка на каждом запросе

3. Защита данных

  • Шифрование: Чувствительные данные (API ключи)
  • Подготовленные запросы: Защита от SQL инъекций
  • CSRF токены: Все формы защищены
  • XSS защита: Экранирование вывода

Ролевая модель

Роль Описание Критические права Ограничения
Супер-админ Полный доступ, настройка системы Все права, редактирование других админов Только 1 пользователь (odeveloper@internet.ru)
Администратор Управление системой Создание пользователей, управление заявками Не может создавать супер-админов
Менеджер Операционная деятельность Обработка заявок, управление партнерами Нет доступа к системным настройкам
Модератор Просмотр и мониторинг Просмотр заявок и пользователей Только чтение, нет действий

Права доступа

Система модулей и действий:

Модуль Действия Описание
dashboard view Просмотр главной панели
orders view, create, edit, delete Управление заявками
currencies view, create, edit, delete Управление валютами
exchange-rates view, create, edit, delete Управление курсами
api-config view, create, edit, delete Настройка API
cities view, create, edit, delete Управление городами
partners view, create, edit, delete Управление партнерами
admins view, create, edit, delete Управление администраторами
users view, create, edit, delete Управление пользователями
settings view, edit Настройки системы
reports view Просмотр отчетов

Middleware безопасность

Основные middleware

// web.php - маршруты админки
Route::middleware(['set.admin.cookie', 'admin.auth'])->group(function () {
    // все защищенные маршруты
});

// Проверка прав
Route::middleware(['admin.permission:dashboard.view'])->group(function () {
    Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard');
});

Кастомные middleware

  • admin.auth: Проверка аутентификации админа
  • admin.permission: Проверка конкретного права
  • set.admin.cookie: Установка cookies для админки
  • profile.access: Доступ к профилю пользователя

Шифрование данных

Что шифруется

  • API ключи: В таблице exchange_apis
  • Secret ключи: Для аутентификации API
  • Токены: Верификации и сброса пароля

Методы шифрования

// Шифрование при сохранении
$data['api_key'] = encrypt($request->api_key);

// Дешифровка для использования
try {
    $apiKey = decrypt($apiConfig->api_key);
} catch (\Exception $e) {
    // Обработка ошибки
}

Защита от атак

SQL инъекции

  • Использование Eloquent ORM
  • Подготовленные запросы для сырых SQL
  • Валидация всех входных параметров

XSS (Межсайтовый скриптинг)

  • Экранирование вывода в Blade: {{ $data }}
  • HTML Purifier для контента страниц
  • Content Security Policy (в разработке)

CSRF (Межсайтовая подделка запроса)

  • Токены во всех формах
  • Проверка в VerifyCsrfToken middleware
  • Исключения только для API эндпоинтов

Сессионные атаки

  • Раздельные сессии для пользователей и админов
  • Регенерация ID сессии после входа
  • Таймауты неактивности

⚠️ Предупреждение: По умолчанию сессии хранятся в файлах. Для продакшена рекомендуется использовать Redis или базу данных.

Безопасность API

Rate Limiting

// Ограничение запросов к API
RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(60)->by($request->ip());
});

Валидация запросов

  • Проверка всех входных параметров
  • Валидация типов данных
  • Ограничение размеров данных

Безопасность файлов

Загрузка файлов

  • Валидация MIME типов
  • Ограничение размера файлов
  • Сканирование на вирусы (рекомендуется)
  • Хранение вне webroot

Пример валидации

// SettingController.php
'site_logo_file' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'site_favicon_file' => 'nullable|image|mimes:ico,png,jpg,gif,svg|max:1024',

Логирование безопасности

Что логируется

  • Попытки входа (успешные и неуспешные)
  • Изменение критических настроек
  • Действия с правами доступа
  • API запросы с ошибками
  • Подозрительная активность

Каналы логирования

// config/logging.php
'channels' => [
    'security' => [
        'driver' => 'daily',
        'path' => storage_path('logs/security.log'),
        'level' => 'warning',
        'days' => 30,
    ],
    'api' => [
        'driver' => 'daily',
        'path' => storage_path('logs/api.log'),
        'level' => 'info',
        'days' => 7,
    ],
],

Рекомендации для продакшена

🚨 Критически важно: Эти настройки должны быть выполнены перед запуском в продакшен.

1. Серверная безопасность

  • Использовать HTTPS с правильным SSL сертификатом
  • Настроить WAF (Web Application Firewall)
  • Регулярно обновлять ПО сервера
  • Использовать SELinux/AppArmor

2. Конфигурация Laravel

// .env для продакшена
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ваш-домен.com

# Безопасные cookies
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true

# Дополнительные настройки
LOG_LEVEL=error
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

3. База данных

  • Использовать отдельного пользователя для приложения
  • Ограничить права до минимума
  • Регулярные бэкапы
  • Шифрование данных на диске

4. Мониторинг

  • Настроить алерты на подозрительную активность
  • Мониторинг логов в реальном времени
  • Регулярные security аудиты
  • Penetration testing

Аварийные процедуры

При обнаружении уязвимости

  1. Немедленно изолировать систему
  2. Собрать доказательства (логи)
  3. Исправить уязвимость
  4. Уведомить пользователей при необходимости
  5. Сообщить в CERT при серьезных инцидентах

При компрометации данных

  1. Сбросить все пароли
  2. Отозвать все сессии
  3. Проверить целостность данных
  4. Уведомить регулятора (если требуется)

Контакты безопасности

  • Ответственный за безопасность: odeveloper@internet.ru
  • Экстренные случаи: Только через защищенные каналы
  • Баг-баунти: Не реализовано

ℹ️ Примечание: Эта документация должна регулярно обновляться в соответствии с изменениями в системе и новыми угрозами безопасности.

Последнее обновление: 30.05.2026 в 15:03
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>🔐 Безопасность системы</title>
    <style>
        body { font-family: Arial, sans-serif; line-height: 1.6; color: #333; padding: 20px; max-width: 1200px; margin: 0 auto; }
        h1 { color: #2c3e50; border-bottom: 2px solid #eee; padding-bottom: 10px; margin-bottom: 20px; }
        h2 { color: #34495e; border-bottom: 1px solid #eee; padding-bottom: 5px; margin-top: 30px; }
        h3 { color: #7f8c8d; margin-top: 25px; }
        p { margin-bottom: 15px; }
        ul, ol { margin-bottom: 15px; padding-left: 20px; }
        li { margin-bottom: 5px; }
        code { background-color: #f8f9fa; padding: 2px 6px; border-radius: 4px; font-family: monospace; }
        pre { background-color: #f8f9fa; padding: 15px; border-radius: 8px; overflow-x: auto; border: 1px solid #dee2e6; }
        .warning { background-color: #fff3cd; border: 1px solid #ffeaa7; padding: 15px; border-radius: 5px; margin: 15px 0; }
        .danger { background-color: #f8d7da; border: 1px solid #f5c6cb; padding: 15px; border-radius: 5px; margin: 15px 0; }
        .info { background-color: #d1ecf1; border: 1px solid #bee5eb; padding: 15px; border-radius: 5px; margin: 15px 0; }
        table { border-collapse: collapse; width: 100%; margin-bottom: 20px; }
        th, td { padding: 12px; border: 1px solid #dee2e6; }
        th { background-color: #f8f9fa; }
    </style>
</head>
<body>
<h1>🔐 Безопасность системы</h1>

<div class="info">
    <p><strong>⚠️ Внимание:</strong> Данный документ содержит конфиденциальную информацию о безопасности системы. Не распространяйте его за пределы команды разработки.</p>
</div>

<h2>Архитектура безопасности</h2>
<p>Многоуровневая система защиты DEXA:</p>

<h3>1. Аутентификация</h3>
<ul>
    <li><strong>Multiple Guards:</strong> Раздельные сессии для пользователей и админов</li>
    <li><strong>bcrypt:</strong> Хеширование паролей с cost 12</li>
    <li><strong>Email подтверждение:</strong> Обязательно для пользователей</li>
    <li><strong>Токены:</strong> Для сброса пароля и верификации</li>
</ul>

<h3>2. Авторизация</h3>
<ul>
    <li><strong>RBAC:</strong> Ролевая модель (4 уровня)</li>
    <li><strong>Permission-based:</strong> Гранулярные права</li>
    <li><strong>Middleware:</strong> Проверка на каждом запросе</li>
</ul>

<h3>3. Защита данных</h3>
<ul>
    <li><strong>Шифрование:</strong> Чувствительные данные (API ключи)</li>
    <li><strong>Подготовленные запросы:</strong> Защита от SQL инъекций</li>
    <li><strong>CSRF токены:</strong> Все формы защищены</li>
    <li><strong>XSS защита:</strong> Экранирование вывода</li>
</ul>

<h2>Ролевая модель</h2>
<table>
    <thead>
    <tr>
        <th>Роль</th>
        <th>Описание</th>
        <th>Критические права</th>
        <th>Ограничения</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td><strong>Супер-админ</strong></td>
        <td>Полный доступ, настройка системы</td>
        <td>Все права, редактирование других админов</td>
        <td>Только 1 пользователь (odeveloper@internet.ru)</td>
    </tr>
    <tr>
        <td><strong>Администратор</strong></td>
        <td>Управление системой</td>
        <td>Создание пользователей, управление заявками</td>
        <td>Не может создавать супер-админов</td>
    </tr>
    <tr>
        <td><strong>Менеджер</strong></td>
        <td>Операционная деятельность</td>
        <td>Обработка заявок, управление партнерами</td>
        <td>Нет доступа к системным настройкам</td>
    </tr>
    <tr>
        <td><strong>Модератор</strong></td>
        <td>Просмотр и мониторинг</td>
        <td>Просмотр заявок и пользователей</td>
        <td>Только чтение, нет действий</td>
    </tr>
    </tbody>
</table>

<h2>Права доступа</h2>
<p>Система модулей и действий:</p>

<table>
    <thead>
    <tr>
        <th>Модуль</th>
        <th>Действия</th>
        <th>Описание</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>dashboard</td>
        <td>view</td>
        <td>Просмотр главной панели</td>
    </tr>
    <tr>
        <td>orders</td>
        <td>view, create, edit, delete</td>
        <td>Управление заявками</td>
    </tr>
    <tr>
        <td>currencies</td>
        <td>view, create, edit, delete</td>
        <td>Управление валютами</td>
    </tr>
    <tr>
        <td>exchange-rates</td>
        <td>view, create, edit, delete</td>
        <td>Управление курсами</td>
    </tr>
    <tr>
        <td>api-config</td>
        <td>view, create, edit, delete</td>
        <td>Настройка API</td>
    </tr>
    <tr>
        <td>cities</td>
        <td>view, create, edit, delete</td>
        <td>Управление городами</td>
    </tr>
    <tr>
        <td>partners</td>
        <td>view, create, edit, delete</td>
        <td>Управление партнерами</td>
    </tr>
    <tr>
        <td>admins</td>
        <td>view, create, edit, delete</td>
        <td>Управление администраторами</td>
    </tr>
    <tr>
        <td>users</td>
        <td>view, create, edit, delete</td>
        <td>Управление пользователями</td>
    </tr>
    <tr>
        <td>settings</td>
        <td>view, edit</td>
        <td>Настройки системы</td>
    </tr>
    <tr>
        <td>reports</td>
        <td>view</td>
        <td>Просмотр отчетов</td>
    </tr>
    </tbody>
</table>

<h2>Middleware безопасность</h2>

<h3>Основные middleware</h3>
<pre><code>// web.php - маршруты админки
Route::middleware(['set.admin.cookie', 'admin.auth'])->group(function () {
    // все защищенные маршруты
});

// Проверка прав
Route::middleware(['admin.permission:dashboard.view'])->group(function () {
    Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard');
});</code></pre>

<h3>Кастомные middleware</h3>
<ul>
    <li><strong>admin.auth:</strong> Проверка аутентификации админа</li>
    <li><strong>admin.permission:</strong> Проверка конкретного права</li>
    <li><strong>set.admin.cookie:</strong> Установка cookies для админки</li>
    <li><strong>profile.access:</strong> Доступ к профилю пользователя</li>
</ul>

<h2>Шифрование данных</h2>

<h3>Что шифруется</h3>
<ul>
    <li><strong>API ключи:</strong> В таблице exchange_apis</li>
    <li><strong>Secret ключи:</strong> Для аутентификации API</li>
    <li><strong>Токены:</strong> Верификации и сброса пароля</li>
</ul>

<h3>Методы шифрования</h3>
<pre><code>// Шифрование при сохранении
$data['api_key'] = encrypt($request->api_key);

// Дешифровка для использования
try {
    $apiKey = decrypt($apiConfig->api_key);
} catch (\Exception $e) {
    // Обработка ошибки
}</code></pre>

<h2>Защита от атак</h2>

<h3>SQL инъекции</h3>
<ul>
    <li>Использование Eloquent ORM</li>
    <li>Подготовленные запросы для сырых SQL</li>
    <li>Валидация всех входных параметров</li>
</ul>

<h3>XSS (Межсайтовый скриптинг)</h3>
<ul>
    <li>Экранирование вывода в Blade: <code>{{ $data }}</code></li>
    <li>HTML Purifier для контента страниц</li>
    <li>Content Security Policy (в разработке)</li>
</ul>

<h3>CSRF (Межсайтовая подделка запроса)</h3>
<ul>
    <li>Токены во всех формах</li>
    <li>Проверка в VerifyCsrfToken middleware</li>
    <li>Исключения только для API эндпоинтов</li>
</ul>

<h3>Сессионные атаки</h3>
<ul>
    <li>Раздельные сессии для пользователей и админов</li>
    <li>Регенерация ID сессии после входа</li>
    <li>Таймауты неактивности</li>
</ul>

<div class="warning">
    <p><strong>⚠️ Предупреждение:</strong> По умолчанию сессии хранятся в файлах. Для продакшена рекомендуется использовать Redis или базу данных.</p>
</div>

<h2>Безопасность API</h2>

<h3>Rate Limiting</h3>
<pre><code>// Ограничение запросов к API
RateLimiter::for('api', function (Request $request) {
    return Limit::perMinute(60)->by($request->ip());
});</code></pre>

<h3>Валидация запросов</h3>
<ul>
    <li>Проверка всех входных параметров</li>
    <li>Валидация типов данных</li>
    <li>Ограничение размеров данных</li>
</ul>

<h2>Безопасность файлов</h2>

<h3>Загрузка файлов</h3>
<ul>
    <li>Валидация MIME типов</li>
    <li>Ограничение размера файлов</li>
    <li>Сканирование на вирусы (рекомендуется)</li>
    <li>Хранение вне webroot</li>
</ul>

<h3>Пример валидации</h3>
<pre><code>// SettingController.php
'site_logo_file' => 'nullable|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'site_favicon_file' => 'nullable|image|mimes:ico,png,jpg,gif,svg|max:1024',</code></pre>

<h2>Логирование безопасности</h2>

<h3>Что логируется</h3>
<ul>
    <li>Попытки входа (успешные и неуспешные)</li>
    <li>Изменение критических настроек</li>
    <li>Действия с правами доступа</li>
    <li>API запросы с ошибками</li>
    <li>Подозрительная активность</li>
</ul>

<h3>Каналы логирования</h3>
<pre><code>// config/logging.php
'channels' => [
    'security' => [
        'driver' => 'daily',
        'path' => storage_path('logs/security.log'),
        'level' => 'warning',
        'days' => 30,
    ],
    'api' => [
        'driver' => 'daily',
        'path' => storage_path('logs/api.log'),
        'level' => 'info',
        'days' => 7,
    ],
],</code></pre>

<h2>Рекомендации для продакшена</h2>

<div class="danger">
    <p><strong>🚨 Критически важно:</strong> Эти настройки должны быть выполнены перед запуском в продакшен.</p>
</div>

<h3>1. Серверная безопасность</h3>
<ul>
    <li>Использовать HTTPS с правильным SSL сертификатом</li>
    <li>Настроить WAF (Web Application Firewall)</li>
    <li>Регулярно обновлять ПО сервера</li>
    <li>Использовать SELinux/AppArmor</li>
</ul>

<h3>2. Конфигурация Laravel</h3>
<pre><code>// .env для продакшена
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ваш-домен.com

# Безопасные cookies
SESSION_SECURE_COOKIE=true
SESSION_HTTP_ONLY=true

# Дополнительные настройки
LOG_LEVEL=error
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis</code></pre>

<h3>3. База данных</h3>
<ul>
    <li>Использовать отдельного пользователя для приложения</li>
    <li>Ограничить права до минимума</li>
    <li>Регулярные бэкапы</li>
    <li>Шифрование данных на диске</li>
</ul>

<h3>4. Мониторинг</h3>
<ul>
    <li>Настроить алерты на подозрительную активность</li>
    <li>Мониторинг логов в реальном времени</li>
    <li>Регулярные security аудиты</li>
    <li>Penetration testing</li>
</ul>

<h2>Аварийные процедуры</h2>

<h3>При обнаружении уязвимости</h3>
<ol>
    <li>Немедленно изолировать систему</li>
    <li>Собрать доказательства (логи)</li>
    <li>Исправить уязвимость</li>
    <li>Уведомить пользователей при необходимости</li>
    <li>Сообщить в CERT при серьезных инцидентах</li>
</ol>

<h3>При компрометации данных</h3>
<ol>
    <li>Сбросить все пароли</li>
    <li>Отозвать все сессии</li>
    <li>Проверить целостность данных</li>
    <li>Уведомить регулятора (если требуется)</li>
</ol>

<h2>Контакты безопасности</h2>
<ul>
    <li><strong>Ответственный за безопасность:</strong> odeveloper@internet.ru</li>
    <li><strong>Экстренные случаи:</strong> Только через защищенные каналы</li>
    <li><strong>Баг-баунти:</strong> Не реализовано</li>
</ul>

<div class="info">
    <p><strong>ℹ️ Примечание:</strong> Эта документация должна регулярно обновляться в соответствии с изменениями в системе и новыми угрозами безопасности.</p>
</div>
</body>
</html>