Главная Веб-программинг
PHP |
Register_globals - быть или не быть? |
|
|
| Автор Игорь Локтев | |
| 11.03.2009 г. | |
|
Что представляет собой register_globals?
Для ясности приведу пример при register_globals=On.
В адресной строке напишем: index.php?asd=123 Получим:
Как мы видим, создались 2 переменные: одна локальная (+ ссылка в $GLOBALS), другая в массиве $_GET. Многие не используют массив $_GET вообще, они продолжают обрабатывать переменную $asd после получения ее извне. Но давайте вдумаемся, зачем нам "загрязнять" массив $GLOBALS? Для этого у нас есть специальные массивы, хранящие данные, переданные методами GET (массив $_GET) и POST (массив $_POST). Тот же самый пример, но при register_globals=Off:
Т.о. не была создана локальная переменная и для манипулирования с <$asd> мы должны использовать массив $_GET.
Возможно, уже сейчас вы изменили свое мнение о register_globals. А теперь я расскажу вам, как взломщик может воспользоваться этой опцией в своих целях, т.е. при register_globals=On.
Начну от простого к сложному.
echo
Т.е. не определив переменную, сразу начинают ее использовать. Приведенный код по идее не страшен, но задумайтесь, а вдруг эта самая переменная $asd, в последствии записывается в файл? Например, напишем следующее в строке адреса: "index.php?asd=LUSER+" и получим: "LUSER 0123456789". Ну разве приятно будет увидеть такое? Не думаю. Предположим мы пишем систему аутентификации пользователя:
if(
Привел я заведомо дырявую систему, стоит нам только написать в адресной строке "index.php?valid_user=1" и мы получим надпись "Здравствуйте, пользователь" Этого бы не случилось, если бы мы написали так:
if(
Т.е. сами определили переменную $valid_user, как FALSE в случае неудачи.
Продолжим далее:
Приведу пример с sql-инъекцией:
echo
В адресной строке напишем:
получим sql-инъекцию:
И взломщик получает ваши явки и пароли:( Как вы видите, все примеры имеют дыры в защите, которые можно эксплуатировать через включенный register_globals. Справиться с подобным можно, если всегда определять переменную вне зависимости от условий. Или же использовать инкапсуляцию переменных в функциях, т.е. когда вы определяете функцию, то переменные внутри нее будут закрыты извне, например:
Теперь, если мы напишем в адресной строке: "index.php?where=123"
Я могу придумать еще очень много примеров, но думаю, что
приведенных мною вам будет достаточно для понимания.
Это можно сделать как в php.ini, но большинство хостинг провайдеров вам это не позволят, потому придется воспользоваться файлом .htaccess
Создаем файл с названием: .htaccess
И все, теперь некоторые вопросы безопасности решены:)
Немного о причине написания мной этой статьи:
Я очень надеюсь, что эта статья изменит ваше мнение относительно register_globals. Думаю, что со временем все хостинг провайдеры будут ставить register_globals = off по умолчанию. Но пока этого нет, вы знаете как с этим бороться;-) |
|
|
Вход / Регистрация
Новое
Продвижение сайта - это следующий логический шаг после завершения разработки са... |
По вашему мнению, сколько цветов в обычной радуге? Мы привыкли, что семь... |
По словам Сергея Брина, соучредителя и директора популярнейшего в мире поискови... |
Почему это важно? Гиперссылка - основа Интернета. Когда человек попадает на люб... |
Приветвтвую, вы хотите себе такие социальные кнопки? Хотите?
|
Последние комментарии
- Как заработать на Так.ру
Я сделал как описано,у меня код html авт... >>> - Как верстать на DIV-ах? Основы блочной в...
статья про блочную верстку неплоха, толь... >>> - Создание юзабилных форм с применением CS...
Каким плагином вы защитили свой сайт от ... >>> - Основные Интернет браузеры для WEB-разра...
Лучшие браузеры это Хром и FF(лучше всег... >>> - Заработок на рекламе Гугл Адсенс - все п...
У меня тоже есть сайт он о цветах но пос... >>>












Владельцы интернет-ресурсов не раз сталкивались с ситуацией когда при установке сайта на сервер высвечивалось сообщение с рекомендацией отключить опцию register_globals. Кто-то ее спешил отключить, кто-то оставлял так как есть. Сегодня мы рассмотрим, почему опасно оставлять опцию register_globals включенной. Вы, возможно, слышали, что использование её может привести к небезопасной работе вашей программы (скрипта). Но давайте разберемся, как эту опцию могут использовать в противоправных целях и как от этого защититься.
Комментарии
Создаешь htaccess.txt на рабочем столе и пишешь в нем:
php_flag register_global s off
php_value register_global s Off
сохраняешь и закачиваешь файл на сервер и переименовываеш ь его в .htaccess расширение .txt тоже убираем. Все готово теперь он откючен. Цитировать
А пренебрегать инициализацией плохая практика в любом случае. Цитировать
RSS лента комментариев этой записи.