0Pricing
PHP Academy · Lekcja

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

  1. Zapobieganie Cross-Site Scripting (XSS)
  2. SQL injection i zapytania parametryzowane
  3. Ochrona CSRF
  4. Bezpieczne przechowywanie haseł
← Powrót do PHP Academy