Демо-режим! Все данные только для просмотра. Изменения не сохраняются.
🔐 Безопасность системы
Информация
Slug:
security.html
Обновлено:
30.05.2026 15:03
30.05.2026 15:03
Размер:
14.42 KB
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
Аварийные процедуры
При обнаружении уязвимости
- Немедленно изолировать систему
- Собрать доказательства (логи)
- Исправить уязвимость
- Уведомить пользователей при необходимости
- Сообщить в CERT при серьезных инцидентах
При компрометации данных
- Сбросить все пароли
- Отозвать все сессии
- Проверить целостность данных
- Уведомить регулятора (если требуется)
Контакты безопасности
- Ответственный за безопасность: 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>