Главная / XSS / Отражённые XSS

Что такое отражённые XSS

Суть отражённой XSS заключается в том, что бэкэнд не фильтрует (или плохо фильтрует) полученные от пользователя данные и выводит их в браузер. Таким образом злоумышленнику как правило достаточно просто сформировать ссылку и заманить на нее пользователя.

Пример уязвимости

Предположим у нас есть код который выводит имя пользователя полученное из GET параметра

echo '<h1>Привет, '.$_GET['username'].'</h1>';

Если мы переходим по ссылке some.site/hello?name=Вася то страница будет содержать следующий контент:

<h1>Привет, Вася</h1>

Но если мы запросим страницу some.site/hello?name=Вася</h1><script>alert('xss')</script><h1> и страница будет содержать следующий html код

<h1>Привет, Вася</h1><script>alert('xss')</script><h1></h1>

Таким образом в браузере пользователя выполнится JavaScript код злоумышленника.

Защита

Необходимо всегда фильтровать данные полученные из вне. В php есть замечательная функция htmlspecialchars которая поможет спастись от xss атак.

htmlspecialchars — Преобразует специальные символы в HTML-сущности Производятся следующие преобразования: '&' (амперсанд) преобразуется в '&' '"' (двойная кавычка) преобразуется в '"' в режиме ENT_NOQUOTES is not set. "'" (одиночная кавычка) преобразуется в ''' (или ') только в режиме ENT_QUOTES. '<' (знак "меньше чем") преобразуется в '<' '>' (знак "больше чем") преобразуется в '>'

Чтобы избавиться от уязвимости в коде выше, необходимо переписать его следующим образом

$username = htmlspecialchars($_GET['username']);
echo '<h1>Привет, '.$username.'</h1>';

Теперь, при переходе по ранее уязвимой ссылке some.site/hello?name=Вася</h1><script>alert('xss')</script><h1> будет выведен следующий html

<h1>Привет, Вася&lt;/h1&gt;&lt;script&gt;alert('xss')&lt;/script&gt;&lt;h1&gt;</h1>

Пользователь при этом увидит

Привет, Вася

</h1><script>alert('xss')</script><h1>