cross site scripting attack tutorial with examples
Повний посібник з атак міжсайтових сценаріїв (XSS), як запобігти цьому та тестування XSS.
Cross Site Scripting (XSS) - одна з найпопулярніших і вразливих атак, яку знає кожен просунутий тестер. Це вважається однією з найризикованіших атак для веб-додатків і може також спричинити шкідливі наслідки.
XSS часто порівнюють із подібними атаками на стороні клієнта, оскільки під час цієї атаки в основному використовуються мови на стороні клієнта. Однак атака XSS вважається більш ризикованою через її здатність пошкодити навіть менш вразливі технології.
У цьому підручнику з атак XSS ми дамо вам повний огляд його типів, інструментів та запобіжних заходів з досконалими прикладами, простими словами, для зручності розуміння.
Що ви дізнаєтесь:
- Вступ до XSS Attack
- Як виконується XSS?
- Типи атак між сценаріями між сайтами
- Як тестувати проти XSS?
- Інструменти тестування XSS
- Порівняння з іншими атаками
- Способи запобігання XSS
- Профілактика за технологіями
- XSS шпаргалки
- Висновок
- Рекомендована література
Вступ до XSS Attack
Атака міжсайтових сценаріїв - це введення зловмисного коду, яке буде виконано в браузері жертви. Шкідливий скрипт можна зберігати на веб-сервері та виконувати щоразу, коли користувач викликає відповідну функціональність. Це також можна виконати іншими методами - без збереженого сценарію на веб-сервері.
Основна мета цієї атаки - викрасти дані особи іншого користувача - файли cookie, маркери сеансів та іншу інформацію. У більшості випадків ця атака використовується для викрадення файлів cookie іншої особи. Як ми знаємо, файли cookie допомагають нам автоматично входити в систему. Тому з викраденими файлами cookie ми можемо входити з іншими особами. І це одна з причин, чому ця атака розглядається як одна з найбільш ризикованих.
Атака XSS виконується на стороні клієнта. Це може бути виконано з різними мовами програмування на стороні клієнта. Однак найчастіше ця атака виконується за допомогою Javascript та HTML.
Рекомендуємо прочитати=> Підручник з ін’єкції HTML
Як виконується XSS?
Напад між сценаріями між сайтами означає надсилання та ін’єкцію шкідливого коду або сценарію. Зловмисний код зазвичай пишеться мовами програмування на стороні клієнта, такими як Javascript, HTML, VBScript , Flash тощо. Однак для здійснення цієї атаки в основному використовуються Javascript та HTML.
Цю атаку можна здійснити різними способами. Залежно від типу атаки XSS, шкідливий скрипт може відображатися в браузері жертви або зберігатися в базі даних і виконуватися щоразу, коли користувач викликає відповідну функцію.
Основною причиною цієї атаки є невідповідна перевірка введення користувачем, коли шкідливий вхід може потрапити у вихідні дані. Зловмисний користувач може ввести сценарій, який буде введено в код веб-сайту. Тоді браузер не може дізнатися, чи є виконаний код зловмисним чи ні.
Тому шкідливий скрипт виконується в браузері жертви або для користувачів відображається будь-яка підроблена форма. Є кілька форм, в яких може відбуватися атака XSS.
Основними формами міжсайтових сценаріїв є такі:
- Сценарії між сайтами можуть виникати на шкідливих сценаріях, що виконуються на стороні клієнта.
- Підроблена сторінка або форма, що відображаються користувачеві (де жертва вводить облікові дані або натискає шкідливе посилання).
- На веб-сайтах з рекламою, що відображається.
- Шкідливі електронні листи, надіслані жертві.
Ця атака відбувається, коли зловмисний користувач знаходить вразливі частини веб-сайту та надсилає його відповідною шкідливою інформацією. Шкідливий скрипт вводиться в код, а потім надсилається кінцевому користувачеві як результат.
Давайте проаналізуємо простий приклад: Уявімо, у нас є веб-сайт із пошуковим полем.
Якщо поле пошуку вразливе, коли користувач вводить будь-який сценарій, воно буде виконане.
Подумайте, користувач вводить дуже простий скрипт, як показано нижче:
alert(‘XSS’)
Потім після натискання на “Пошук” кнопку, введений скрипт буде виконаний.
Як ми бачимо в Приклад ,сценарій, введений у поле пошуку, виконується. Це просто показує вразливість атаки XSS. Однак може бути введений і більш шкідливий сценарій.
Багато тестувальників змішують атаки між сайтами Ін’єкція 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 можна легко завантажити з Інтернету та додати до проекту.
Цей фільтр перевіряє кожен запит, який надсилається додатку, і очищає його від потенційного введення.
питання співбесіди про мило та відпочинок
Коли до проекту додається файл external.jar, він також повинен бути описаний у файлі web.xml:
XSSFilter com.cj.xss.XSSFilter
Іншим можливим рішенням є бібліотека ESAPI. Бібліотека ESAPI сумісна з багатьма мовами програмування. Ви можете знайти бібліотеки ESAPI для мов програмування Java та PHP. Це безкоштовна бібліотека з відкритим кодом, яка допомагає контролювати безпеку програми.
XSS шпаргалки
Шпаргалки XSS можуть бути дуже корисними для запобігання сценаріям між сайтами. Це рекомендація для розробників щодо запобігання атакам XSS. Правила дуже корисні і про них не слід забувати під час розробки. Шахматні таблиці XSS можна знайти в Інтернет-спільнотах, таких як OWASP (Відкритий проект безпеки веб-додатків).
Різні типи шпаргалок:
- Шпаргалка для запобігання XSS
- DOM XSS шпаргалка
- Шпаргалка для ухилення від фільтру XSS
Основним орієнтиром буде шпаргалка XSS Prevention, оскільки вона надає загальні правила запобігання атакам XSS. Якщо ви будете слідувати правилам шпаргалок DOM XSS та правилам шпаргалки ухилення фільтра XSS, вам все одно доведеться дотримуватися шпаргалки запобігання XSS.
Як вже зазначалося, шпаргалку для запобігання XSS можна знайти в спільноті OWASP. Ця шпаргалка надає нам перелік правил, які допоможуть нам зменшити ризики можливих атак XSS. Це не тільки правила кодування, але й вразливі місця безпеки на засадах запобігання.
Кілька правил включають:
- Недовірливі дані не слід вставляти.
- HTML слід уникати, перш ніж вставляти будь-які ненадійні дані.
- Атрибут повинен бути захищений перед вставкою ненадійних даних тощо.
Отже, шпаргалка може бути дуже корисною для запобігання подібним атакам.
Висновок
Під час тестування настійно рекомендується оцінити ризики, які спричиняють можливі атаки XSS. Атака XSS може вплинути на веб-програми, які, здається, також безпечні.
Вважається, що це одна з найбільш шкідливих і ризикованих атак. Отже, ми не повинні забувати про цей тип тестування. Виконуючи тестування проти XSS, важливо добре знати про цю атаку. І це основа для правильного аналізу результатів тестування та вибору відповідних інструментів тестування.
Ви тестер, який займався XSS-атаками між сценаріями між сайтами? Чи є у вас цікаві факти про атаки XSS, які також допомогли б нашим читачам? Не соромтеся поділитися з нами своїм досвідом у розділі коментарів нижче !!
Рекомендована література
- Поглиблені підручники Eclipse для початківців
- Підручник з ін’єкцій HTML: типи та попередження на прикладах
- Підручник з тестування ін’єкцій SQL (Приклад та запобігання атаці ін’єкцій SQL)
- Що таке DDoS Attack і як DDoS?
- Підручник із селенової сітки: Налаштування та приклад крос-браузерного тестування
- Підручник з роздумів про Java з прикладами
- Підручник SVN: Управління вихідним кодом за допомогою Subversion
- Підручник з Python DateTime із прикладами