| |
|
|
| | Простая вроде ситуация:
Переменная нужна в разных местах. Внутри функций и вне их.
Я надеялся, что она станет глобальной, если я присвою ей значение в самом начале файла, а потом модифицирую его уже на правильное вызовом функции, но нет, внутри функции она становится пустой строкой. Будто я ей ничего не присваивал.
Что делать? | |
| |
|
|
| |
|
|
| |
для: Eugene77
(21.05.2007 в 13:46)
| | | Нельзя сделать переменную глобальной насильно.
Если какая-то из функций хочет работать с переменной $var, определенной на верхнем уровне, она должна содержать свое собственное описание global $var; | |
| |
|
|
| |
|
|
| |
для: Trianon
(21.05.2007 в 13:55)
| | | > Нельзя сделать переменную глобальной насильно.
:-) | |
| |
|
|
| |
|
|
| |
для: Eugene77
(21.05.2007 в 13:46)
| | | Воспользуйся СЕССИЯМИ!
присвой переменной например
$_SESSION['var'] = ' ЗНАЧЕНИЕ';
|
и у тебя эта переменная будет доступна везде | |
| |
|
|
| |
|
|
| |
для: ШИМ
(21.05.2007 в 13:58)
| | | То есть из других скриптов она тоже будет доступна? | |
| |
|
|
| |
|
|
| |
для: ШИМ
(21.05.2007 в 13:58)
| | | чем это лучше $GLOBALS? | |
| |
|
|
| |
|
|
| |
для: Trianon
(21.05.2007 в 15:03)
| | | Можно ещё написать в .htaccess строку
SetEnv MY_VAR /home/user/public_html/inc
| и потом везде в $_SERVER['MY_VAR'] будет это /home/.... | |
| |
|
|
| |
|
|
| |
для: exp
(21.05.2007 в 15:21)
| | | Это переменная только для чтения?
Можно подробнее?!
Может быть ссылочка есть под рукой? | |
| |
|
|
| |
|
|
| |
для: ШИМ
(21.05.2007 в 13:58)
| | | ничего подобного не произойдет.
Сравните
<?php
$var = ' ЗНАЧЕНИЕ';
function fun()
{
global $var;
if(isset($var))
echo "Переменная \$var=$var";
else
echo "Переменная \$var неопределена";
}
fun();
?>
|
и
<?php
$_SESSION['var'] = ' ЗНАЧЕНИЕ';
function fun()
{
if(isset($var))
echo "Переменная \$var=$var";
else
echo "Переменная \$var неопределена";
}
fun();
?>
|
| |
| |
|
|
| |
|
|
| |
для: Trianon
(21.05.2007 в 15:57)
| | | вы в примерах не ту переменную определяете
перепутали с функцией =) | |
| |
|
|
| |
|
|
| |
для: bronenos
(21.05.2007 в 16:13)
| | | проверял не ту. Спасибо - поправил. | |
| |
|
|
| |
|
|
| |
для: Trianon
(21.05.2007 в 15:57)
| | | Где то читал,что не безопасно использовать global, так ли это на самом деле ? | |
| |
|
|
| |
|
|
| |
для: Nemesis
(21.05.2007 в 16:34)
| | | Да, это на самом деле так и есть...
:-) | |
| |
|
|
| |
|
|
| |
для: Nemesis
(21.05.2007 в 16:34)
| | | субъективно.
объективно - использовать register globals
a) очень неудобно, как раз всилу того, что безопасный скрипт при этом написать существенно сложнее
б) крайне недальновидно, поскольку этот механизм пытаются из языка изжить. В 6 версии обещали выкинуть вообще.
Впрочем, вывод не меняется. | |
| |
|
|
| |
|
|
| |
для: Trianon
(21.05.2007 в 15:57)
| | | Я почему-то понял, что имеется в виду не
<?php
$_SESSION['var'] = ' ЗНАЧЕНИЕ';
function fun()
{
if(isset($var))
echo "Переменная \$var=$var";
else
echo "Переменная \$var неопределена";
}
fun();
?>
|
а
<?php
$_SESSION['var'] = ' ЗНАЧЕНИЕ';
function fun()
{
if(isset($_SESSION['var']))
echo "Переменная \$_SESSION['var']=$_SESSION['var']";
else
echo "Переменная \$_SESSION['var'] неопределена";
}
fun();
?>
|
Давайте автора спросим!
Мне только кажется, что это будет медленная переменная. Правильно я понимаю?
Ну и вопрос безопасности тоже актуален, в конечном итоге я отдаю эту переменную функции unlinc().
Может какая-то проверка нужна специальная? | |
| |
|
|
| |
|
|
| |
для: Eugene77
(21.05.2007 в 20:42)
| | | А второй код не создает дополнительных переменных.
Он создает элемены в уже существующем суперглобальном массиве.
И он ничем не лучше $GLOBALS['var'] | |
| |
|
|
| |
|
|
| |
для: Trianon
(21.05.2007 в 21:19)
| | | Я встречал такое мнение, что суперглобальные массивы всё же лучше глобальных, кажется безопрасней, не создают столь очевидных дырок.
Поскольку PHP для меня пока сфера новая, продумывать скрипты на предмет их потенциальной неустойчивости к взлому, невозможно - не накопилось необходимого исходного объёма информации в голове. Поэтому я пока завишу от прямых так называемых "советов бывалых", что не является, разумеется, нормальным решением, но пока так как есть.
Мне бы получить ответ на такой вопрос в данной ситуации:
Какие переменные использовать, чтобы максимально обеспечить безопасность, при том, что продуманной политики безопасности пока не предвидится?
То есть расположить бы в рядочек все переменные начиная с $GLOBALS по мере роста их конфиденциальности. | |
| |
|
|
| |
|
|
| |
для: Eugene77
(21.05.2007 в 21:53)
| | | Массив $_GLOBALS является не защищенным из-за наличия уязвимости. Удаленный пользователь может переопределить глобальные переменные с помощью multipart/form-data POST запроса со специально сформированным полем file upload или посредством сценария, вызывающего функцию extract() или import_request_variables(). Также для эксплуатации уязвимости требуются определенные условия. | |
| |
|
|
| |
|
|
| |
для: mefestofel
(22.05.2007 в 02:03)
| | | Хотелось бы поглядеть пример. | |
| |
|
|
| |
|
|
| |
для: Trianon
(22.05.2007 в 09:25)
| | | Думаю модератор не обрадуется...
Как то уже поднимались вопросы 'этики' ... | |
| |
|
|
| |
|
|
| |
для: mefestofel
(22.05.2007 в 10:58)
| | | При чем тут этика?
Если это уязвимость php - о ней имеет смысл сообщить в phpteam. Дырку законопатят.
Если это заблуждение - от него стоит избавиться.
PS. модератор моего п/я несколько более толлерантен. | |
| |
|
|
| |
|
|
| |
для: Trianon
(22.05.2007 в 11:01)
| | | К сожалению это не заблуждение, думаю не очень красиво выкладывать exploit'ы на таком форуме как softtimt.ru...
Представляете что будет если все подряд начнут применять эксплоиты, форум ведь индексируется в Яндексе... | |
| |
|
|
| |
|
|
| |
для: mefestofel
(22.05.2007 в 11:04)
| | | Эксплоит - это готовый код для взлома конктертного приложения - как отмычка - им здесь действительно не место... но демонстрация уязвимости только приветствуется - это позволит форумчанам лучше защитить свой код. Например, в разделе "Задачи" обсуждаются и SQL-инъекции и подбор пароля - цель их просто продемонстрировать уязвимости, которые очень просто допустить при невнимательном кодировании. | |
| |
|
|
| |
|
|
| |
для: cheops
(22.05.2007 в 11:13)
| | | То есть Вы не против если я буду описывать уязвимости в разделе 'Задачи'? Хочу еще раз услышать ответ, может не понял что-то..... :-) | |
| |
|
|
| |
|
|
| |
для: mefestofel
(22.05.2007 в 11:17)
| | | В задачах обсуждались задачи - там механизм автоматического размещения - туда лучше не постить темы без надобности. Уязвимости можно обсуждать в соответствующих разделах форума. Как бы никто вам это запретить не может :) форум для того и существует, чтобы вы могли придти сюда и обсудить все интерсующие вас вопросы и получить быстрый отклик от сообщества. | |
| |
|
|
| |
|
|
| |
для: mefestofel
(22.05.2007 в 11:04)
| | | да не просил я эксплоит. Ну как минимум - готовый к употреблению.
Просил пример, иллюстрирующий принцип. Откровенно скажу, потому что не верил.
PHP - настолько динамично развивающийся проект, что поверить в существование эксплойта, работоспособность которого обусловнена ошибками в движке, а не в php-коде, так сразу -трудно. Считайте это костностью мышления. | |
| |
|
|
| |
|
|
| |
для: mefestofel
(22.05.2007 в 11:04)
| | | Ну вы насмешили своей этикой!
Что, если дырка у кого-то в штанах на заметном месте, то вы скромно молчать будете?
Друзья так не поступают! | |
| |
|
|
| |
|
|
| |
для: Eugene77
(23.05.2007 в 13:38)
| | | Ну да а потом все побегут ломать и Ваши проекты тоже....
Между прочим о ней давно уже знают, и ее даже залатали...
Но периодичнски можно встретить php без заплатки...
Очень часто к сожалению.... | |
| |
|
|
| |
|
|
| |
для: mefestofel
(23.05.2007 в 14:11)
| | | >Ну да а потом все побегут ломать и Ваши проекты тоже....
>Между прочим о ней давно уже знают, и ее даже залатали...
в какой версии?
Это?
http://www.linux.org.ru/view-message.jsp?msgid=162779&back=view-group.jsp%3Fgroup%3D213&anonymous=hide
Это старая дырка.
[поправлено модератором] | |
| |
|
|
| |
|
|
| |
для: Trianon
(23.05.2007 в 14:38)
| | | Ну да, почти.....
:-):-):-):-)
Думаю тема закрыта...
P.S. Trianon вспомните про костность мышления, не все так просто... | |
| |
|
|