Що таке відображений міжсайтовий скриптинг (XSS)

Відображений міжсайтовий скриптинг (XSS) – це тип атаки, коли зловмисник надсилає корисне навантаження цілі у вигляді URL-адреси. Користувач натискає на неї та відкриває вразливий вебдодаток, виконуючи корисне навантаження.

Приклад атаки відображеного XSS

Важливо: ця інформація надана в цілях навчання спеціалістів з безпеки щодо ризиків та специфіки таких атак, і жодним чином не спонукає до протиправних дій.

У цьому прикладі розробник хоче відобразити ім’я поточного автентифікованого користувача на екрані привітання (welcome.php). Він додає таку форму входу на вебсторінку login.php:

<form action="/welcome.php" method="get" id="login">
  <label for="name">Your name:</label>
  <input type="text" id="name" name="name">
  <label for "password">Your password:</label>
  <input type="password" id="password" name="password">
  <button type="submit" form="login" value="login">Log in</button>
</form>

Програма надсилає ім’я та пароль за допомогою методу GET, а потім відображає ім’я на сторінці welcome.php без будь-якої перевірки чи очищення.

Зловмисник створює таку URL-адресу:

http://www.example.com/welcome.php?name=
%3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28
%22%4c%45%41%56%45%20%54%48%49%53%20%50%41
%47%45%21%20%59%4f%55%20%41%52%45%20%42%45
%49%4e%47%20%48%41%43%4b%45%44%21%22%29%3b
%3c%2f%73%63%72%69%70%74%3e

Це закодована форма наступного вмісту:

<script>alert("LEAVE THIS PAGE! YOU ARE BEING HACKED!");</script>

Потім зловмисник надсилає URL-адресу, наприклад, в електронному листі або повідомленні. Ціль натискає на неї, відкриває сторінку welcome.php, і її браузер інтерпретує наступний код:

<strong>Hello, <script>alert("LEAVE THIS PAGE! YOU ARE BEING HACKED!");</script>!</strong>

Браузер знаходить тег <script> та виконує JavaScript-код, що знаходиться в ньому. В результаті відображається спливаюче вікно, яке закликає користувача залишити сторінку.

Виправлення відображеного XSS

Можна використати фільтрацію HTMLPurifier для захисту коду та, додатково, екранування символів HTML. Для цього потрібно імпортувати бібліотеку HTMLPurifier та змінити файл welcome.php наступним чином:

// Display the name of the user
// Use HTMLPurifier with HTML escaping to avoid XSS
$name=$_GET["name"];
// Purify user data using HTMLPurifier
(...)
$purifier = new HTMLPurifier($config);
$purified_name = $purifier->purify($name);
// Just to be sure, HTML-escape special characters
$safe_name = htmlspecialchars($purified_name, ENT_QUOTES);
// Display the safe name
echo "<strong>Hello, ".$safe_name."!</strong>";
(...)

Наслідки відображеного XSS

Відображений міжсайтовий скриптинг вважається менш небезпечним, ніж збережений/постійний XSS, але наслідки також можуть бути жахливими.

Атаку відображеного XSS складніше виконати, оскільки вона вимагає більше, ніж просто створення та надсилання одного корисного навантаження. Зловмиснику також потрібно використовувати методи соціальної інженерії, щоб націлитися на конкретного користувача.

Ось деякі дії, які можуть виконати зловмисні хакери:

  • Вони можуть створити фішингову кампанію та надіслати тисячі електронних листів, що містять шкідливе посилання з корисним навантаженням, яке перенаправляє користувачів на фішингову сторінку, розроблену для імітації вебпрограми. В результаті у великої кількості юзерів можуть бути вкрадені облікові дані.
  • Злочинці можуть створити корисне навантаження, яке перенаправляє користувача на сторінку, що імітує вхід у вебпрограму. Потім ця шкідлива URL-адреса надсилається внутрішнім юзерам, навіть генеральному директору. Якщо навіть один з них піддасться цій хитрощі, зловмисник отримає його облікові дані для ескалації атаки. Зрештою, це може дозволити отримати доступ до інших комп’ютерних систем в організації.

Корисні статті щодо запобігання XSS

Як виявити відображений XSS?

Для цього можна використати наступні методи:

  • DAST – безпечна імітація дій хакера для виявлення вразливостей.
  • SAST – пошук проблем безпеки в коді, як помилки в тексті.

Вони доповнюють одне одного, даючи можливість сканувати сайти від ранніх етапів розробки до продакшну.

Приклади інструментів:

Вони створюють комбінацію двох зрілих рішень завдяки безшовній інтеграції для централізації вразливостей в одну консоль.

Якщо ви хочете безкоштовно протестувати ці рішення, будь ласка, залиште ваші контактні дані нижче, і ми до вас звернемося:

Запит на безкоштовне тестування Invicti / Mend.io

Підписатися на новини