Статті

Laravel Web Security: що таке міжсайтова підробка запитів (CSRF)?

У цьому підручнику Laravel ми говоримо про веб-безпеку та про те, як захистити веб-додаток від міжсайтових підробок запитів або атак CSRF.

CSRF — це зловмисна діяльність, яку виконує зловмисник, який виконує дії від імені автентифікованого користувача, що завдає шкоди веб-безпеці. На щастя, Laravel надає інструменти для запобігання такому типу вразливості.

Що таке CSRF?

Атаки CSRF захоплюють сесії користувачів. Вони роблять це, обманом змушуючи користувача надіслати запит за допомогою прихованих тегів форми або шкідливих URL-адрес (зображень або посилань) без відома користувача.

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

Зображення вище ілюструє сценарій, коли веб-безпеку порушено. Жертва надсилає запит, натискаючи на посилання (отримано), надсилаючи запит на сервер веб-сайту, який спричиняє бажані ефекти хакеру, який отримує інформацію, корисну для доступу та маніпулювання сервером веб-сайту.

Як запобігти запитам CSRF

Щоб покращити безпека мережі ваших програм, під час кожного сеансу користувача Laravel генерує захищені маркери, які він використовує, щоб переконатися, що автентифікований користувач є тим, хто запитує програму.

Оскільки цей маркер змінюється кожного разу, коли сеанс користувача повторно генерується, зловмисник не може отримати до нього доступ.

Кожного разу, коли надходить запит на зміну інформації користувача на стороні сервера (сервер), наприклад POSTPUTPATCHDELETE, ви повинні включити директиву @csrf у формі запиту blade HTML. The @csrf тому це директива Blade використовується для створення прихованого маркера, перевіреного програмою.

Директива Blade це синтаксис, який використовується в системі шаблонів Laravel під назвою Лезо . Щоб створити файл blade ви повинні дати йому ім’я – у нашому випадку форму – після чого розширення леза. Це означає, що файл матиме назву form.blade.php.

Файл використовується blade для відтворення переглядів для користувачів на веб-сторінці Є кілька попередніх вказівокdefiВи можете використовувати скорочений синтаксис nite або blade. Наприклад, @if перевірити, чи виконується умова, @empty перевірте, чи не порожні записи, @auth перевірити, чи автентифікований користувач тощо.

Але повернемося до директиви @csrf. Ось як це використовувати:

<form method="POST" action="{{route('pay')}}">

    @csrf
    
</form>

У попередніх версіях Laravel було інше налаштування: обидві вони працювали й виконували однакові дії.

Пов'язані статті
Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.
<form method="POST" action="{{route('pay')}}">
    
    <input type="hidden" name="_token" value="{{ csrf_token() }}" />
    
</form>

Якщо токен CSRF відсутній у запиті форми, який надсилається, або якщо він виглядає недійсним, Laravel видає повідомлення про помилку «Сторінка закінчилася» з кодом статусу 419.

Як і де відбувається перевірка CSRF

Проміжне програмне забезпечення VerifyCsrfToken обробляє перевірку CSRF у програмі Laravel. The middleware зареєстрований в Kernel.php і знаходиться в каталозі app/Http/Middleware. Це означає, що middleware він запускається для запитів у мережі, не пов’язаних з API.

protected $middlewareGroups = [
        'web' => [
           .
           .
           .
           .
           .
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
    ];

Проміжне програмне забезпечення VerifyCsrfToken розширює клас Illuminate\Foundation\Http\Middleware\VerifyCsrfToken, тобто перевірка CSRF є defiвсередині класу.

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

Усередині класу ми маємо функцію tokensMatch.

protected function tokensMatch($request)
{
     $token = $this->getTokenFromRequest($request);

     return is_string($request->session()->token()) &&
            is_string($token) &&
            hash_equals($request->session()->token(), $token);
}

у коді визначає, чи збігаються сеанс і вхідні маркери CSRF.

Функція робить дві речі:

  1. отримати $this->getTokenFromRequest токен із вхідного запиту, доданий через приховане поле або заголовок запиту. Маркер розшифровується, а потім повертається до змінної маркера.
protected function getTokenFromRequest($request)
{
    $token = $request->input('_token') ?: $request->header('X-CSRF-TOKEN');

    if (! $token && $header = $request->header('X-XSRF-TOKEN')) {
        try {
            $token = CookieValuePrefix::remove($this->encrypter->decrypt($header, static::serialized()));
        } catch (DecryptException $e) {
            $token = '';
            }
    }

    return $token;
}

У коді він отримує маркер із заголовка

2. Переведіть і маркер запиту, і сеанс до рядка, а потім використовуйте hash_equals вбудований у PHP для порівняння рівності обох рядків. Результат цієї операції завжди bool (істина) або (хибність) .

Ercole Palmeri

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.
Ключові слова: LaravelPHPІТ безпека

Останні статті

Статистичні функції Excel: навчальний посібник із прикладами, частина перша

Excel надає широкий спектр статистичних функцій, які виконують обчислення від основного середнього значення, медіани та моди до розподілу…

Жовтень 1 2023

Зведені таблиці: що це таке, як створити в Excel і Google. Підручник з прикладами

Зведені таблиці — це метод аналізу електронних таблиць. Вони дозволяють абсолютно новачкові з нульовим досвідом...

30 вересня 2023

Проблема з авторським правом

Нижче наведено другу й останню статтю цього бюлетеня, присвячену зв’язку між конфіденційністю та авторським правом від…

30 вересня 2023

Інновації для електричної мобільності та розумних мереж: нові кальцієво-іонні батареї

Проект ACTEA, ENEA та Римський університет Сапієнца розроблятимуть нові кальцієво-іонні акумулятори. Нові кальцієво-іонні акумулятори як альтернатива…

30 вересня 2023

Основні моменти щорічної зустрічі AOFAS 2023 Ортопедичні дослідження та інновації

Понад 900 хірургів-ортопедів стопи та гомілковостопного суглоба, передових медичних працівників, лікарів-ортопедів та студентів-медиків відвідали...

28 вересня 2023

Бум робототехніки: лише у 2022 році по всьому світу було встановлено 531.000 35 роботів. Очікуване зростання на 2027% на рік до XNUMX року. ЗВІТ PROTOLABS

Згідно з останнім звітом Protolabs про робототехніку для виробництва, майже третина (32%) респондентів вважають, що в найближчі кілька років...

28 вересня 2023

CNH отримала нагороду Agritechnica Innovation Awards за свою технологію в галузі сільського господарства

CNH рішуче прагне розвивати свою технологію, щоб зробити сільське господарство простішим, ефективнішим і стійкішим для своїх…

27 вересня 2023

NTT і Qualcomm вирішили співпрацювати, щоб вийти за межі можливостей ШІ

Стратегічний крок сприятиме швидшому розвитку приватної екосистеми 5G для всіх цифрових пристроїв, повідомляє NTT...

27 вересня 2023

Neuralink розпочинає набір для першого клінічного випробування мозкового імплантату на людях

Neuralink, нейротехнологічний стартап, який належить Ілону Маску, нещодавно оголосив, що розпочне набір пацієнтів для свого…

26 вересня 2023

Privacy Loop: штучний інтелект у лабіринті конфіденційності та авторського права

Це перша з двох статей, у яких я розглядаю делікатний зв’язок між конфіденційністю та авторським правом, з одного боку,…

26 вересня 2023

Читайте Innovation своєю мовою

Інноваційний бюлетень
Не пропустіть найважливіші новини про інновації. Підпишіться, щоб отримувати їх електронною поштою.

Слідуйте за нами