Міжсайтовий скриптинг – це вразливість безпеки додатків, яка дозволяє хакеру впровадити шкідливий код на сайт або мобільний додаток.
XSS-атаки ( Cross Site Scripting, XSS ) відбуваються, коли зловмисник вводить частину коду як вхідні дані. Шкідливий код інтерпретується як розмітка DOM (надає браузеру доступ до вмісту HTML-сторінки) і запускається у браузері жертви. Запустивши свій код у браузері жертви, кіберзлочинець може отримати доступ до конфіденційних даних, а також обійти смполітику єдиного походження (Same-origin policy).
Типи міжсайтового скриптингу
Збережені (постійний) XSS (Stored XSS)
Шкідливий скрипт впроваджується у вразливу програму, де він зберігається або зберігається на вразливій сторінці програми. Коли жертва завантажує заражену сторінку у програмі, шкідливий скрипт виконує контекст сесії користувача. Ось приклад постійного XSS в інструменті Elementor Page Builder.

Відображений XSS (Reflected XSS)
Зловмисник обманом змушує жертву перейти за шкідливим посиланням у вразливому додатку. У цьому сценарії відбиті скрипти впроваджуються в сесію браузера користувача і виконуються як пряме відображення в HTTP-відповідях, що повертаються сервером.

XSS на основі DOM (DOM-based XSS)
XSS на основі DOM також включає шкідливе посилання і може бути впроваджений в браузер жертви по тому ж вектору атаки, що і відбитий XSS, але при цьому DOM-based XSS не вимагає взаємодії з сервером. Шкідливий код зберігається та виконується у браузері.
Кіберзлочинець вбудовує шкідливий скрипт в URL-адресу, при підключенні до цієї сторінки браузер жертви аналізує HTML-сторінку, досягає сценарію і запускає його, витягуючи шкідливий JavaScript. Таким чином захист коду на стороні сервера не захистить від XSS-атак на основі DOM. Незалежність атаки від сервера також ускладнює її виявлення.
Міжсайтовий скриптинг: що може зробити зловмисник при XSS-атаці?
При впровадженні коду в браузер жертви кіберзлочинець може:
- вкрасти конфіденційну інформацію користувача – облікові дані для входу до системи, інформацію про кредитну картку та інші особисті дані;
- перехопити сеанс користувача (якщо ваша програма дозволяє JavaScript зчитувати інформацію про сеанс HTTP);
- надсилати та отримувати дані зі шкідливого веб-сервера;
- отримати доступ до веб-камери, мікрофону та розташування користувача через API HTML 5 або інші відомі вразливості браузера;
- використовувати передові методи фішингу, які буде складно ідентифікувати як звичайному користувачеві, і навіть фахівцю.
Захист від XSS-атак
Забезпечте безпеку фреймворку
Менше XSS-помилок з’являється у додатках, створених з використанням сучасних веб-фреймворків, які мають покращені функції безпеки і допомагають пом’якшити наслідки від XSS-атак, використовуючи шаблони, автоматичне екранування і т.д. Потрібно зрозуміти, як фреймворк запобігає XSS-атакам і де в ньому можуть бути вразливі зони.
Досягніть ідеальної стійкості до ін’єкцій
Для успішної XSS-атаки кіберзлочинцю необхідно впровадити та виконати шкідливий контент на сайті. Тому будь-яка змінна у веб-додатку має бути захищена. Гарантія того, що всі змінні проходять перевірку, а потім екрануються або очищаються, називається ідеальною стійкістю до ін’єкцій. Будь-яка змінна, яка не проходить через цей процес, є потенційною вразливістю. Фреймворки дозволяють досягти ідеальної стійкості, коли всі перемінні перевірені, екрановані чи очищені.
Однак, навіть у популярних фреймворках, таких як React та Angular, присутні прогалини в безпеці. Кодування виводу та очищення HTML допомагають усунути ці недоліки.
Використовуйте кодування вихідних даних (Output Encoding)
Використовуйте кодування вихідних даних вашої платформи за замовчуванням, якщо ви хочете відображати дані у тому вигляді, в якому їх вводить користувач. Функції автоматичного кодування та екранування вбудовані у більшість платформ.
Якщо ви не використовуєте фреймворк або потрібно закрити пробіли безпеки у фреймворку, вам слід використовувати бібліотеку кодування виводу. Кожна змінна, що використовується в інтерфейсі користувача, повинна бути передана через функцію кодування виводу. Список бібліотек кодування вихідних даних включено до програми.
Існує безліч різних методів кодування виводу, оскільки браузери по-різному аналізують HTML, JS, URL-адреси та CSS. Використання неправильного методу може призвести до вразливостей або погіршити функціональність вашої програми.
Очищайте HTML
Іноді користувачам потрібно створити HTML. Ви можете дати клієнтам можливість змінювати стиль або структуру вмісту в редакторі WYSIWYG. Кодування виводу тут запобігає XSS-атаці, але порушить функціональність програми, а стилі не відображатимуться. У таких випадках слід використовувати очищення HTML.
