Язык
Контакты
GitHub
Поддержка
Регистрация
Войти
Логин: Пароль: Запомнить:
Пользователи
Голосование

    Какую CMS Вы предпочитаете

    AtomX
    Fapos CMS
    Drunya CMS
Последние комментарии
Автор: чайник, в новости:

Что такое API и для чего они нужны

Автор: HIshnik, в новости:

Классы в PHP для чайников

Автор: Аноним, в новости:

Написание простого вируса в блокноте

Автор: stream, в новости:

Создаем BB коды на PHP

Топ пользователей
Drunya
Репутация: 108
Сообщений: 3527
Сашка_из_Шебекино
Репутация: 87
Сообщений: 1803
boriska
Репутация: 65
Сообщений: 846
ARMI
Репутация: 46
Сообщений: 1858
BAH0
Репутация: 26
Сообщений: 544
Собственно, если кто не в курсе, XSS - это межсайтовый скриптинг (Cross Site Scripting), но так как аббревиатура "CSS" уже занята, данный вид уязвимостей был окрещен XSS. Но так как я сейчас рассказал расказывают везде, а хотелось бы преподнести все еще проще и понятней, да так что бы человек далекий от премудростей сайтостроения и программирования понял, что же это такое и нахрен о нем вообще писать. Ну что же, какой тяжелой бы не оказалась ноша, которую я на себя взвалил, я постараюсь донести ее до конца с гордым лицом....и легкой ухмылкой:)

Теория в примерах
По сути XSS - это запуск некоего скрипта на целевом сайте. Этот скрипт обычно находится на другом сервере и о том что его можно запутить хозяин целевого сайта не подозревает, но иногда этого и не приходиться делать, так как можно просто отправить некий код во входящих данных и он будет выполнен. Рассмотрим примеры с BB кодами.
Некоторое время назад, в одном из всемирно известных движках была обнаружена XSS в BB коде, который делал следующее: он заменял
1
[img*]http://host/image.jpg[/img]

на

1
<img src=http://host/image.jpg />

и при этом, пропускались не только валидные ссылки, а почти любые данные. Например, вместо "http://host/image.jpg" могло быть "ya krevedko". И это, господа XSS, познакомьтесь. Как? Я покажу:
Представьте что будет, если я вставлю в BB код не ссылку на картинку, а скажем вот такой код

1
http://host/image.jpg /><script>alert('XSS')</script>

после преобразования он будет выглядеть как

1
<img src=http://host/image.jpg /><script>alert('XSS')</script> />

как видите, я закрыл тег IMG и добавил свой (SCRIPT), который в данной ситуации будет вполне работоспособен. При загрузке такой страници появиться сообщение "XSS", но с такой же простотой я мог получить и cookie посетителя и авторизоваться под его данными. В этом примере разработчики допустили 2 ошибки: во-первых, надо проверять валидность ссылки и не пропускать опасные символы. Во-вторых надо заключать значение атрибута SRC в теге IMG в кавычки. Правильный BB код не сработал бы в моем примере и злоумышленник нюхал шляпу. А если бы я написал валидный урл к картинке то после обработки он выглядел бы вот так:

1
<img src="http://host/image.jpg" />

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

Наверное все знают форумный движок Vbuletin, так вот в недавней версии 3.1 была интересная XSS, правда их там было штук 20, но мы оставновимся на одной. Сделаю ремарку: я пишу все из памяти, так что на работоспособность в реальных условиях примеры не претендуют, но смысл и суть остаются понятными. Так вот на форуме был поиск и поисковый запрос из формы передавался GETом, то есть через URL. и на странице с выдачей ваш запрос подставлялся в текстовое поле, для того что бы вы помнили что искали или могли исправить(неважно зачем это было - главное что было). Так вот, если бы я искал "Вася", меня кинуло бы на страницу с выдачей и там было бы текстовое поле, с уже введенным "Вася".
1
<input type="text" name="search" value="Вася" />
а URL страницы выглядел бы примерно так http://host/script?q=Вася

А теперь представьте что происходило, если кто-то переходил по ссылке типа
Code:
http://host/script?q="><script>alert('XSS')</script>
он бы попадал на страницу выдачи с текстовым полем, которое выглядело бы примерно так
1
<input type="text" name="search" value=""><script>alert('XSS')</script>" />
Круто? Я тоже так думаю:)
Но это цветочки, мы же постараемся проникнуть в проблему глубже и избавиться от XSS раз и навсегда.


КОНТРМЕРЫ
Есть один, до безумия простой способ, который очень редко нельзя применить по тем или инным причинам, так что советую им пользоваться. Заключается он в том, что перед каким либо преобразованием(вообще, прежде всего), прогонять все данные через функцию htmlspecialchars(). Таким образом, даже если код злоумышленника встанет как он планировал, он не будет ничего выполнять и даже более того - все увидят что он хотел сделать и будет повод закидать его камнями и разорвать жопу на немецкий крест. Например в DrunyaCMS, BB коды далеки от совершенства, но даже обойдя их XSS вам будет сложно пропихнуть(у меня например не вышло). Жду ваших мыслей на это счет.
Нам не страшен XSS

Теги: DrunyaCMS; Xss; Уязвимости; Защита сайта;
Источник: Drunya
Автор: Drunya
Категория: Hack
Просмотров: 3470
Комментариев: 0

Сейчас online: 34. Зарегистрированных: 0. Гостей: 34.
-->