• Час читання ~2 хв
  • 29.03.2024

Ми починаємо нашу нову серію про функції безпеки Laravel 11 у верхній частині приміток до випуску. Першою зміною, пов'язаною з безпекою, з якою ми стикаємося, є рештарозриву програми за замовчуванням Middleware:

Раніше нові програми Laravel включали дев'ять проміжних програм. Це проміжне програмне забезпечення виконувало різноманітні завдання, такі як автентифікація запитів, обрізання вхідних рядків і перевірка токенів CSRF.

У Laravel 11 ці проміжні програми були переміщені в сам фреймворк, щоб вони не додавали об'єму в структуру вашого додатку. У фреймворк були додані нові методи для налаштування поведінки цього проміжного програмного забезпечення, які можуть бути викликані з файлу `bootstrap/app.php` вашого додатку.

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(
        except: ['stripe/*']
    );
 
    $middleware->web(append: [
        EnsureUserIsSubscribed::class,
    ])
})

Хоча це чудово підходить для зменшення кількості шуму в каркасах додатків за замовчуванням, особливо з огляду на те, що більшість із них вам не потрібно буде змінювати в більшості програм, це ускладнює пошук проміжного програмного забезпечення, пов'язаного з безпекою, і внесення змін, які вам потрібно внести.

Щоб було простіше дізнатися, що доступно і що він робить, ось різні методи конфігурації проміжного програмного забезпечення, доступні в даний час:

Вимкніть шифрування

файлів cookie Laravel автоматично шифрує значення файлів cookie, щоб забезпечити безпеку. Якщо вам потрібно отримати доступ до них за межами Laravel, ви можете вимкнути шифрування для певних значень. (Документи Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->encryptCookies(except: [
        'cookie_name',
    ]);
})

Вимкніть захист

CSRFІноді потрібно відключити CSRF-захист на певних маршрутах, таких як вебхуки або зовнішні API. (Документи Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(except: [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ]);
})

Виключення параметрів із перевірки підписаних URL-адрес

Сайти соціальних мереж, email-розсилки та аналітика люблять прив'язувати додаткові параметри до URL-адрес, коли користувачі натискають на них, однак ці додаткові параметри можуть зламати підписані URL-адреси. Щоб цього уникнути, можна спеціально виключити ці зайві параметри з валідації. (Документи Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateSignatures(except: [
        'fbclid',
        'utm_campaign',
        'utm_content',
        'utm_medium',
        'utm_source',
        'utm_term',
    ]);
})

Налаштування довірених хостів і проксі-серверів

Важливо налаштувати надійні хости та проксі-сервери, щоб запобігти зловмисним запитам до вашого додатка під час атак отруєння хостів. Найпоширенішим прикладом є запуск електронних листів зі скиданням пароля, які містять посилання на введений зловмисником домен1. (Документи Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware
        ->trustProxies(at: [
            '192.168.1.1',
            '192.168.1.2',
        ])
        ->trustHosts(
            at: ['laravel.test']
        );
})

Дозвольте певні маршрути під час технічного обслуговування

Іноді потрібно дозволити працювати певним маршрутам, коли ввімкнено режим технічного обслуговування.

->withMiddleware(function (Middleware $middleware) {
    $middleware->preventRequestsDuringMaintenance(except: [
        'stripe/*',
    ]);
})

Увімкніть дроселювання

APIГарною ідеєю буде ввімкнути розумне регулювання вашого API, щоб запобігти зловживанням та зловмисній активності. (Документи Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->throttleApi(limiter: 'api', redis: true);
})

Визнання недійсними веб-сеансів на інших пристроях

Як додатковий рівень безпеки, ви можете скасувати будь-які активні сеанси на інших пристроях одним натисканням кнопки або після зміни пароля. (Документи Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->authenticateSessions();
})

Тьху! Таких було декілька, але ми дійшли до кінця.

Я сподіваюся, що це послужить корисним довідником - деякі з них не повністю задокументовані (поки що), і немає короткої довідкової сторінки.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297