-
Урок 18. Защита приложения или что такое register_globals. Часть первая
Декабрь 6th, 2008 17 КомментариевВведение
В наш век крекеров (взломщиков) нужно уделять большое внимание защите сайта, а точнее самого кода. Это не значит, что нужно ставить спам контроль, или вводить километровые пароли. Если ваш код «дырявый», то его сможет взломать и ребенок. И однажды в прекрасный день, вы можете увидеть на своей главной странице сообщение вроде «Тут был Вася» и еще три буквы в придачу.
Детали
А теперь материал, который мы рассмотрим в этом уроке:
- Что такое register_globals и с чем его едят;
- Как правильно передавать и проверять данные;
- Простенький пример для закрепления материала.
Так что же делает ваш код небезопасным? В 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 уважением, Корень Александр

Многие спрашивают где купить радиаторы отопления оптом и в розницу, мы отвечаем – здесь.Поставьте и вы себе забор и металлической сетки рабицы от СкладМеталла.
Только у нас новые usb устройства для вашего пк и ноута каждый день.
Здесь собраны 10 интересных фактов про японскую диету , рекомендуем почитать.
Вы достойны качественного наращивания волос от профессионалов высокого класса.
Подпишись на RSS, впереди много интересного.17 Responses to “Урок 18. Защита приложения или что такое register_globals. Часть первая”
Leave a Reply




Март 10th, 2009 at 10:26
Возможно так и есть, т.к. автор этого урока не я.
Март 10th, 2009 at 00:49
Извините , но слишком уж похожий пример я читал в книге
Дениса Колисниченко PHP 5/6, в 8 главе
Февраль 3rd, 2009 at 05:22
Отличные уроки для начинающих…было бы полезным ещё добавить уроки по джаваскриптингу…с нетерпением ждём новых уроков
Январь 16th, 2009 at 06:04
У меня вопросик, а как возможно передать содержимое папки в .php файл, т.е я имею ввиду, напримре я копирнул в папку www/upload 2 файла, и эти 2 файла автоматом записались в index.php что бы их можно было скачать.
Заранее спасибо
Январь 2nd, 2009 at 00:17
Напишите пожалуйста урок по созданию статистики online-пользователей,заранее большое спасибо
Декабрь 25th, 2008 at 19:10
Благодарю за такую полезную информацию , теперь буду читать каждый ваш урок
Декабрь 14th, 2008 at 23:35
Рад что кому-то моя заметка пригодилась. SDone верно написано,но я писал для новичков.Способов придумать защитить сайт множество. Но также как я писал есть сайты с открытым скриптом,там все на виду. А если писать свой скрипт с нуля,то ломануть даже с registr_global очень проблематично.