Czym jest XSS (Cross-Site Scripting)?
Cross-Site Scripting, czyli XSS, to luka bezpieczeństwa w witrynach internetowych, która pozwala atakującym na dodawanie szkodliwych skryptów do stron internetowych. Najczęściej skrypty te są napisane w JavaScript.
Jeśli ktoś odwiedzi stronę dotkniętą XSS, jego przeglądarka uruchamia skrypt atakującego. Może to prowadzić do kradzieży ciasteczek, przejęcia sesji lub wykonania działań bez zgody użytkownika.
XSS, podobnie jak SQL Injection, jest regularnie wymieniany na liście OWASP Top 10 jako jedna z najczęstszych podatności aplikacji webowych.

Jak działa XSS?
XSS często atakuje aplikacje webowe, które nie sprawdzają i nie czyszczą poprawnie danych wejściowych od użytkowników.
Na przykład, jeśli pole komentarza pozwala na surowe HTML lub JavaScript bez żadnego filtrowania, atakujący może dodać kod taki jak ten:
<script>alert('Hacked!');</script>
Gdy ofiary oglądają stronę, złośliwy kod uruchamia się w ich przeglądarce.
Dlaczego XSS jest ważny w cyberbezpieczeństwie
XSS może prowadzić do większego naruszenia:
- Przejęcie konta (kradzież ciasteczek sesji w celu podszywania się pod użytkowników)
- Kradzież danych (przechwytywanie danych z formularzy, takich jak hasła czy karty kredytowe)
- Ataki phishingowe (wstrzykiwanie fałszywych formularzy logowania)
- Dostarczanie złośliwego oprogramowania (przekierowywanie użytkowników na złośliwe strony internetowe)
Rodzaje XSS
- XSS oparty na DOM
- Atak odbywa się całkowicie w przeglądarce poprzez manipulację Modelem Obiektu Dokumentu (DOM) bez angażowania serwera.
- XSS przechowywany
- Złośliwy skrypt jest trwale przechowywany na serwerze, na przykład w bazie danych, na stronie profilu.
- XSS odbity
- Skrypt jest odbijany od serwera internetowego (np. w URL lub komunikacie o błędzie), skrypt zostanie wykonany, gdy ofiara kliknie spreparowany link przez atakujących.
Jak zapobiegać XSS
- Sanityzacja danych wejściowych i kodowanie wyjściowe: zawsze oczyszczaj dane wejściowe użytkownika przed ich przetworzeniem, przekształcaj dane wejściowe użytkownika w bezpieczny format
- Używaj Polityki Bezpieczeństwa Treści (CSP): ogranicza, jakie skrypty mogą być wykonywane w przeglądarce.
- Unikaj eval() i JavaScriptu w linii: aby zmniejszyć ryzyko wstrzyknięcia.
- Testowanie bezpieczeństwa (DAST/IAST): przeprowadzaj testy bezpieczeństwa, aby wcześnie wykrywać podatności
Przykład w rzeczywistym przypadku - Robak Samy (MySpace, 2005)
Co się stało: Samy Kamkar opublikował profil na MySpace, który zawierał ładunek przechowywanego XSS. Kiedy inni użytkownicy oglądali profil, ładunek uruchamiał się w ich przeglądarkach, (a) dodawał Samy’ego jako przyjaciela, (b) dodawał frazę „Samy jest moim bohaterem” do ich profili, oraz (c) replikował się na stronach profili tych użytkowników.
Wpływ: Robak samodzielnie rozprzestrzenił się do ~1 miliona użytkowników w ciągu ~20 godzin, zmuszając MySpace do tymczasowego wyłączenia.
Dlaczego to zadziałało: MySpace pozwalało na nieprzetworzone HTML/atrybuty w polach profilu, co umożliwiało przechowywane wykonanie skryptu w przeglądarkach odwiedzających.
Lekcje / naprawa: Właściwe kodowanie wyjściowe, sanitacja danych wejściowych, usunięcie HTML z pól profilu oraz szybkie łatanie. Samy później stanął przed konsekwencjami prawnymi, a MySpace wdrożyło filtry.
Powiązane terminy
- Wstrzyknięcie SQL
- DAST (Dynamiczne Testowanie Bezpieczeństwa Aplikacji)
- OWASP Top 10
- CSRF (Cross-Site Request Forgery)