Outils :Vous avez un site web ? Un blog ?
Technorati reactions rencontre |
Cross-site scripting (XSS) – sposób ataku na serwis WWW polegający na osadzeniu w treści atakowanej strony kodu (zazwyczaj JavaScript), który wyświetlony innym użytkownikom może doprowadzić do wykonania przez nich niepożądanych akcji. Skrypt umieszczony w zaatakowanej stronie może obejść niektóre mechanizmy kontroli dostępu do danych użytkownika.
Spis treści |
Przeglądarki internetowe udostępniają skryptom jedynie te obiekty, które pochodzą z tego samego źródła, co strona, w której kontekście dany skrypt się wykonuje. Posługują się przy tym zasadą tożsamego pochodzenia (ang. same origin policy), która zezwala na dostęp do zasobów stron, których adres wyróżnia się takim samym protokołem, nazwą domeny serwera i numerem portu. Poniższa tabela podaje kilka przykładów stron wraz z informacją, czy ich pochodzenie jest zgodne z adresem "http://www.example.com/dir/page.html".
| Adres | Zgodny | Komentarz |
|---|---|---|
| http://www.example.com/dir2/other.html | tak | |
| http://www.example.com/dir/inner/other.html | tak | |
| https://www.example.com/dir2/other.html | nie | inny protokół |
| http://en.example.com/dir2/other.html | nie | inny serwer |
| http://example.com/dir2/other.html | nie | inny serwer |
| http://www.example.com:81/dir2/other.html | nie | inny port |
Obostrzenia w dostępie są szczególnie istotne w przypadku ciasteczek, które bardzo często wykorzystywane są do utrwalenia uwierzytelnienia. Jeśli kod napastnika znajdzie się w treści atakowanego serwisu, posiądzie nie tylko możliwość zmodyfikowania wyglądu tej strony, ale również pozyskania i przesłania (patrz XMLHTTP) innym potencjalnie istotnych danych. Gdyby ten sam kod został umieszczony na innej stronie, przeglądarka ofiary odmówiłaby mu dostępu do zasobów związanych z atakowaną witryną.
Aby atak XSS był możliwy witryna musi prezentować treść przekazaną od użytkownika jako kod HTML serwisu, bez uprzedniej konwersji tekstu na HTML (poprzez zamianę specjalnych znaków HTML na encje). Ochrona przed XSS poprzez samą weryfikację i filtrowanie niebezpiecznych danych jest bardzo trudna[1].
Jeśli treść zawierająca spreparowany skrypt prezentowana jest wyłącznie w odpowiedzi na to konkretne zapytanie, podatność określana jest jako non-persistent XSS i z reguły może być każdorazowo użyta tylko wobec pojedynczych ofiar. Jeśli serwis zapamiętuje przesłaną treść i prezentuje ją kolejnym odwiedzającym (np. na forum internetowym), atak określany jest jako persistent XSS i jego jednorazowe wykorzystanie może posłużyć do naruszenia bezpieczeństwa kont tysięcy użytkowników[2].
Ze względu na szeregową strukturę dokumentów HTML i trudność oddzielenia kodu JavaScript od znaczników kontrolujących prezentację treści, a także ze względu na wady przewidzianych przez JavaScript mechanizmów zabezpieczeń, podatności tego typu są niezwykle częstym problemem we współczesnych dynamicznych witrynach WWW, zwłaszcza w tak zwanych stronach Web 2.0, a ich wyeliminowanie wymaga dużej staranności.
W rzadkich sytuacjach, gdy serwis WWW nie umożliwia użytkownikom dodawania treści, wykorzystanie luki typu SQL Injection może być skuteczną metodą przeprowadzenia ataku persistent XSS. Umożliwia to zmianę danych zapisanych w bazie danych, a w konsekwencji przyczynia się do rozprzestrzenienia złowrogiego skryptu na wszystkich użytkowników strony.
Wraz z upowszechnianiem się aplikacji webowych, rośnie liczba doniesień o podatności istotnych serwisów na ataki XSS. Poniżej kilka przykładów:
Cross-site scripting czasami skracany jest jako "CSS", co może być przyczyną nieporozumień - nie ma to nic wspólnego z kaskadowymi arkuszami stylów, które częściej określane są tym skrótem.