Отображенный межсайтовый скриптинг (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-атак
- Предотвращение XSS в приложениях на Java
- Предотвращение XSS в веб-приложениях на React
- Гайд по XSS в Angular: примеры и предотвращение
Как обнаружить отображенный XSS?
Для этого можно использовать следующие методы:
- DAST – безопасная имитация действий хакера для обнаружения уязвимостей.
- SAST – поиск проблем безопасности в коде как ошибки в тексте.
Они дополняют друг друга, давая возможность сканировать сайты от ранних этапов разработки до продакшна.
Примеры инструментов:
- Invicti DAST (ранее Acunetix и Netsparker)
- Mend SAST
Они создают комбинацию двух зрелых решений благодаря бесшовной интеграции для централизации уязвимостей в одну консоль.
Если вы хотите бесплатно протестировать эти решения, пожалуйста, оставьте ваши контактные данные ниже, и мы обратимся к вам:







