программирование на PHP
Bullet (black) Email иконка RSS иконка
  • Урок 18. Защита приложения или что такое register_globals. Часть первая

    Декабрь 6th, 2008 Александр 17 Комментариев

    Введение

    В наш век крекеров (взломщиков) нужно уделять большое внимание защите сайта, а точнее самого кода. Это не значит, что нужно ставить спам контроль, или вводить километровые пароли. Если ваш код «дырявый», то его сможет взломать и ребенок. И однажды в прекрасный день, вы можете увидеть на своей главной странице сообщение вроде «Тут был Вася» и еще три буквы в придачу.

    Детали

    А теперь материал, который мы рассмотрим в этом уроке:

    1. Что такое register_globals и с чем его едят;
    2. Как правильно передавать и проверять данные;
    3. Простенький пример для закрепления материала.

    Так что же делает ваш код небезопасным? В 90% это конфигурация register_globals (глобальные переменные), в большинстве случаев хостеры отключают эту конфигурацию, но не всегда. Если вы работаете на локальной машине, то эту конфигурацию можете найти в php.ini. На скриншоте ниже показана строка где эта функция включена:

    Если она включена, то это существенно облегчает вам жизнь, ибо не нужно будет использовать передачу значений через $_GET и $_POST. Но на сколько она облегчает вам жизнь, на столько же она делает ваш сайт небезопасным. Так что выбирайте или «Тут был Вася» или неудобство.

    Так в чем опасность? Рассмотрим пример. Создайте любой файл, пусть это будет index.php, в который вставляем следующий код:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php

    echo $t."<br/>";

    echo $GLOBALS[t]."<br/>";

    echo $_GET[t]."<br/>";

    ?>

    Теперь запустим этот скрипт при включенном register_globals и передадим переменной $t методом GET значение 5.
    Тобишь:

    http://localhost/index.php?t=5

    На экран будут выведено буквально:

    5

    5

    5

    Следует, у нас создается три копии переменной. Уже нехорошо. Верно? При выключенной конфигурации мы получаем всего одну переменную, которая была передана через параметр $_GET, значит, не будет этой переменной и в $GLOBALS и в локальной переменной $t.

    Ну, так и пусть их будет хоть 10, наверно задаете вы себе вопрос. Я тоже так думал, до тех пор пока не залез на хакерский сайт =)

    Пример взлома

    Допусти у нас готова форма входа на сайт.
    И чтобы сравнит пароль и логин мы вызываем файл php. Допустим login.php с таким кодом:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php

    $pass=getpassword($login);

    //допустим getpassword это функция, которая достает пароль из базы данных

    if (md5($password) === $pass) { $auto= true;}
    //сравниваем пароль полученный из формы, в которую мы ввели пароль, с паролем полученным из базы. Если, правда, то

    присваиваем переменной $auto значение TRUE

    if ($auto) {echo "Тут идет вход на сайт как зарегистрированный пользователь";}

    ?>

    Если код написан вами с нуля, то ничего страшного что вы используете register _global. Но есть множество готовых форумов (Nuke,PHPBB) с открытыми скриптами, и злоумышленник может найти там оплошность. Так в чем опасность этого кода?

    Я вам напишу щас строчку, которой можно взломать этот скрипт просто на раз без логина и пароля.

    http://localhost/login.php?auto=1

    Вот и все. Если кто не знает, то единица равнозначна значению TRUE (0=false). Я думаю тут понятно и без слов. И напоследок скрипт без единой уязвимости и без register_global:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php

    $pass=getpassword($_POST[login]);

    if (md5($_POST[password]) === $pass) {$auto=true;}

    else {$auto=false;}

    if ($auto ) {echo "Тут идет вход на сайт как зарегистрированный пользователь";}

    ?>

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

    C уважением, Корень Александр

    ads-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Многие спрашивают где купить радиаторы отопления оптом и в розницу, мы отвечаем – здесь.

    Поставьте и вы себе забор и металлической сетки рабицы от СкладМеталла.

    Только у нас новые usb устройства для вашего пк и ноута каждый день.

    Здесь собраны 10 интересных фактов про японскую диету , рекомендуем почитать.

    Вы достойны качественного наращивания волос от профессионалов высокого класса.

    Google Bookmarks БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong
    rss-лентаПодпишись на RSS, впереди много интересного.

    17 Responses to “Урок 18. Защита приложения или что такое register_globals. Часть первая”

    Страницы: [2] 1 » Show All

    1. 17
      АлександрNo Gravatar Says:

      Возможно так и есть, т.к. автор этого урока не я.

    2. 16
      СергейNo Gravatar Says:

      Извините , но слишком уж похожий пример я читал в книге
      Дениса Колисниченко PHP 5/6, в 8 главе

    3. 15
      NBVNo Gravatar Says:

      Отличные уроки для начинающих…было бы полезным ещё добавить уроки по джаваскриптингу…с нетерпением ждём новых уроков :)

    4. 14
      frakакNo Gravatar Says:

      У меня вопросик, а как возможно передать содержимое папки в .php файл, т.е я имею ввиду, напримре я копирнул в папку www/upload 2 файла, и эти 2 файла автоматом записались в index.php что бы их можно было скачать.
      Заранее спасибо

    5. 13
      ИгорьNo Gravatar Says:

      Напишите пожалуйста урок по созданию статистики online-пользователей,заранее большое спасибо

    6. 12
      НинаNo Gravatar Says:

      Благодарю за такую полезную информацию , теперь буду читать каждый ваш урок

    7. 11
      Корень АлександрNo Gravatar Says:

      Рад что кому-то моя заметка пригодилась. SDone верно написано,но я писал для новичков.Способов придумать защитить сайт множество. Но также как я писал есть сайты с открытым скриптом,там все на виду. А если писать свой скрипт с нуля,то ломануть даже с registr_global очень проблематично.

    Страницы: [2] 1 » Show All

    Leave a Reply


freshcoder.ru © 2008 • При использовании материалов активная ссылка на сайт обязательна.
SEO Powered by Platinum SEO from Techblissonline