Атакующий, в общем случае, напрямую не нацелен на конкретную жертву. Вместо этого он эксплуатирует уязвимость в коде сайта, который посещают люди. Для браузера жертвы вредоносный код является частью сайта и поэтому сайт выступает в роли “носителя вируса“.

Полное руководство по XSS. Часть 1
Межсайтовый скриптинг (XSS) представляет собой внедрение кода, которое позволит атакующему исполнить вредоносный Javascript-код в браузере пользователя. Я уже писал о XSS, а в этой и последующих статьях я более подробно остановлюсь на этой теме.

Атакующий, в общем случае, напрямую не нацелен на конкретную жертву. Вместо этого он эксплуатирует уязвимость в коде сайта, который посещают люди. Для браузера жертвы вредоносный код является частью сайта и поэтому сайт выступает в роли “носителя вируса“.

Единственный путь для атакующего запустить вредоносный JS-код в браузере жертвы – это внедрить его в одну из страниц, которую может загрузить жертва с сайта. Подобная атака становится возможной, если на сайте есть включение пользовательского ввода на странице (комментарии к статье, например). У атакующего появляется возможность вставить произвольную строку, которая будет рассматриваться как правильный код браузером жертвы.

В примере ниже, простой серверный скрипт используется для вывода последнего комментария на сайте.

<?php

  $db = DB::getInstance(); // получаем соединение с базой данных
  $lastComment = $db -> getLastComment(); // получаем последний комментарий
  print $lastComment;

?>

В данном случае подразумевается, что комментарий состоит только из текста, и что, при его сохранении в базе данных разработчик сайта не фильтрует входные данные, т.е. на сайте – уязвимость. Поэтому атакующий может отправить комментарий с подобным содержанием:

  <script> alert(“Ваш сайт взломан”); </script>

И любой пользователь, который посетит эту страницу, будет атакован.

Чем опасен вредоносный Javascript-код? Возможность исполнения JS-кода в браузере жертвы, на первый взгляд, может показаться не такой опасной. В конце концов, сильно сокращенная среда выполнения Javascript, серьёзно ограничивает доступ к файлам пользователя и к операционной системе вцелом. Вы можете открыть консоль вашего браузера и выполнить там любой код – он не причинит вреда вашему компьютеру.

Однако, не все так просто. Вот в таких случаях JS код становится крайне опасным:

  1. У Javascript есть доступ к части конфиденциальной пользовательской информации (cookie).
  2. Javascript может отсылать HTTP-запросы с произвольным содержанием на произвольные адреса используя Ajax и другие механизмы.
  3. С помощью Javascript можно делать произвольные модификации в HTML- коде текущей страницы с помощью DOM.

Эти особенности вместе взятые, создают серьёзные угрозы безопасности.

Последствия вредоносного кода

Среди прочего возможность исполнить произвольный Javascript в браузере открывает для атакующего возможность следующих атак:

  1. Похищение cookie. Атакующий может получить доступ к cookie жертвы с сайта, используя document.cookie, отправить их на свой сервер и извлечь из них важную информацию, например идентификатор сессии.
  2. Запись нажатий клавиш. Ставится слушатель (listener) на нажатие клавиш и весь вводимый на странице текст отправляется атакующему.
  3. Фишинг. Замена легитимных адресов форм, например авторизации, на подконтрольные атакующему адреса.

Несмотря на то, что сами эти атаки отличаются друг от друга существенно, они все имеют общую особенность: внедренный в страницу код исполняется в контексте сайта. Это означает, что вредоносный код рассматривается, как и любой другой скрипт на странице: у него есть доступ ко всем данным жертвы. И этот скрипт может делать все, что может делать любой другой скрипт на странице – в этом и заключается особая опасность XSS.