Nodea — logo

XSS

XSS (ang. Cross-Site Scripting) to jedna z najczęstszych podatności aplikacji webowych. Polega na wstrzyknięciu złośliwego kodu, najczęściej w JavaScript, do treści strony, która następnie zostaje wyświetlona i wykonana w przeglądarce innego, niczego nieświadomego użytkownika. Skrypt działa w kontekście zaufanej witryny, więc może wykraść ciasteczka sesji, przechwycić dane z formularzy albo wykonać operacje w imieniu ofiary.

Rodzaje XSS

Wyróżnia się trzy główne odmiany. XSS przechowywany (stored) zapisuje ładunek na serwerze — np. w komentarzu — i atakuje każdego, kto otworzy zainfekowaną stronę. XSS odbity (reflected) przekazuje ładunek w adresie URL i uruchamia się, gdy ofiara kliknie spreparowany link. XSS oparty na DOM manipuluje stroną wyłącznie po stronie przeglądarki. We wszystkich przypadkach źródłem problemu jest zaufanie do niezweryfikowanych danych wejściowych.

Ochrona

Skuteczna obrona łączy kilka warstw. Kluczowe jest kodowanie danych wyjściowych odpowiednio do kontekstu (HTML, atrybut, JavaScript) oraz walidacja wejścia. Nagłówek Content-Security-Policy ogranicza, skąd przeglądarka może ładować i wykonywać skrypty, a oznaczanie ciasteczek jako HttpOnly utrudnia ich kradzież. Transmisja po HTTPS chroni dane w drodze, a firewall aplikacyjny (WAF) może odfiltrować typowe wzorce ataków. XSS bywa łączony z innymi technikami, np. CSRF, dlatego bezpieczeństwo aplikacji należy traktować całościowo, a nie jako pojedynczą łatkę. Regularne testy bezpieczeństwa i aktualizowanie zależności to praktyki, które pozwalają wychwycić podatności typu XSS, zanim trafią na produkcję i zostaną wykorzystane przez atakujących.

Powiązane pojęcia

Najczęstsze pytania

Jak zabezpieczyć się przed XSS?

Podstawą jest walidacja danych wejściowych oraz kodowanie danych wyjściowych (escaping) w kontekście, w którym są wyświetlane. Pomaga też nagłówek Content-Security-Policy ograniczający, skąd mogą pochodzić wykonywane skrypty.