Найти в Дзене
Антон Крылосов

Что такое XSS-атаки и как они работают.

Что такое XSS-уязвимость? XSS-уязвимость - это уязвимость, которая заключается во внедрении кода, исполняемого на стороне клиента в веб-страницу, которую просматривают другие пользователи. Существует два типа XSS-уязвимостей - активная и пассивная. Активная уязвимость более опасна, чем пассивная, потому что злоумышленнику не нужно заманивать жертву перейти по специальной ссылке, ему достаточно внедрить вредоносный код в базу или файл на сервере. Таким образом, все посетители сайта автоматически становятся жертвами. Код также может быть интегрирован, например, с помощью SQL-внедрений. Поэтому не стоит доверять данным, хранящимся в базе данных, даже если они были обработаны при вставке, так как код может быть зашифрован. Пассивная же уязвимость требует социальной инженерии, например, "важное письмо", отправляемое от имени администрации сайта с просьбой перейти по вредоносной ссылке. Также для проведения пассивной XSS-атаки нужно знать определённую информацию о жертве (например, адрес эле

Что такое XSS-уязвимость? XSS-уязвимость - это уязвимость, которая заключается во внедрении кода, исполняемого на стороне клиента в веб-страницу, которую просматривают другие пользователи.

Существует два типа XSS-уязвимостей - активная и пассивная.

Активная уязвимость более опасна, чем пассивная, потому что злоумышленнику не нужно заманивать жертву перейти по специальной ссылке, ему достаточно внедрить вредоносный код в базу или файл на сервере. Таким образом, все посетители сайта автоматически становятся жертвами. Код также может быть интегрирован, например, с помощью SQL-внедрений. Поэтому не стоит доверять данным, хранящимся в базе данных, даже если они были обработаны при вставке, так как код может быть зашифрован.

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

https://example.com/dangerous_site.php?var=<script>alert('xss-vulnerability');</script>

Пример вредоносной формы:

<form method="post" action="https://example.com/dangerous_site.php">
<input type="hidden" name="var" value="<script>alert('xss-vulnerability')</script>">
</form>
<script type="text/javascript">
document.getElementsByTagName('form')[0].submit();
</script>

Пассивной XSS-уязвимости могут быть подвержены как GET, так и POST запросы. С POST запросами придётся идти на ухищрения, например, настраивать переадресацию. С GET запросами же всё намного легче, так как жертве легче заметить подозрительный адрес, чем дополнительный параметр.

Примеры XSS-уязвимостей

Начнём с наиболее часто приводимого примера XSS-атаки - кражи Cookies. В файлах куки некоторые сайты хранят конфиденциальную информацию, обычно это логин и пароль (в большинстве случаев зашифрованный). Так вот, самой опасной считается кража активной сессии, поэтому не забывайте выходить из аккаунта регулярно, особенно если вы находитесь в незащищённой (открытой) сети. К несчастью для хакера, на большинстве ресурсов время жизни сессии ограничено. Поэтому-то и ввели доменные ограничения на XMLHttpRequest, однако злоумышленнику это не страшно, так как есть теги <iframe>, <img>, <script> и так далее.

Следующим примером XSS-уязвимости является кража данных из форм. Например, ищем форму для введения пароля. Вводим данные и, если сервер хранит конфиденциальную информацию в базе данных, то злоумышленник сможет украсть ту информацию, которую мы ввели, а если это окажется пароль или номер карты, то нанесённый вред будет огромным. Данный способ атаки похож на фишинг, только при отправке данных в базу используется реальный сайт, а не поддельный, что исключает использование социальной инженерии.

Также XSS-уязвимость может использоваться для проведения DDoS-атаки. Суть DDoS-атаки заключается в том, что на сервер отправляется огромное количество запросов, которые сервер не выдерживает. Отношение к XSS имеет косвенное, так как скрипты могут и не использоваться, достаточно небольшой формы вроде этой:

<img src="https://example.com">

Подделка межсайтовых запросов, или CSRF-уязвимость, о которой мы поговорим в следующей статье, также имеет к XSS-уязвимости косвенное отношение. Суть в том, что пользователь, авторизованный на неуязвимом сайте, заходит либо на уязвимый сайт, либо на специальную страницу злоумышленника, с которого/которой отправляется запрос на совершение определённых действий, использование которых пользователь не предполагал. Поэтому большинство сайтов при совершении определённых действий переспрашивают пароль или просят ввести код подтверждения.

Существуют также так называемые XSS-черви. Появились они благодаря социальным сетям таким как ВКонтакте и Twitter. Суть в том, что нескольким пользователям соцсети рассылается уязвимая ссылка, при переходе на которую внедрённый в страницу либо в ссылку скрипт рассылает такие же сообщения другим пользователям, при этом также могут совершаться другие действия, например отсылка личных данных злоумышленнику.

Защита от XSS-уязвимостей

Для защиты от XSS-уязвимостей можно установить временное ограничение на срок действия сессии. Также нужно защитить базу данных и Cookie-файлы пользователей от посторонних внедрений.

В следующей статье я расскажу про CSRF-уязвимости. Ну а на этом всё :)