Артыкулы

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 definite ўнутры класа.

Давайце паглыбімся, каб даведацца, як 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 для параўнання, ці роўныя абодва радкі. Вынік гэтай аперацыі ёсць заўсёды Бул (праўда) або (хлусня) .

Ercole Palmeri

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

Апошнія артыкулы

Выдаўцы і OpenAI падпісваюць пагадненні аб рэгуляванні патоку інфармацыі, апрацаванай штучным інтэлектам

У мінулы панядзелак Financial Times абвясціла аб здзелцы з OpenAI. FT ліцэнзуе сваю журналістыку сусветнага ўзроўню...

Красавік 30 2024

Інтэрнэт-плацяжы: вось як паслугі струменевай перадачы прымушаюць вас плаціць вечна

Мільёны людзей плацяць за струменевыя паслугі, плацячы штомесячную абаненцкую плату. Распаўсюджана меркаванне, што вы…

Красавік 29 2024

Veeam прапануе самую поўную падтрымку праграм-вымагальнікаў - ад абароны да адказу і аднаўлення

Coveware ад Veeam працягне прадастаўляць паслугі рэагавання на інцыдэнты кібервымагальніцтва. Coveware будзе прапаноўваць судова-медыцынскую экспертызу і магчымасці выпраўлення…

Красавік 23 2024

Зялёная і лічбавая рэвалюцыя: як прагнознае тэхнічнае абслугоўванне трансфармуе нафтагазавую прамысловасць

Прагнастычнае тэхнічнае абслугоўванне рэвалюцыянізуе нафтагазавы сектар з інавацыйным і актыўным падыходам да кіравання заводам.…

Красавік 22 2024

Чытайце Innovation на сваёй мове

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

Выконвайце за намі