Co to Cross Site Scripting? Przykłady i sposoby obrony przed atakiem
3 min
3 min
Na skróty
Dzisiejsze strony internetowe bardziej przypominają rozbudowane aplikacje, niż klasyczne, statyczne witryny. W dużej mierze jest to zasługa JavaScript’u — języka, który stoi za niemal wszystkimi dynamicznymi elementami, na które możesz natknąć się w sieci. Niestety — z jego ogromnych możliwości mogą skorzystać nie tylko web developerzy, ale także i cyberprzestępcy. Wyjaśniamy, na czym polegają ataki Cross Site Scripting i jak się przed nimi obronić.
Cross Site Scripting (XSS) jest jednym z najczęściej przeprowadzanych — i najskuteczniejszych — cyberataków. Wykorzystuje on fakt, że większość współcześnie projektowanych witryn jest tworzona dynamicznie przez przeglądarkę internetową, na podstawie kodu JavaScript. Dzięki temu cyberprzestępcy są w stanie wprowadzać swoje własne, złośliwe skrypty do oryginalnego kodu strony — tym samym zupełnie zmieniając jej działanie.
Konsekwencje ataku XSS mogą być bardzo poważne: od manipulacji treścią strony, przez kradzież plików cookie użytkownika po całkowite przejęcie kontroli nad jego kontem.
Wyróżnia się kilka rodzajów ataków XSS. Dwoma najczęściej spotykanymi są ataki „trwałe” (persisent) oraz „odbite” (reflected). Wyjaśnijmy krótko, na czym polegają.
Persistent XSS jest zdecydowanie najgroźniejszą formą ataku typu Cross Site Scripting. Polega ona na umieszczeniu złośliwego fragmentu kodu JavaScript „na stałe” w kodzie atakowanej strony. Jeżeli hakerowi się to uda — raz wprowadzony skrypt będzie wywoływany przez przeglądarkę każdego kolejnego użytkownika danej witryny — tym samym pomnażając szkody.
Co więcej, aby zatrzymać tego typu atak, odpowiedzialny za witrynę lub aplikację webmaster musi zidentyfikować fragment obcego skryptu i usunąć go z kodu — a to może zająć trochę czasu.
Standardowym narzędziem cyberprzestępców przeprowadzających ataki persistent XSS są… sekcje komentarzy — na blogach, forach czy portalach społecznościowych. Docelowo, wszystkie publikowane treści trafiają na serwer witryny (gdzie się je przechowuje), a następnie — są wyświetlane kolejnym użytkownikom. I w ten właśnie sposób stają się integralnym elementem kodu strony. Z tego też powodu wszystkie platformy, które umożliwiają swoim użytkownikom publikację własnych treści, powinny mieć automatyczny system ich weryfikacji — rozstrzygający o tym, czy dana treść zostanie zapisana na serwerze.
Z kolei „odbity” atak Cross Site Scripting wykorzystuje nie tylko luki w zabezpieczeniach strony, ale także… nieuwagę lub niewiedzę swojej ofiary. W tym przypadku złośliwy kod ukryty jest w prowadzącym do (teoretycznie) niegroźnej strony linku.
Po kliknięciu w link przeglądarka ofiary łączy się z serwerem strony, oczekując jej wyświetlenia. I tak też się dzieje — serwer zwraca prawidłowe dane witryny do przeglądarki… jednak towarzyszy im umieszczony w linku złośliwy skrypt, który zostanie wykonany przez przeglądarkę w momencie załadowania strony.
Co ważne — odbity skrypt nie jest zapisywany na serwerze strony, a jedynie w przeglądarce użytkownika. Z tego też powodu ofiarami ataków reflected XSS padają tylko pojedyncze osoby, które kliknęły w link z fałszywymi parametrami adresu URL lub HTTP, a nie wszyscy użytkownicy witryny.
Technika ta dość często jest elementem ataków phishingowych — mających na celu wyłudzenie konkretnych, poufnych informacji (np. danych osobowych, haseł do kont lub danych kart kredytowych).
O tym, jak niebezpieczne mogą być ataki Cross Site Scripting, najlepiej świadczą ich przykłady; w ciągu ostatnich 20 lat ich ofiarami padły takie strony i platformy, jak:
Jeżeli chodzi o to, jak skutecznie obronić się przed atakiem Cross Site Scripting — mamy kilka wskazówek.
Po pierwsze — koniecznie skonfiguruj stronę tak, aby działała przez protokół HTTPS — szyfrujący całość komunikacji pomiędzy przeglądarką użytkownika a serwerem. Dodatkowo radzimy także uzbroić się w zaporę sieciową (WAF), która utrudni cyberprzestępcom przechwycenie danych.
Po drugie — wykorzystaj nagłówki Content Security Policy. Pozwalają one ściśle zdefiniować, z jakich zasobów może korzystać witryna — i tym samym zablokować skrypty pochodzące z innych źródeł niż oryginalna domena.
Dalej — wszystkie dane, które wprowadzają użytkownicy Twojego serwisu powinny być automatycznie filtrowane pod kątem niebezpiecznych słów kluczowych: poleceń JavaScript oraz znaczników HTML. Wystarczy zablokować przetwarzanie danych wejściowych zawierających podstawowe elementy składni obu języków (np. tagi <script>…</script>), by cyberprzestępcy nie mogli umieścić w kodzie strony funkcjonalnych skryptów.
I wreszcie — zadbaj o to, aby wszystkie elementy Twojej strony zawsze były zaktualizowane do swojej najnowszej wersji. To szczególnie ważne w przypadku witryn opartych na WordPressie i jego wtyczkach, w których dość regularnie odkrywa się luki — a następnie łata kolejnymi aktualizacjami.
Więcej o tym, jak zabezpieczać dane w sklepie online piszemy w naszych pozostałych artykułach – zachęcamy do lektury.
Zawodowy copywriter oraz student psychologii na Uniwersytecie Warszawskim. W świecie marketingu internetowego równie mocno, co chwytliwe (i wartościowe) treści interesuje go dobry design. Gdy nie zajmuje się tworzeniem contentu, odkrywa perełki kina niezależnego i pracuje nad własnymi opowiadaniami.