Возможно вы искали: 'Light of Altair'

May 19 2025 12:39:45
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96221668
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18373
• Обзор The Walking ... 18817
• Обзор DMC: Devil M... 19894
• Обзор на игру Valk... 15889
• Обзор на игру Stars! 17776
• Обзор на Far Cry 3 17967
• Обзор на Resident ... 16035
• Обзор на Chivalry:... 17523
• Обзор на игру Kerb... 17993
• Обзор игры 007: Fr... 16635
Превью о играх
• Превью к игре Comp... 17973
• Превью о игре Mage... 14475
• Превью Incredible ... 14732
• Превью Firefall 13492
• Превью Dead Space 3 16347
• Превью о игре SimC... 14743
• Превью к игре Fuse 15453
• Превью Red Orche... 15557
• Превью Gothic 3 16358
• Превью Black & W... 17367
Главная » Статьи » Разное » Об опасности включения register_globals в PHP. (php security)

Об опасности включения register_globals в PHP. (php security)

Ключевые слова: php, security, (найти похожие документы)

From: Creator <proit@yandex.ru.>
Newsgroups: email
Date: Mon, 11 Jan 2006 14:31:37 +0000 (UTC)
Subject: Об опасности включения register_globals в PHP.

register_globals=oN? Вы в опасности!

Здравствуйте уважаемые веб-мастера, статья повествует о том, почему
опасно оставлять опцию register_globals включенной. Вы, возможно,
слышали, что использование её может привести к небезопасной работе вашей
программы (скрипта). Но давайте разберемся, как эту опцию могут
использовать в противоправных целях и как от этого защититься.

Что представляет собой register_globals?

Это опция в php.ini, которая указывает на необходимость регистрации
переменных полученные методом POST или GET в глобальный массив $GLOBALS.

Для ясности приведу пример при register_globals=on.

Есть файл "index.php" с содержимом:


<?
echo $asd.' - локальная переменная
';
echo $GLOBALS['asd'].' - ссылка в глобальном массиве $GLOBALS
';
echo $_GET['asd'].' - $_GET["asd"]';
?>




В адресной строке напишем: index.php?asd=123

Получим:


123 - локальная переменная
123 - ссылка в глобальном массиве $GLOBALS
123 - $_GET['asd']


Как мы видим, создались 2 переменные: одна локальная (+ ссылка в
$GLOBALS), другая в массиве $_GET. Многие не используют массив $_GET
вообще, они продолжают обрабатывать переменную "$asd" после получения ее
извне.

Но давайте вдумаемся, зачем нам "загрязнять" массив $GLOBALS? Для этого
у нас есть специальные массивы, хранящие данные, переданные методами GET
(массив $_GET) и POST (массив $_POST).

Тот же самый пример, но при register_globals=off :


- глобальная переменная
- ссылка в глобальном массиве $GLOBALS
123 - $_GET['asd']



Т.о. не была создана локальная переменная и для манипулирования с "$asd"
мы должны использовать массив $_GET.

Возможно, уже сейчас вы изменили свое мнение о register_globals.
Вероятно, вам придется, что-то переписать в своих программах, но оно
того стоит.

А теперь я расскажу вам, как взломщик может воспользоваться этой опцией
в своих целях, т.е. при register_globals=on

Начну от простого к сложному.

Часто мы видим предупреждения:

Notice: Undefined variable: asd(название переменной) in ****


Что это значит? Это значит, что переменная "$asd" не была определена явно.
Например, некоторые люди балуются подобным:


<?
for($i=0;$i<10;$i++)
{
@$asd.=$i;
}

echo $asd
?>




Т.е. не определив переменную, сразу начинают ее использовать.
Приведенный код по идее не страшен, но задумайтесь, а вдруг эта самая
переменная "$asd", в последствие записывается в файл? Например, напишем
следующее в строке адреса: "index.php?asd=LUSER+" и получим: "LUSER
0123456789". Ну разве приятно будет увидеть такое? Не думаю.

Предположим мы пишем систему аутентификации пользователя:


<?
if($_POST['login']=='login'&&$_POST['pass']=='pass')
{
$valid_user=TRUE; // Юзер корректный
}

if($valid_user)
{
echo 'Здравствуйте, пользователь';
}
else echo 'В доступе отказано'
?>




Привел я заведомо дырявую систему, стоит нам только написать в адресной
строке "index.php?valid_user=1" и мы получим надпись "Здравствуйте,
пользователь"

Этого бы не случилось, если бы мы написали так:


<?
if($_POST['login']=='login'&&$_POST['pass']=='pass')
{
$valid_user=TRUE; // Юзер корректный
}
else $valid_user=FALSE;

if($valid_user)
{
echo 'Здравствуйте, пользователь';
}
else echo 'В доступе отказано'
?>




Т.е. сами определили переменную $valid_user, как FALSE в случае неудачи.

Продолжим далее.

Теперь использование функции IsSet() становиться небезопасно, т.к. любой
может подменить переменную на угодную ему.

Приведу пример с sql-инъекцией:


<?
if(@$some_conditions) // некоторые условия
{
$where='id=3';
}

echo $query='SELECT id, title, description FROM table '
.'WHERE '.(IsSet($where)?$where:'id=4')
?>




В адресной строке напишем:
"index.php?where=id=0+UNION+ALL+SELECT+login,+password,+null+FROM+admin+where+login='admin'"
получим sql-инъекцию:


SELECT id, title, description FROM table WHERE id=0
UNION ALL SELECT login, password, null FROM admin where login='admin'


И взломщик получает ваши явки и пароли:(

Как вы видите все примеры, имеют дыры в защите, которые можно
эксплуатировать через включенный register_globals.

Справиться с подобным можно, если всегда определять переменную вне
зависимости от условий. Или же использовать инкапсуляцию переменных в
функциях, т.е. когда вы определяете функцию, то переменные, что внутри
нее будут закрыты извне, например:


<?
function asd()
{
// Какие то действия

if(IsSet($where))
{
echo $where;
}
else echo '$where не существует';
}
asd();
?>




Теперь, если мы напишем в адресной строке: "index.php?where=123"

Даст: "$where не существует"

Но это при условии, что вы не устанавливаете переменную $where как
глобальную, т.е. "global $where"

Я могу придумать еще очень много примеров, но думаю, что приведенных
мною вам будет достаточно для понимания.

Хочу сказать, что все эти проблемы канут в лета, когда вы установите
опцию register_globals=off и попробуете заново все приведенные выше
примеры.

Это можно сделать как в php.ini, но большинство хостинг провайдеров вам
это не позволят, потому придется воспользоваться файлом ".htaccess"

Создаем файл с названием: .htaccess

Запишем в него:

php_flag register_globals off


И все, теперь некоторые вопросы безопасности решены:)

Немного о причине написания мной этой статьи:

Лично я никогда не использовал register_globals = on, т.к. мне казалось
это нелогичным. Так же я знал, что это еще один "+" к защите. Но в
полной мере я не осознавал насколько это может быть опасно. Случилось
это когда я решил написать GSMgen - Google SiteMap generator, который
должен был работать безопасно и при включенном register_globals. Когда
же я начал его тестировать, у меня был шок.так как мне нравиться
использовать функцию IsSet() я нашел в ней непосредственную уязвимость,
и в процессе мне пришлось от этого отказаться:( Что поделаешь.

Я очень надеюсь, что эта статья изменит ваше мнение относительно
register_globals. Думаю, что со временем все хостинг провайдеры будут
ставить register_globals = off по умолчанию. Но пока этого нет, вы
знаете как с этим бороться;-)

Если у вас возникли вопросы, вы можете задать их на нашем форуме:
http://www.internet-technologies.ru/forums/ или лично мне
http://www.internet-technologies.ru/feedback.html

Удачи вам!

Источник: http://www.internet-technologies.ru (Веб-мастеру в помощь)
800 Прочтений •  [Об опасности включения register_globals в PHP. (php security)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Об опасности включения register_glo... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка