Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« : 28-04-2004 14:24 » |
|
Столкнулся с тем, что при наборе http://shelek.com/test.php?test_var=10значение $test_var - в частности у меня дома и на мастерхосте равно 10 без всяких доп. ухищрений! Но на рабочем компе и иногда читал про такую проблему, когда для получения значений таких переменных требуются определенные телодвижения!!! Расскажите поподробнее - дабы не было потом мучительно и больно!!!!
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Skubent
Гость
|
|
« Ответ #1 : 29-04-2004 06:35 » |
|
Гром, ну уж тебе-то RTFM говорить If the register_globals directive is set, then these variables will also be made available in the global scope of the script; i.e., separate from the $HTTP_*_VARS arrays. This feature should be used with care, and turned off if possible; while the $HTTP_*_VARS variables are safe, the bare global equivalents can be overwritten by user input, with possibly malicious intent. If you cannot turn off register_globals, you must take whatever steps are necessary to ensure that the data you are using is safe. Проще говоря, ежели в конфигурации php та самая регистер_глобалс включена, то переменые из запроса (хоть GET, хоть POST) существуют в теле скрипта, если выключена, то только в HTTP_*VARS массивах.
|
|
|
Записан
|
|
|
|
Fireworm
Гость
|
|
« Ответ #2 : 29-04-2004 08:06 » |
|
Или в массивах $_GET и $_POST, которые к томуже являются супер глобальными, т.е. доступны в любых методах-функциях. И кстати на подобный вопрос я уже не мение 10 раз отвечали на этом форуме...
|
|
|
Записан
|
|
|
|
Антон (LogRus)
|
|
« Ответ #3 : 29-04-2004 09:08 » |
|
|
|
|
Записан
|
Странно всё это....
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #4 : 29-04-2004 09:47 » |
|
Skubent, если я весь форум буду лопатить у меня точно на все времени не хватит - а в вебе я новичек - просто мне счас локально на работе серверок настроить на работу надоть - где и как что надо сменить - что бы все переменные зажили в теле скрипта ?
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Антон (LogRus)
|
|
« Ответ #5 : 29-04-2004 10:00 » |
|
Гром, какойты ленивый вот тебе проверенный метод: это import_request_variables("gG", "rvar_"); делает доступными все переменные полученные через GET или POST gG - get GET gP - get POST rvar_ - этот префикс появится перед всеми пременными, например: запрос http://shelek.com/forum/viewtopic.php?foo1=value1&foo2=value2&foo2=value2обработка import_request_variables("gG", "rvar_"); print $rval_foo1; print $rval_foo2; print $rval_foo3; пременные $HTTP_GET_VARS[] $HTTP_POST_VARS[] $HTTP_COOKIE_VARS[] $HTTP_ENV_VARS[] $HTTP_SERVER_VARS[] $HTTP_POST_FILES[] могут быть недоступны если не установленно в настройках сервера track_vars = true track_vars boolean
If enabled, GET, POST and cookie input can be found in the global associative arrays $HTTP_GET_VARS, $HTTP_POST_VARS and $HTTP_COOKIE_VARS, respectively.
|
|
|
Записан
|
Странно всё это....
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #6 : 29-04-2004 10:23 » |
|
LogRus, я правда не знаю - я не ленивый - да и где в апач + php собранный в виде модуля искать вот эту строчку???
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Антон (LogRus)
|
|
« Ответ #7 : 29-04-2004 10:46 » |
|
Гром, а ты сделай чтобы везде работало и всё в начале скрипта поставь например import_request_variables("gG", ""); и не заморачивайся где это настраивается я незнаю. но поищу
|
|
|
Записан
|
Странно всё это....
|
|
|
Антон (LogRus)
|
|
« Ответ #8 : 29-04-2004 10:56 » |
|
Гром, нашел. находится это в файле конфигурации php.ini или еще каком можно увидеть через phpinfo(). но везде написано что начиная с версии 4.0.3 переменная track_vars включена поумолчанию.
|
|
|
Записан
|
Странно всё это....
|
|
|
Skubent
Гость
|
|
« Ответ #9 : 29-04-2004 10:59 » |
|
register_globals = On в php.ini должно быть.
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #10 : 29-04-2004 11:18 » |
|
LogRus, проблема в том, что php.ini не могу найти - я собрал модулем - phpinfo выдал путь но там файла такого нету мож его создать!!! Мысль чтоб везде работало - это хорошо - наверное так и сделаю!!! Проверю!
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Антон (LogRus)
|
|
« Ответ #11 : 29-04-2004 11:29 » |
|
Гром, наверняка можно создать. Skubent, раскажи про register_globals а то я чего так и не догнал чего оно даёт.
|
|
|
Записан
|
Странно всё это....
|
|
|
Антон (LogRus)
|
|
« Ответ #12 : 29-04-2004 11:31 » |
|
Гром, скопируй его туда со своей локальной машины.
|
|
|
Записан
|
Странно всё это....
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #13 : 29-04-2004 11:33 » |
|
Получилось - всем спасиба!!!!
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Антон (LogRus)
|
|
« Ответ #14 : 29-04-2004 11:36 » |
|
Гром, э так не пойдет. Сам всем всегда говорит что решил проблему поделись с другими. а сам игнорирует.
|
|
|
Записан
|
Странно всё это....
|
|
|
Fireworm
Гость
|
|
« Ответ #15 : 29-04-2004 11:42 » |
|
Гром, Лучше всетаки выключить register_globals, и пользоваться $_GET и $_POST. т.к. в противном случает получается потенциальная очень большая дыра...
|
|
|
Записан
|
|
|
|
Skubent
Гость
|
|
« Ответ #16 : 29-04-2004 12:04 » |
|
LogRus, Массивы HTTP_*_VARS доступны всегда. Кстати, _GET и _POST рекомендуется рассматривать как алиасы оных, там какие-то отличия есть, но разработчики обещают к очередной версии их убрать совсем. Различия, в смысле. При выключенной register_globals переменные из запроса находятся там и только там. При включенной register_globals переменные запроса сразу же доступны в скрипте. Что не есть хорошо, ибо в этом случае нет разницы между GET и POST переменными. Более того, совсем нехорошо то, что клиент, подавая запрос, может затереть (либо исказить) используемые в скрипте переменные. Как заметил Fireworm, это потенциальная дыра.
Да, Гром, поскольку на мастерхосте указанная переменная включена, я рекомендовал бы в .htaccess прописать строчку php_value register_globals off
|
|
|
Записан
|
|
|
|
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии
Offline
Пол:
Бодрый птах
|
|
« Ответ #17 : 29-04-2004 13:59 » |
|
LogRus, ну дык я поставил строку import_request_variables("gG", ""); и все заработало в скрипте! По конфигурации php.ini так и не нашел - так как библиотека собирается как модуль для апач!!!! Fireworm, я это делаю локально - т.е. иногда в окнах между работой и работой хочется пописать свой форум - я его начал потихоньку делать - но видимо придется одному в разработке опять пусто! Ну насколько надо быть инертными - дальше слов дело не идет Skubent, я проверю masterhost но дело в том, что и сайт пока построен на таком же вот движке !!!! Т. е. все переменные идут как бы предопределенными! В чем дыра - показывайте - это первый вопрос! Во вторых шла речь о rack_vars - как онги связаны с register_globals ! Это два. И третье - сайт написан с использованием переменных из GET& POST напрямую!!!! Я могу переделать это но пока не мне надо уяснить - что бы весь движок сделать одинаковым как форум так и сайт - я ведь их связываю между собой (см тему в форуме Разрботка) - и тут надо обдумать как это реализовать!!!! Но это уже офтопик пошел :? и все таки - я скажу - мне нужны советы, дабы полный нормальный движок вышел уже настолько крутым - что ой!!! Вернее - что бы все возможности и пожелания удовлетворить - давайте пишите (только не сюда а в Разработку!)
|
|
|
Записан
|
А птичку нашу прошу не обижать!!!
|
|
|
Skubent
Гость
|
|
« Ответ #18 : 30-04-2004 06:34 » |
|
Гром, на мастерхосте php собран по умолчанию, с включенной register_globals. Это совершенно точно, у меня там крутится пяток сайтов.
Потенциальная дыра - рассказываю. Допустим у тебя данные о пользователе хранятся в сессии. Ты, как правильный, делаешь @session_start(); и начинаешь использовать переменную, допустим, $userid. Куль-хацкер, формируя запрос http://что-то-там/logon.php?userid=1 присваивает свое значение указанной переменной. GET и POST переменные перекрывают значения из сессий и из куков. Как этим пользоваться - сами, надеюсь, понимаете.
Далее, разговор о track_vars можно считать оконченым с момента появления php 4.0.3 - там эта директива включена _всегда_. До этого она контролировала будут ли заполняться массивы HTTP_GET_VARS, HTTP_POST_VARS и HTTP_POST_FILES. register_globals контролирует, будут ли переменные из запроса объявлены в теле скрипта как глобальные (вот только точно не помню, переменные или константы).
|
|
|
Записан
|
|
|
|
|