Co to jest CSRF? | Laravel
Dzisiaj odpowiem na to pytanie . Pojawia się ono relatywnie często. A ja wyjaśnię ci to jak najlepiej i rozwieję wszelkie wątpliwości .
Co to jest?
CSRF (Cross-site request forgery) – jest to metoda ataku na serwis internetowy polegająca na spreparowaniu żądania poprzez wykorzystanie uprawnień ofiary - głównie sesji - do wykonania jakiekolwiek szkodliwej i niezamierzonej przez ofiarę operacji. Lecz nie tyczy się to tylko protokołu HTTP, ponieważ dotyczy on również FTP.
Może brzmieć zawile, lecz to całkiem proste . Głównie chodzi tutaj o problem związany z autoryzacją działań, które wbrew twojej woli i wiedzy przy pomocy tego ataku mogą zostać uskutecznione.
Wyobraź sobie że jesteś zalogowany na jakiejś stronie, a na zupełnie innej wypełniasz jakiś formularz. Formularz ten może być wykorzystany do właśnie tego typu ataku. Albowiem może on wykonać żądanie do uprzednio wspomnianej strony które wyjdzie od ciebie – czyli wykona jakieś działanie z wykorzystaniem twoich uprawnień (jeśli takowe istnieją) bez twojej wiedzy i zgody.
To tylko przykład w jaki sposób można przeprowadzić ten atak . Tylko nie myl go z atakiem typu XSS! Ponieważ są to zupełnie odrębne metody ataku, które są bardzo często mylone bądź niepoprawnie używane zamiennie.
Co ma z tym wspólnego Laravel?
Otóż ma i to dużo . Ponieważ Laravel gwarantuje ci bezbłędne zabezpieczenie przed tego typu atakami, które jest również bardzo łatwe i szybkie w użyciu a większość pracy którą normalnie musiałbyś poświęcić na obsłużenie tego czy zaprogramowanie dzieję się za sceną, nie musisz się tym przejmować ani o to martwić !
Jak to działa?
Otóż Laravel przechowuje w sesji użytkownika 40-znakowy token, który przy każdym żądaniu jest weryfikowany. Jeśli token umieszczony w żądaniu klienta nie zgadza się z tokenem przypisanym do jego sesji – żądanie zostaje odrzucone z wyrzuceniem wyjątku niezgodności CSRF. Bardzo proste działanie, a jakże piękna i kompleksowa ochrona przed atakiem CSRF .
Czy muszę coś zrobić bądź skonfigurować by to działało?
Nie . Absolutnie nie. Jedynie tworząc formularze musisz pamiętać o dołączeniu do nich tokenu. W zasadzie możesz to zrobić na dwa sposoby. Możesz je dołączyć jako nagłówek „X-CSRF-TOKEN” do żądania bądź dołączyć go jako wartość dla wejścia (input value) pod nazwą „_token” – zalecam tę drugą opcję .
I to wszystko, nic więcej nie musisz robić, Laravel zajmie się resztą dla ciebie !
Wyjątki
Masz również możliwość wyłączenia konkretnych adresów URL spod jarzma weryfikacji przeciw atakom CSRF poprzez dodanie ich do właściwości „$except” w middleware pod nazwą „VerifyCsrfToken”. Jest to szczególnie przydatne choćby w sytuacji gdy korzystasz z jakiegoś Api .
Wykorzystanie na podstawie ciasteczek
Również masz możliwość zawrzeć w żądaniu owy token pobierając go z ciasteczek. Ponieważ Laravel przechowuje token dla każdej odpowiedzi w ciasteczku o nazwie „XSRF-TOKEN” .
Rozwiązanie stosowane głównie dla wygody, ponieważ niektóre frameworki oraz biblioteki języka javascript jak Angular czy Axios automatycznie umieszczą wartość tego ciasteczka w nagłówku „X-XSRF-TOKEN”.
I to byłoby wszystko w temacie protekcji przeciw CSRF w Laravelu .
Dziękuję ci za lekturę tego artykułu i życzę ci dobrego dnia i owocnego kodowania .
Bywaj!