Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Настройки php-интерпретатора

254
04 ноября 2002 года
Cker
341 / / 20.08.2000
Есть в настройках php-интерпретатора две директивы:
1) track_vars - если включена, то все переменные сохраняются в ассоциативных массивах $HTTP_POST_VARS, $HTTP_GET_VARS.
2) register_globals - если включена, значения переменных становятся доступными через их первоначальные имена.
Вопрос: А если обе эти директивы отключены, то как можно принять параметры? Через $argv[] или как?
250
04 ноября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by Cker
Есть в настройках php-интерпретатора две директивы:
1) track_vars - если включена, то все переменные сохраняются в ассоциативных массивах $HTTP_POST_VARS, $HTTP_GET_VARS.
2) register_globals - если включена, значения переменных становятся доступными через их первоначальные имена.
Вопрос: А если обе эти директивы отключены, то как можно принять параметры? Через $argv[] или как?




ПЕРЕВЕЛ НЕ Я И НЕТ НИ ОДНОГО МОЕГО СЛОВО
прочитав это ты все поймешь
===========================================
Ниже следуют мои скромные потуги перевести анонсированный в анонсе текст
"SECURITY: NEW INPUT MECHANISM"

БЕЗОПАСНОСТЬ: НОВЫЙ МЕХАНИЗМ ПЕРЕДАЧИ ПЕРЕМЕННЫХ.

В самом начале мы хотим акцентировать Ваше внимание на следующей информации:
Независимо от того, как вы поймете то, что написано ниже, PHP 4.1.0 *поддерживает* старые способы передачи данных в скрипт. Так что любые старые приложения будут работать без внесения каких бы то ни было изменений.

Теперь, написав это предупреждение для дураков, мы можем перейти к делу.

Если в своем скрипте Вы полагались на register_globals=on (это когда переменные сервера, окружения, переданные из формы, не различая, откуда они пришли - от юзера ли, или на сервере были уже - автоматически валились в одну кучу глобального пространства имен), то Ваш сайт смог бы сломать даже читатель журнала "Ксакеп". Вот, например, этот код:

<?php
if (authenticate_user()) {
$authenticated = true;
}
...
?>

легко поломать, если юзер просто передаст (это не ругательство, а глагол) скрипту переменную authenticated со значением 1. в этом случае, даже если authenticate_user() вернет false, переменная $authenticated все равно будет равна true. Хотя это и выглядит достаточно тупым примером, на на самом деле несколько проектов на РНР были поломаны именно благодаря подлянке, заложенной в register_globals.

Хотя, пожалуй, на РНР и возможно написать защищенный код, мы спинным мозгом чувствовали - то, что РНР позволяет очень быстро и легко разрабатывать дырявые приложения - это, наверное, плохо. И мы решили попытаться внести одно изменение с далеко идущими целями - осудить register_globals, предать ее анафеме и вывалять в перьях.
Очевидно, что, поскольку подавляющее большинство РНР кода, написанного в обозримой части вселенной, зависит от register_globals, у нас и в мыслях не было исключать эту возможность из РНР в ближайшем будущем, но мы решили развернуть широкую агитацию среди народных масс за прекращение паразитирования на register_globals в самые сжатые сроки.

Дабы помочь юзерам в нелегкой борьбе за перевод register_globals в режим off, мы добавили несколько новых переменных, специально заточенных под то, чтобы использовать их вместо старых.

Встречайте! Семь новых массивов:

$_GET - содержит переменные, пришедшие по методу GET
$_POST - содержит переменные, пришедшие по методу POST
$_COOKIE - содержит переменные HTTP cookie
$_SERVER - содержит переменные сервера (напр., REMOTE_ADDR)
$_ENV - содержит переменные окружения
$_REQUEST - содержит сваленные в кучу переменные GET, POST, и Cookie.
Другими словами - весь тот мусор, который пришел от юзера, и которому, в смысле безопасности, нельзя доверять ни в коем случае!
$_SESSION - содержит HTTP переменные, зарегистрированные в сессии.

В довершение к тому, что эти переменные и сами по себе круты, как вареные яйца, мы добавили им еще одну возможность, которая убьет вас наповал и заставит выкинуть на помойку старые HTTP_???_VARS:
Эти переменные автоматически являются глобальными в любых функциях и областях видимости. То есть вы можете обращаться к ним откуда угодно, освобождаясь от непосильного труда написания слова 'global'. Например:

function example1()
{
print $_GET["name"]; // Работает! Писать 'global $_GET;' необязательно!
}

Этот код будет работать как часы.
Мы надеемся, что это подсластит Вам пилюлю переделывания тонн старого кода.
Также мы самонадеянно считаем, что данная возможность упростит написание новых программ.

Еще одна клевая фича, включенная нами в этот релиз, заключается в следующем:
Добавление переменных в массив $_SESSION автоматически регистрирует эти переменные в
сессии, как если бы вы делали это с помощью session_register()!
Если вы раскатали губы на использование этой фичи с другими новыми массивами,
то придется их закатать обратно. Включение новоого значения в массив $_ENV,
не произведет того же эффекта, что и putenv().

В 4.1.0 по умолчанию register_globals все еще включены. Это переходная версия
и мы вежливо так предупреждаем всех авторов программ, а особенно тех, кто пишет для
широких народных масс - поезд уходит, и, если Вы хотите успеть вскочить в последжний
вагон, быстренько переделывайте ваши старые программы на работу с выключенными
register_globals. И обязательно, обязательно - используйте для переделки те
новые возможности, которые мы придумали в PHP 4.1.0 для облегчения
нелегкого труда по переделке программ на новый лад.

Имейте в виду, что в новых полу-основных версиях РНР, если вы будете устанавливать
их с нуля, register_globals будут выключены!
Поясняем для тех, кто в танке. Если Вы будете устанавилвать РНР поверх уже
установленной версии, то не дергайтесь - никто трогать вашу register_globals=on в
php.ini не будет. register_globals будет установлена по умолчанию в off,
только если Вы будете устанавливать РНР на новой машине
(например, если Вы - новенький сияющий чайник). Но и в этом случае, если уж
так уж приспичит, всегда останется возможность поправить ручками в on.

Намек: Хотя старые массивы, такие как, $HTTP_GET_VARS, и сохранятся в
последующих версиях РНР, мы настоятельно рекомендуем пользоваться
новыми массивами, которые - мы еще раз напомним, а то вдруг кто-нибудь забыл -
автоматически являются глобальными.
Мы предупредили. Кто не прятался - мы не виноваты.

++++++++++++++++++++++++++++++++++++++++++++++++++

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог