Ochrona CSRF
Generuj i weryfikuj tokeny CSRF w formularzach, aby zapobiegać sfałszowanym żądaniom
Ochrona CSRF to bezpłatna lekcja PHP Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej PHP Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs PHP Academy zawiera 4 lekcji w sumie.
Czym jest CSRF?
Cross-Site Request Forgery (CSRF) nakłania uwierzytelnionych użytkowników do wykonania niechcianych działań. Złośliwa strona wysyła sfałszowane żądanie do Państwa witryny, korzystając z aktywnej sesji ofiary.
Jak działa CSRF
Scenariusz: Alicja jest zalogowana w bank.com. Odwiedza malicious.com, gdzie znajduje się ukryty formularz automatycznie wysyłający żądanie przelewu do bank.com z użyciem jej pliku cookie sesji.
Tokeny CSRF
Ochronę zapewnia tajny token przypisany do sesji i osadzony w każdym formularzu. Serwer weryfikuje token w żądaniach POST/PUT/PATCH/DELETE — sfałszowane żądanie z innego źródła nie może go odczytać.
@csrf w Laravel Blade
Dodaj dyrektywę @csrf do każdego formularza HTML, który modyfikuje dane.
<form method="POST" action="/transfer">
@csrf
<input name="amount" type="number">
<button>Transfer</button>
</form>Middleware CSRF
Middleware VerifyCsrfToken Laravel sprawdza nagłówek X-CSRF-TOKEN lub pole _token we wszystkich żądaniach innych niż GET w grupie middleware web.
CSRF dla AJAX
W przypadku żądań AJAX odczytaj token z metatagu i wyślij go jako nagłówek.
// In the HTML head:
<meta name="csrf-token" content="{{ csrf_token() }}">
// In JavaScript (Axios):
axios.defaults.headers.common["X-CSRF-TOKEN"] =
document.querySelector("meta[name=csrf-token]").content;Wykluczanie tras
Trasy API (używające tokenów Sanctum) zwykle wyklucza się z ochrony CSRF, ponieważ korzystają z uwierzytelniania opartego na tokenach zamiast na plikach cookie.
<?php
// In VerifyCsrfToken $except:
protected $except = [
"api/*",
"webhooks/*",
];Atrybut pliku cookie SameSite
Ustawienie SameSite=Strict lub Lax dla pliku cookie sesji zapewnia dodatkową warstwę ochrony przed CSRF w nowoczesnych przeglądarkach.
Wzorzec podwójnego przesłania pliku cookie
Alternatywna ochrona API przed CSRF: wyślij token zarówno jako plik cookie, jak i nagłówek żądania. Serwer sprawdza, czy są zgodne — żądania z innych źródeł nie mogą odczytywać plików cookie.
CSRF w kontekście API
Interfejsy REST API uwierzytelniające za pomocą tokenów Bearer (Sanctum, JWT) nie są podatne na CSRF, ponieważ tokeny są przechowywane w localStorage (przeglądarka nie wysyła ich automatycznie).
Testowanie CSRF
Elementy pomocnicze testów Laravel automatycznie dołączają tokeny CSRF. Można również sprawdzić, czy niezabezpieczone żądania POST są odrzucane.
<?php
// With token:
$this->post("/transfer", ["_token" => csrf_token(), "amount" => 100]);
// Simulating CSRF attack (no token):
$this->withoutMiddleware(VerifyCsrfToken::class)->post("/transfer", [...]);Podsumowanie
Ochrona przed CSRF wymaga ukrytego tokenu w każdym formularzu zmieniającym stan. Laravel obsługuje to automatycznie za pomocą @csrf. W przypadku AJAX dodaj token jako nagłówek HTTP. Trasy API korzystające z tokenów Bearer nie są podatne na ten atak.
Szybkie sprawdzenie
Jak dodać ochronę przed CSRF do formularza Laravel Blade?
Często zadawane pytania
Czy lekcja „Ochrona CSRF” jest bezpłatna?
Tak — pełny tekst „Ochrona CSRF” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu PHP Academy, przejdź na CoddyKit PRO. Kurs PHP Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Ochrona CSRF”?
Generuj i weryfikuj tokeny CSRF w formularzach, aby zapobiegać sfałszowanym żądaniom Ćwiczysz PHP Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć PHP Academy?
Nie wymagamy żadnego doświadczenia. PHP Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Ochrona CSRF”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji PHP Academy?
Tak. Każda lekcja PHP Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Zapobieganie Cross-Site Scripting (XSS)
- SQL injection i zapytania parametryzowane
- Ochrona CSRF
- Bezpieczne przechowywanie haseł