cross site scripting attack tutorial with examples
Kompletny przewodnik po atakach typu Cross Site Scripting (XSS), sposobach zapobiegania im i testowaniu XSS.
Cross Site Scripting (XSS) to jeden z najpopularniejszych i najbardziej podatnych na ataki ataków, o którym wie każdy zaawansowany tester. Jest uważany za jeden z najbardziej ryzykownych ataków na aplikacje internetowe i może mieć również szkodliwe konsekwencje.
XSS jest często porównywany z podobnymi atakami po stronie klienta, ponieważ podczas tego ataku używane są głównie języki po stronie klienta. Jednak atak XSS jest uważany za bardziej ryzykowny ze względu na jego zdolność do niszczenia nawet mniej wrażliwych technologii.
W tym samouczku dotyczącym ataku XSS przedstawimy pełny przegląd jego typów, narzędzi i środków zapobiegawczych z doskonałymi przykładami w prostych słowach dla łatwego zrozumienia.
Czego się nauczysz:
- Wprowadzenie do XSS Attack
- Jak przebiega XSS?
- Typy ataków cross-site scripting
- Jak testować przeciwko XSS?
- Narzędzia testowe XSS
- Porównanie z innymi atakami
- Sposoby zapobiegania XSS
- Zapobieganie według technologii
- XSS Cheat Sheets
- Wniosek
- rekomendowane lektury
Wprowadzenie do XSS Attack
Atak typu Cross Site Scripting to wstrzyknięcie złośliwego kodu, który zostanie wykonany w przeglądarce ofiary. Szkodliwy skrypt może zostać zapisany na serwerze WWW i wykonywany za każdym razem, gdy użytkownik wywoła odpowiednią funkcję. Można to również wykonać innymi metodami - bez żadnego zapisanego skryptu na serwerze WWW.
Głównym celem tego ataku jest kradzież danych dotyczących tożsamości innych użytkowników - plików cookie, tokenów sesji i innych informacji. W większości przypadków ten atak jest używany do kradzieży plików cookie drugiej osoby. Jak wiemy, pliki cookie pomagają nam logować się automatycznie. Dlatego za pomocą skradzionych plików cookie możemy zalogować się przy użyciu innych tożsamości. I to jest jeden z powodów, dla których ten atak jest uważany za jeden z najbardziej ryzykownych ataków.
Atak XSS jest wykonywany po stronie klienta. Można to wykonać za pomocą różnych języków programowania po stronie klienta. Jednak najczęściej ten atak jest przeprowadzany za pomocą JavaScript i HTML.
Zalecana lektura=> Samouczek HTML Injection
Jak przebiega XSS?
Atak typu Cross Site Scripting polega na wysyłaniu i wstrzykiwaniu złośliwego kodu lub skryptu. Złośliwy kod jest zwykle napisany w językach programowania po stronie klienta, takich jak Javascript, HTML, VBScript , Flash itp. Jednak JavaScript i HTML są najczęściej używane do przeprowadzania tego ataku.
Atak ten można wykonać na różne sposoby. W zależności od rodzaju ataku XSS, złośliwy skrypt może zostać odbity w przeglądarce ofiary lub przechowywany w bazie danych i wykonywany za każdym razem, gdy użytkownik wywoła odpowiednią funkcję.
Głównym powodem tego ataku jest niewłaściwa weryfikacja danych wejściowych użytkownika, w wyniku której do danych wyjściowych mogą dostać się złośliwe dane. Złośliwy użytkownik może wprowadzić skrypt, który zostanie wstrzyknięty do kodu witryny. Wówczas przeglądarka nie jest w stanie stwierdzić, czy wykonywany kod jest złośliwy, czy nie.
Dlatego w przeglądarce ofiary jest wykonywany złośliwy skrypt lub jakakolwiek sfałszowana forma jest wyświetlana użytkownikom. Istnieje kilka form ataku XSS.
Główne formy Cross Site Scripting to:
- W przypadku złośliwego skryptu wykonywanego po stronie klienta może wystąpić Cross Site Scripting.
- Fałszywa strona lub formularz wyświetlany użytkownikowi (w którym ofiara wpisuje poświadczenia lub klika złośliwy link).
- Na stronach internetowych z wyświetlanymi reklamami.
- Szkodliwe e-maile wysłane do ofiary.
Atak ten ma miejsce, gdy złośliwy użytkownik znajdzie podatne na ataki części witryny sieci Web i wyśle je jako odpowiednie złośliwe dane wejściowe. Złośliwy skrypt jest wstrzykiwany do kodu, a następnie wysyłany jako dane wyjściowe do użytkownika końcowego.
Przeanalizujmy prosty przykład: Rozważmy, że mamy witrynę internetową z polem wyszukiwania.
Jeśli pole wyszukiwania jest podatne na atak, gdy użytkownik wejdzie do dowolnego skryptu, zostanie on wykonany.
Rozważmy, że użytkownik wprowadza bardzo prosty skrypt, jak pokazano poniżej:
alert(‘XSS’)
Następnie po kliknięciu na 'Szukaj' przycisk, wprowadzony skrypt zostanie wykonany.
Jak widzimy w Przykład ,skrypt wpisany w pole wyszukiwania zostanie wykonany. To tylko pokazuje podatność ataku XSS. Jednak można również wpisać bardziej szkodliwy skrypt.
Wielu testerów myli atak Cross Site Scripting z Wstrzyknięcie JavaScript , który jest również wykonywany po stronie klienta. W obu atakach wstrzykuje się złośliwy skrypt. Jednak w przypadku ataku XSS tagi nie są konieczne do wykonania skryptu.
Na przykład :
;
Może to być również skrypt wykonywany na innym zdarzeniu.
Na przykład:Po najechaniu myszą.
Przeanalizujmy inny przykład:Weź pod uwagę, że mamy stronę, na której jest wyświetlana najnowsza recenzja książki.
Kod tej strony będzie wyglądał jak poniżej:
print '' print '. If this vulnerability is present in the web application, an indicated text will be inserted intags. Trying to pass some code through HTTP request as this is also a method to check if this attack is possible.
Generally, while testing for possible XSS attack, input validation should be checked and the tester should be conscious while checking the website’s output. Also if a code review is being performed, it is important to find how input can get into the output.
XSS Testing Tools
As Cross Site Scripting attack is one of the most popular risky attacks, there are a plenty of tools to test it automatically. We can find various scanners to check for possible XSS attack vulnerabilities – like, Nesus and Nikto. Both of which are considered as quite reliable.
From my software testing career, I would like to mention SOAP UI tool. SOAP UI can be considered as a quite strong tool for checking against the possible XSS attacks. It contains ready templates for checking against this attack. It really simplifies the testing process.
However, in order to test for this vulnerability with SOAP UI tool, API level testing should already be automated with that tool. Another solution to test against XSS can be browser plugins. However, plugins are considered as quite a weak tool to check against this type of attack.
Even while testing automatically, the tester should have good knowledge of this attack type and should be able to analyze the results appropriately.
Good knowledge is also helpful while selecting the testing tool. Also, it is important to know, that while performing scanning for security vulnerabilities with an automatic tool, testing manually is also a good practice and this way the tester will be able to see the results and analyze them.
Recommended Tool:
#1) Kiuwan

Find and fix vulnerabilities in your code at every stage of the SDLC.
Kiuwan is compliant with the most stringent security standards including OWASP, CWE, SANS 25, HIPPA, and more. Integrate Kiuwan in your IDE for instant feedback during development.
Kiuwan supports all major programming languages and integrates with leading DevOps tools.
=> Scan your code for free
Comparison with Other Attacks
XSS is considered to be one of the riskiest attacks, as its main purpose is to steal the website’s or system’s user identities. Also, XSS attack can be performed with different client-side languages like Javascript, HTML, VBScript, Flash, etc. And this makes it more harmful and widespread than the other possible attacks.
Testing for XSS attack is quite similar to testing for the other possible client-side attacks. However, it is important to remember what additional cases should be checked while testing for XSS.
Another thing, that makes this attack riskier is the possibility to be stored in the web service – this way it can affect many users for a longer period of time. XSS sometimes can be performed to even less vulnerable systems and its vulnerabilities are sometimes difficult to be found.
Also, while comparing with the other attacks, XSS has many ways to be performed and affect the website as well.
Ways to Prevent XSS
Though this type of attack is considered to be one of the most dangerous and risky one, still a preventing plan should be prepared. Because of the popularity of this attack, there are quite many ways to prevent it.
Commonly used main prevention methods include:
- Data validation
- Filtering
- Escaping
The first step in the prevention of this attack is Input validation . Everything, that is entered by the user should be precisely validated, because the user’s input may find its way to the output. Data validation can be named as the basis for ensuring the system’s security. I would remind, that the idea of validation is not to allow inappropriate input.
Therefore it just helps to reduce the risks, but may not be enough to prevent the possible XSS vulnerability.
Another good prevention method is user’s input filtering. The idea of the filtering is to search for risky keywords in the user’s input and remove them or replace them by empty strings.
Those keywords may be:
- tags
- Javascript commands
- HTML markup
Input filtering is quite easy to practice. It can be performed in different ways too.
Like:
- By developers who have written server-side code.
- Appropriate programming language’s library is being used.
In this case, some developers write their own code to search for appropriate keywords and remove them. However, the easier way would be to select appropriate programming languages library to filter the user’s input. I would like to comment, that using libraries is a more reliable way, as those libraries were used and tested by many developers.
Another possible prevention method is characters escaping . In this practice, appropriate characters are being changed by special codes. For Example, Meanwhile, good testing should not be forgotten as well. It should be invested in good software testers knowledge and reliable software testing tools. This way good software quality will be better assured.
Prevention According to Technologies
As already discussed, filtering and characters escaping are the main prevention methods. However, it can be performed differently in different programming languages. Some programming languages have appropriate filtering libraries and some do not.
It should be mentioned, that filtering can be performed quite easily in Java and PHP programming languages, as they have appropriate libraries for it.
Java technology is quite widely used, therefore there are many solutions to it. If you are using Spring technology and if you would like to escape HTML for the whole application, then you have to write the appropriate code in the project’s web.xml file.
defaultHtmlEscape true
Ten kod przełączy ucieczkę HTML dla całej aplikacji.
Jeśli chcesz zmienić znaki ucieczki HTML dla odpowiednich formularzy strony, kod powinien być napisany w następujący sposób:
Istnieje wiele gotowych filtrów XSS w postaci pliku .jar. Przypominam, że plik .jar trzeba dodać do swojego projektu i dopiero wtedy można korzystać z jego bibliotek. Jednym z takich filtrów XSS jest xssflt.jar, który jest filtrem serwletów. Ten plik .jar można łatwo pobrać z Internetu i dodać do projektu.
Ten filtr sprawdza każde żądanie, które jest wysyłane do aplikacji i czyści je z potencjalnego wstrzyknięcia.
najlepsze oprogramowanie do klonowania dysków twardych w systemie Windows 10
Gdy do projektu zostanie dodany plik external.jar, należy go również opisać w pliku web.xml:
XSSFilter com.cj.xss.XSSFilter
Innym możliwym rozwiązaniem jest biblioteka ESAPI. Biblioteka ESAPI jest kompatybilna z wieloma językami programowania. Możesz znaleźć biblioteki ESAPI dla języków programowania Java i PHP. Jest to otwarta i bezpłatna biblioteka, która pomaga kontrolować bezpieczeństwo aplikacji.
XSS Cheat Sheets
XSS Cheat Sheets mogą być bardzo pomocne w zapobieganiu cross-site scripting. Jest to wskazówka dla programistów, jak zapobiegać atakom XSS. Zasady są bardzo pomocne i nie należy o nich zapominać podczas tworzenia. Cheat Sheets XSS można znaleźć w społecznościach internetowych, takich jak OWASP (The Open Web Application Security Project).
Różne rodzaje ściągawek:
- Ściągawka dotycząca zapobiegania XSS
- Ściągawka DOM XSS
- Ściągawka z filtrem XSS
Główną wytyczną byłaby ściągawka dotycząca zapobiegania atakom XSS, ponieważ zawiera ona wspólne zasady dotyczące zapobiegania atakom XSS. Jeśli chcesz przestrzegać zasad ściągawki DOM XSS i oszustw związanych z unikaniem filtrów XSS, nadal będziesz musiał przestrzegać ściągawki zapobiegającej XSS.
Jak już wspomniano, ściągawki dotyczące zapobiegania XSS można znaleźć w społeczności OWASP. Ta ściągawka zawiera listę reguł, które pomogłyby nam zmniejszyć ryzyko ewentualnych ataków XSS. To nie tylko zasady kodowania, ale także luki w zabezpieczeniach na podstawie prewencji.
Kilka zasad obejmuje:
- Nie należy wstawiać niezaufanych danych.
- Przed wstawieniem jakichkolwiek niezaufanych danych należy zastosować znaki ucieczki HTML.
- Atrybut powinien zostać zmieniony przed wstawieniem niezaufanych danych itp.
Dlatego ściągawka może być bardzo pomocna w zapobieganiu tego typu atakom.
Wniosek
Podczas testowania zdecydowanie zaleca się ocenę zagrożeń, które niosą ze sobą możliwe ataki XSS. Atak XSS może wpłynąć na aplikacje internetowe, które również wydają się być bezpieczne.
Uważany jest za jeden z najbardziej szkodliwych i ryzykownych ataków. Dlatego nie powinniśmy zapominać o tego typu testach. Przeprowadzając testy przeciwko XSS, ważne jest, aby mieć dobrą wiedzę na temat tego ataku. I to jest podstawa do poprawnej analizy wyników testów i doboru odpowiednich narzędzi badawczych.
Czy jesteś testerem, który zajmował się atakami XSS z wykorzystaniem cross-site scripting? Czy masz jakieś ciekawe fakty dotyczące ataków XSS, które pomogłyby również naszym czytelnikom? Zapraszam do podzielenia się z nami swoimi doświadczeniami w sekcji komentarzy poniżej !!
rekomendowane lektury
- Dogłębne samouczki dotyczące Eclipse dla początkujących
- Samouczek dotyczący wstrzykiwania HTML: typy i zapobieganie z przykładami
- Samouczek dotyczący testowania SQL Injection (przykład i zapobieganie atakowi SQL Injection Attack)
- Co to jest atak DDoS i jak to zrobić?
- Samouczek Selenium Grid: Konfiguracja i przykład testowania w różnych przeglądarkach
- Samouczek dotyczący refleksji w języku Java z przykładami
- Samouczek SVN: Zarządzanie kodem źródłowym przy użyciu Subversion
- Python DateTime Tutorial z przykładami