Laravel - Ochrona CSRF

CSRF odnosi się do ataków Cross Site Forgery na aplikacje internetowe. Ataki CSRF to nieautoryzowane działania, które wykonują uwierzytelnieni użytkownicy systemu. W związku z tym wiele aplikacji internetowych jest podatnych na takie ataki.

Laravel oferuje ochronę CSRF w następujący sposób -

Laravel zawiera wbudowaną wtyczkę CSRF, która generuje tokeny dla każdej aktywnej sesji użytkownika. Te tokeny sprawdzają, czy operacje lub żądania są wysyłane przez odpowiedniego uwierzytelnionego użytkownika.

Realizacja

Implementacja ochrony CSRF w Laravel jest szczegółowo omówiona w tej sekcji. Poniższe punkty są warte uwagi, zanim przejdziemy dalej w zakresie ochrony CSRF -

  • CSRF jest implementowany w formularzach HTML zadeklarowanych w aplikacjach internetowych. Musisz dołączyć ukryty zweryfikowany token CSRF do formularza, aby oprogramowanie pośredniczące ochrony CSRF Laravel mogło zweryfikować żądanie. Składnia jest pokazana poniżej -

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • Możesz wygodnie budować aplikacje oparte na JavaScript, używając biblioteki JavaScript HTTP, ponieważ obejmuje to token CSRF do każdego wychodzącego żądania.

  • Plik a mianowicie resources/assets/js/bootstrap.js rejestruje wszystkie tokeny dla aplikacji Laravel i zawiera meta tag, który przechowuje csrf-token z Axios HTTP library.

Formularz bez tokena CSRF

Rozważ następujące wiersze kodu. Pokazują formularz, który przyjmuje dwa parametry jako dane wejściowe:email i message.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Wynikiem powyższego kodu jest pokazany poniżej formularz, na którym użytkownik końcowy może przeglądać -

Formularz pokazany powyżej akceptuje wszelkie informacje wejściowe od autoryzowanego użytkownika. Może to spowodować, że aplikacja internetowa będzie podatna na różne ataki.

Należy pamiętać, że przycisk przesyłania zawiera funkcje w sekcji kontrolera. PlikpostContactfunkcja jest używana w kontrolerach dla powiązanych widoków. Jest to pokazane poniżej -

public function postContact(Request $request) {
   return $request-> all();
}

Zwróć uwagę, że formularz nie zawiera żadnych tokenów CSRF, więc poufne informacje udostępniane jako parametry wejściowe są podatne na różne ataki.

Formularz z tokenem CSRF

Poniższe wiersze kodu pokazują formularz ponownie zaprojektowany przy użyciu tokenów CSRF -

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Uzyskane dane wyjściowe zwróci JSON z tokenem, jak podano poniżej -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "[email protected]"
}

To jest token CSRF utworzony po kliknięciu przycisku Prześlij.