cross site scripting attack tutorial with examples
Пълно ръководство за Cross Site Scripting (XSS) Attack, как да го предотвратите и XSS тестване.
Cross Site Scripting (XSS) е една от най-популярните и уязвими атаки, която е известна на всеки напреднал тестер. Счита се за една от най-рисковите атаки за уеб приложенията и може да доведе и до вредни последици.
XSS често се сравнява с подобни атаки от страна на клиента, тъй като по време на тази атака най-често се използват клиентски езици. XSS атаката обаче се счита за по-рискова поради способността си да уврежда дори по-малко уязвимите технологии.
Този урок за XSS атаки ще ви даде пълен преглед на неговите видове, инструменти и превантивни мерки с перфектни примери с прости думи за вашето лесно разбиране.
Какво ще научите:
- Въведение в XSS Attack
- Как се изпълнява XSS?
- Видове атаки за скриптове на различни сайтове
- Как да тестваме срещу XSS?
- Инструменти за тестване на XSS
- Сравнение с други атаки
- Начини за предотвратяване на XSS
- Превенция според технологиите
- XSS Cheat Sheets
- Заключение
- Препоръчително четене
Въведение в XSS Attack
Атаката Cross Site Scripting е злонамерен инжекционен код, който ще бъде изпълнен в браузъра на жертвата. Зловредният скрипт може да бъде запазен на уеб сървъра и изпълнен всеки път, когато потребителят извика съответната функционалност. Може да се извърши и с другите методи - без никакъв запазен скрипт в уеб сървъра.
Основната цел на тази атака е да открадне данните за самоличността на другия потребител - бисквитки, токени на сесии и друга информация. В повечето случаи тази атака се използва за кражба на бисквитки на другия човек. Както знаем, бисквитките ни помагат да влизаме автоматично. Следователно с откраднати бисквитки можем да влезем с другите самоличности. И това е една от причините, поради която тази атака се счита за една от най-рисковите атаки.
XSS атака се извършва от страна на клиента. Може да се изпълнява с различни клиентски езици за програмиране. Най-често обаче тази атака се извършва с Javascript и HTML.
Препоръчително четиво=> Урок за HTML инжектиране
Как се изпълнява XSS?
Cross Site Scripting атака означава изпращане и инжектиране на зловреден код или скрипт. Зловредният код обикновено се пише с клиентски езици за програмиране като Javascript, HTML, VBScript , Flash и др. Въпреки това Javascript и HTML се използват най-вече за извършване на тази атака.
Тази атака може да се извърши по различни начини. В зависимост от вида на XSS атаката злонамереният скрипт може да бъде отразен в браузъра на жертвата или съхранен в базата данни и изпълнен всеки път, когато потребителят извика съответната функция.
Основната причина за тази атака е неподходящата проверка на въведеното от потребителя, при което злонамерен вход може да попадне в изхода. Злонамерен потребител може да въведе скрипт, който ще бъде инжектиран в кода на уебсайта. Тогава браузърът не може да разбере дали изпълненият код е злонамерен или не.
Следователно злонамерен скрипт се изпълнява в браузъра на жертвата или се показва фалшив формуляр за потребителите. Има няколко форми, при които може да възникне XSS атака.
Основните форми на скриптове на различни сайтове са както следва:
- Cross Site Scripting може да възникне в злонамерен скрипт, изпълнен от страна на клиента.
- Фалшива страница или формуляр, показани на потребителя (където жертвата въвежда идентификационни данни или щраква върху злонамерена връзка).
- На уебсайтовете с показани реклами.
- Злонамерени имейли, изпратени до жертвата.
Тази атака се случва, когато злонамереният потребител намери уязвимите части на уебсайта и го изпрати като подходящ злонамерен вход. Злонамерен скрипт се инжектира в кода и след това се изпраща като изход на крайния потребител.
Нека анализираме прост пример: Помислете, че имаме уебсайт с поле за търсене.
Ако полето за търсене е уязвимо, когато потребителят въведе скрипт, то ще бъде изпълнено.
Помислете, потребителят въвежда много прост скрипт, както е показано по-долу:
alert(‘XSS’)
След това след като щракнете върху 'Търсене' бутон, въведеният скрипт ще бъде изпълнен.
Както виждаме в Пример ,скриптът, въведен в полето за търсене, се изпълнява. Това просто показва уязвимостта на XSS атаката. Въпреки това може да се напише и по-вреден скрипт.
Много тестери смесват Cross Site Scripting атака с Инжектиране на Javascript , което се извършва и от страна на клиента. И в двата случая се инжектира злонамерен скрипт. В XSS обаче не са необходими маркери за изпълнение на скрипта.
Например :
;
Също така, това може да бъде скрипт, изпълнен на другото събитие.
Например:При задържане на мишката.
Нека анализираме друг пример:Помислете, имаме страница, където на уебсайта се показва най-новата рецензия на книгата.
Кодът на тази страница ще изглежда както е показано по-долу:
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
Този код ще превключи HTML екранирането за цялото приложение.
Ако искате да превключите HTML екранирането за съответните форми на страницата, тогава кодът трябва да бъде написан по следния начин:
Има много готови XSS филтри под формата на .jar файл. Бих напомнил, че .jar файлът трябва да бъде добавен към вашия проект и едва тогава неговите библиотеки могат да бъдат използвани. Един такъв XSS филтър е xssflt.jar, който е филтър за сървлети. Този .jar файл може лесно да бъде изтеглен от интернет и добавен към вашия проект.
Този филтър проверява всяка заявка, изпратена до приложението, и я почиства от потенциална инжекция.
частен сървър на ванилия world of warcraft
Когато към проекта се добави файл external.jar, той също трябва да бъде описан във файла web.xml:
XSSFilter com.cj.xss.XSSFilter
Друго възможно решение е ESAPI библиотеката. ESAPI библиотеката е съвместима с много езици за програмиране. Можете да намерите ESAPI библиотеки за езици за програмиране Java и PHP. Това е безплатна библиотека с отворен код, която помага да се контролира сигурността на приложението.
XSS Cheat Sheets
XSS Cheat Sheets могат да бъдат много полезни за предотвратяване на скриптове на сайтове. Това е насока за разработчиците как да се предотвратят XSS атаки. Правилата са много полезни и не трябва да се забравят при разработването. XSS Cheat Sheets могат да бъдат намерени в интернет общности като OWASP (The Open Web Application Security Project).
Различни видове мами:
- XSS Prevention Cheat Sheet
- DOM XSS Cheat Sheet
- XSS филтър за избягване на филтри за избягване
Основната насока би била XSS Prevention Cheat Sheet, тъй като предоставя общи правила за предотвратяване на XSS атаки. Ако следвате правилата за измама на DOM XSS и правилата за измама на филтъра на XSS, пак ще трябва да спазвате измамнически лист за предотвратяване на XSS.
Както беше посочено, XSS Prevention Cheat Sheet може да се намери в общността на OWASP. Този Cheat Sheet ни предоставя списък с правила, които биха ни помогнали да намалим рисковете от възможни XSS атаки. Това са не само правилата за кодиране, но и уязвимостите в сигурността на превантивна основа.
Малко от правилата включват:
- Не трябва да се вмъкват ненадеждни данни.
- HTML трябва да се избягва, преди да се вмъкнат ненадеждни данни.
- Атрибутът трябва да бъде екраниран, преди да вмъкнете ненадеждни данни и т.н.
Следователно Cheat Sheet може да бъде много полезен за предотвратяване на този тип атаки.
Заключение
Докато се тества, силно се препоръчва да се оценят рисковете, които носят възможни XSS атаки. XSS атаката може да засегне уеб приложения, които изглежда също са сигурни.
Счита се за една от най-вредните и рискови атаки. Следователно не бива да забравяме този тип тестване. Докато извършвате тестване срещу XSS, е важно да имате добри познания за тази атака. И това е основата за правилен анализ на резултатите от тестването и избор на подходящите инструменти за тестване.
Вие сте тестер, който се е занимавал с XSS атаки за скриптове на различни сайтове? Имате ли интересни факти за XSS атаки, които биха помогнали и на нашите читатели? Чувствайте се свободни да споделите своя опит с нас в раздела за коментари по-долу !!
Препоръчително четене
- Уроци за задълбочено затъмнение за начинаещи
- Урок за инжектиране на HTML: Видове и превенция с примери
- Урок за тестване на SQL инжектиране (Пример и предотвратяване на атака на SQL инжектиране)
- Какво е DDoS Attack и как да DDoS?
- Урок за селенова мрежа: Настройка и пример за тестване на различни браузъри
- Урок за отражение на Java с примери
- Урок за SVN: Управление на изходния код с помощта на Subversion
- Урок за Python DateTime с примери