Co to jest CSRF?

Autor: Opublikowano

W skrócie: CSRF to atak, w którym cudza strona nakłania przeglądarkę zalogowanego użytkownika do wysłania niechcianego żądania do innego serwisu. Jeśli serwis sprawdza tylko, czy użytkownik jest zalogowany, może wykonać operację bez jego świadomej zgody. Podstawą ochrony są zabezpieczenia po stronie aplikacji: tokeny CSRF, właściwe ustawienia ciasteczek i kontrola pochodzenia żądań.

Jak działa CSRF — przykład z panelem sklepu

CSRF to skrót od Cross-Site Request Forgery, czyli fałszowania żądań między witrynami. Atak wykorzystuje fakt, że przeglądarka może automatycznie dołączać ciasteczko sesyjne do żądań kierowanych do danego serwisu. Takie ciasteczko pozwala serwerowi rozpoznać zalogowaną osobę bez ponownego pytania o hasło.

Wyobraź sobie, że zarządzasz sklepem internetowym i masz otwarty panel administratora. W drugiej karcie odwiedzasz stronę przygotowaną przez napastnika. Ta strona próbuje wysłać do panelu żądanie zmiany adresu e-mail przypisanego do twojego konta.

Jeśli przeglądarka dołączy ciasteczko sesyjne, a panel nie sprawdzi dodatkowo autentyczności żądania, serwer może potraktować je jak twoją decyzję. Napastnik nie musi znać hasła ani odczytywać ciasteczka — wystarczy, że przeglądarka wykorzysta je przy wysyłaniu żądania.

To trochę tak, jakby ktoś podsunął do realizacji dyspozycję z twoją automatycznie dołączoną pieczątką. System rozpoznaje pieczątkę, ale nie sprawdza, czy rzeczywiście chcesz wykonać tę konkretną operację.

Kiedy atak może się udać i co mu nie przeszkadza

Typowy CSRF wymaga kilku warunków: użytkownik ma aktywną sesję, przeglądarka automatycznie wysyła dane uwierzytelniające, a aplikacja przyjmuje przewidywalne żądanie zmieniające stan konta. Może chodzić o zmianę danych, dodanie użytkownika albo usunięcie wpisu. Skutki zależą od dostępnych operacji i uprawnień ofiary.

Napastnik zazwyczaj nie musi odczytać odpowiedzi serwera. Przeglądarka może zabronić obcej stronie czytania danych z panelu, ale samo wysłanie niektórych żądań jest nadal możliwe. Dlatego polityka tego samego pochodzenia, ograniczająca dostęp skryptów do cudzych zasobów, nie zastępuje ochrony przed CSRF.

HTTPS również nie rozwiązuje tego problemu. Szyfruje połączenie i chroni dane w drodze, lecz nie potwierdza, że użytkownik świadomie zlecił operację. Samo użycie metody POST zamiast GET także nie wystarcza: obca strona może wysłać zwykły formularz POST.

CSRF nie jest tym samym co XSS. XSS polega na uruchomieniu niepożądanego kodu w kontekście zaufanej witryny, natomiast CSRF wykorzystuje zaufanie serwisu do żądań z przeglądarki użytkownika. Podatność XSS może jednak podważyć zabezpieczenia przed CSRF, na przykład umożliwiając odczyt tokenu.

Jak zabezpieczyć aplikację przed CSRF

Najbezpieczniejszym punktem wyjścia jest wbudowana ochrona używanego frameworka. Trzeba ją włączyć i upewnić się, że obejmuje wszystkie operacje zmieniające dane, nie tylko formularz logowania.

Dla szczególnie wrażliwych czynności dodaj ponowne uwierzytelnienie lub osobne potwierdzenie. Ciasteczka sesyjne powinny też mieć odpowiednie atrybuty Secure i HttpOnly, choć żaden z nich sam nie zapobiega CSRF.

Czy API też potrzebuje ochrony?

API, czyli interfejs służący do komunikacji między programami, również może być podatne na CSRF, jeśli korzysta z sesji uwierzytelnianej ciasteczkiem. Sama odpowiedź w formacie JSON nie zapewnia bezpieczeństwa.

Gdy klient jawnie dodaje token dostępu w nagłówku Authorization, a przeglądarka nie dołącza go automatycznie, typowy mechanizm CSRF zwykle nie ma zastosowania. Nie oznacza to jednak odporności na kradzież tokenu lub XSS. CORS, czyli mechanizm regulujący dostęp między pochodzeniami, także nie jest samodzielnym zabezpieczeniem przed CSRF.

Co sprawdzić we własnym serwisie

Zacznij od jednej operacji, na przykład zmiany adresu e-mail. Na koncie testowym, we własnym środowisku lub za zgodą właściciela, sprawdź, czy żądanie bez tokenu CSRF albo z błędnym tokenem zostaje odrzucone i rzeczywiście nie zmienia danych. Następnie skontroluj ustawienia ciasteczka oraz pozostałe ścieżki wykonujące tę samą operację.

Jeśli korzystasz z gotowego systemu, potwierdź sposób działania ochrony w oficjalnej dokumentacji jego wersji i zainstalowanych rozszerzeń. Jako użytkownik nie naprawisz braku zabezpieczeń serwera; możesz ograniczać ryzyko, wylogowując się po pracy z wrażliwym panelem. Jako właściciel aplikacji zacznij od przeglądu operacji zmieniających dane — to one wymagają kontroli, czy żądanie rzeczywiście pochodzi z uprawnionego interfejsu.

Zobacz też: Co oznacza www?

Przeczytaj także

Dowiedz się, jak PHP-FPM obsługuje żądania PHP, czym różni się od serwera WWW i jak dobrać ustawienia procesów do ruchu oraz zasobów hostingu.
Poznaj BIND, otwarte oprogramowanie serwera DNS: sprawdź, jak obsługuje domeny, czym różnią się jego role i kiedy warto samodzielnie go wdrożyć.
Poznaj najważniejsze Security Headers, ich rolę w ochronie strony oraz sposób sprawdzania i wdrażania nagłówków bez blokowania potrzebnych funkcji.