first commit
This commit is contained in:
24
routes/console.php
Normal file
24
routes/console.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Foundation\Inspiring;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\Schedule;
|
||||
|
||||
Artisan::command('inspire', function () {
|
||||
$this->comment(Inspiring::quote());
|
||||
})->purpose('Display an inspiring quote');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Регламентные задачи безопасности
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Контроль целостности журнала аудита (РСБ.3) — ежедневно.
|
||||
Schedule::command('audit:verify')->dailyAt('01:00')->onOneServer();
|
||||
|
||||
// Очистка журнала по сроку хранения (РСБ.4, РСБ.8) — еженедельно.
|
||||
Schedule::command('audit:purge')->weekly()->sundays()->at('02:00')->onOneServer();
|
||||
|
||||
// Проверка уязвимостей зависимостей (УКФ.4) — ежедневно.
|
||||
Schedule::command('security:audit-deps')->dailyAt('03:00')->onOneServer();
|
||||
65
routes/web.php
Normal file
65
routes/web.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Controllers\Auth\AuthenticatedSessionController;
|
||||
use App\Http\Controllers\Auth\PasswordController;
|
||||
use App\Http\Controllers\Auth\TwoFactorController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Inertia\Inertia;
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Публичные маршруты
|
||||
|--------------------------------------------------------------------------
|
||||
*/
|
||||
Route::inertia('/', 'Welcome')->name('home');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Аутентификация (меры ИАФ.*, РСБ.2)
|
||||
|--------------------------------------------------------------------------
|
||||
| Вход защищён ограничением частоты (throttle) — мера ИАФ.6/УПД.6.
|
||||
*/
|
||||
Route::middleware('guest')->group(function () {
|
||||
Route::get('login', [AuthenticatedSessionController::class, 'create'])->name('login');
|
||||
// Блокировка после N неудачных попыток реализована в LoginRequest (ИАФ.6)
|
||||
// с регистрацией события auth.locked в журнале (РСБ.2).
|
||||
Route::post('login', [AuthenticatedSessionController::class, 'store']);
|
||||
});
|
||||
|
||||
Route::post('logout', [AuthenticatedSessionController::class, 'destroy'])
|
||||
->middleware('auth')
|
||||
->name('logout');
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Многофакторная аутентификация (мера ИАФ.4)
|
||||
|--------------------------------------------------------------------------
|
||||
| Доступны аутентифицированному пользователю до прохождения второго фактора.
|
||||
*/
|
||||
Route::middleware('auth')->group(function () {
|
||||
Route::get('mfa/setup', [TwoFactorController::class, 'setup'])->name('mfa.setup');
|
||||
Route::post('mfa/enable', [TwoFactorController::class, 'enable'])->name('mfa.enable');
|
||||
Route::get('mfa/challenge', [TwoFactorController::class, 'challenge'])->name('mfa.challenge');
|
||||
Route::post('mfa/verify', [TwoFactorController::class, 'verify'])
|
||||
->middleware('throttle:login')
|
||||
->name('mfa.verify');
|
||||
Route::delete('mfa', [TwoFactorController::class, 'disable'])->name('mfa.disable');
|
||||
|
||||
// Принудительная смена пароля по истечении срока (мера ИАФ.3).
|
||||
Route::get('password/expired', [PasswordController::class, 'expired'])->name('password.expired');
|
||||
Route::put('password', [PasswordController::class, 'update'])->name('password.update');
|
||||
});
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Защищённая зона: требует аутентификации, второго фактора и актуального пароля
|
||||
|--------------------------------------------------------------------------
|
||||
| Полный стек мер: auth -> mfa (ИАФ.4) -> password.fresh (ИАФ.3) -> audit (РСБ.2).
|
||||
*/
|
||||
Route::middleware(['auth', 'mfa', 'password.fresh', 'audit'])->group(function () {
|
||||
Route::get('dashboard', fn () => Inertia::render('Dashboard'))->name('dashboard');
|
||||
|
||||
// Здесь размещайте маршруты работы с ПДн. Доступ дополнительно проверяется
|
||||
// через Policy (мера УПД.2), например:
|
||||
// Route::resource('personal-data', PersonalDataController::class);
|
||||
});
|
||||
Reference in New Issue
Block a user