Ataki XSS (Cross-Site Scripting) – jak działają i jak się przed nimi chronić
Cross-Site Scripting (XSS) to jeden z najczęściej spotykanych typów ataków na aplikacje webowe. Pozwala atakującemu na wstrzyknięcie złośliwego kodu JavaScript lub HTML do strony internetowej, który następnie jest wykonywany w przeglądarce innych użytkowników. Skutkiem XSS mogą być kradzież sesji, wyłudzenie danych, modyfikacja treści strony czy przekierowania do złośliwych witryn.
W tym artykule wyjaśnimy, czym są ataki XSS, jakie istnieją ich rodzaje, jakie zagrożenia niosą i jak skutecznie zabezpieczyć systemy przed tego typu atakami.
Jak działa XSS?
Atak XSS polega na tym, że złośliwy kod zostaje wstrzyknięty do strony internetowej w taki sposób, że przeglądarka ofiary traktuje go jako legalną część strony. Może to być np. skrypt kradnący ciasteczka sesyjne, który umożliwia przejęcie konta użytkownika.
Przykład prostego ataku XSS:
<input type="text" name="comment" value="<script>alert('Hacked!');</script>">
Jeżeli aplikacja nie filtruje znaków specjalnych, wpisany kod zostanie wykonany w przeglądarce innych użytkowników przeglądających komentarze.

Rodzaje ataków XSS
- Stored XSS (Persistent) – złośliwy kod jest zapisany na serwerze, np. w bazie danych. Każdy użytkownik odwiedzający stronę narażony jest na wykonanie skryptu.
- Reflected XSS (Non-Persistent) – kod jest wstrzykiwany w żądaniu HTTP i od razu odsyłany w odpowiedzi serwera, np. w linku wysyłanym do użytkownika.
- DOM-based XSS – złośliwy kod manipuluje strukturą strony po stronie klienta, zmieniając DOM bez interakcji z serwerem.
Skutki ataków XSS
Ataki XSS mogą mieć poważne konsekwencje dla użytkowników i właścicieli serwisów:
- kradzież ciasteczek sesyjnych i przejęcie kont,
- wyłudzanie danych osobowych, loginów i haseł,
- przekierowania użytkowników na strony phishingowe lub złośliwe,
- wstrzyknięcie reklam lub koparek kryptowalut,
- zmiana treści strony bez wiedzy administratora.
Jak zabezpieczyć aplikacje przed XSS?
1. Escaping danych wyjściowych
Zawsze wyświetlaj dane w sposób bezpieczny, konwertując znaki specjalne HTML na encje.
Przykład w PHP:
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
2. Walidacja i filtrowanie danych wejściowych
- Sprawdzaj typ i długość danych wprowadzanych przez użytkowników,
- Odmowa przyjęcia podejrzanych znaków w formularzach lub URL,
- Użycie bibliotek filtrujących treść (np. HTML Purifier w PHP).
3. Content Security Policy (CSP)
CSP pozwala zdefiniować, jakie źródła skryptów i zasobów są dozwolone na stronie. Dzięki temu nawet jeśli atakujący wstrzyknie kod, przeglądarka go zablokuje.
Przykład nagłówka CSP:
Content-Security-Policy: default-src 'self'; script-src 'self';
4. HttpOnly i Secure dla ciasteczek
Ustawiając flagi HttpOnly i Secure dla ciasteczek sesyjnych, utrudniasz ich kradzież przez złośliwe skrypty.
Set-Cookie: sessionId=abc123; HttpOnly; Secure
5. Regularne testy bezpieczeństwa
- Testy penetracyjne aplikacji webowych,
- Skany automatyczne pod kątem XSS przy użyciu narzędzi takich jak OWASP ZAP czy Burp Suite,
- Edukacja programistów w zakresie bezpiecznego kodowania.
Praktyczne wskazówki
- Nigdy nie ufaj danym od użytkownika, nawet jeśli pochodzą od zaufanego źródła.
- Separuj logikę aplikacji od danych wyświetlanych w HTML.
- Monitoruj logi serwera i alerty bezpieczeństwa, aby wykrywać nietypowe żądania.
- Kombinuj różne mechanizmy ochrony – escaping, CSP, walidacja danych, HttpOnly cookies – aby zwiększyć odporność na ataki.
Podsumowanie
XSS (Cross-Site Scripting) to wciąż jedno z najczęściej wykorzystywanych zagrożeń w aplikacjach internetowych. Jego skutki mogą być poważne, od kradzieży sesji po przejęcie kont i wyciek danych. Skuteczna ochrona wymaga wielowarstwowego podejścia, obejmującego walidację danych, escaping, politykę CSP, odpowiednie ustawienia ciasteczek oraz regularne testy bezpieczeństwa.
Dzięki stosowaniu tych praktyk można znacząco zmniejszyć ryzyko ataku XSS i zwiększyć bezpieczeństwo użytkowników oraz integralność aplikacji webowej.






