Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Безопасность переменных


Автор: Aliance 1.9.2005, 22:54
Безопасно ли такое применение кода:
Код

$var = $_POST['var'] ? $_POST['var'] : 'test';


Т.е. я назвал переменную так же, как получаемую в массиве от формы, это правильно?
Точнее безопасно?
И лучше избегать такого или нет?

Автор: Mont 2.9.2005, 05:27
Если REGISTR_GLOBALS - on, и ты перед использованием этой переменной ей ничего не присваиваешь, то проблемы могут быть. А если ты ей присваиваешь какое-либо значение перед тем как испльзовать ее где-либо в скрипте, то ничего страшного ИМХО.

Автор: -=Ustas=- 2.9.2005, 08:14
Нежелательно использовать имена переменных, которые находяться в массвие _POST или _GET. Потому как будет путаница у разных хостеров.

Автор: Alone 2.9.2005, 11:52
-=Ustas=-
Это почему же?

Автор: -=Ustas=- 2.9.2005, 13:13
Да потому, что если REGISTR_GLOBALS - on, тогда объявление такой же переменной будет содержать значение из _POST или _GET. Поэтому имена лучше давать разные, чтоб потом самому не запутаться, но это уже как кому нравиться.

Автор: Cheba 2.9.2005, 13:25
Но ведь приведенный выше код делает "мягкую" эмуляцию того самого REGISTR_GLOBALS = on. Только он еще и присваивает значение по умолчанию, так сказать. Именно в данном случае совершенно ничего страшного не случится при любом значении REGISTR_GLOBALS.

Автор: -=Ustas=- 2.9.2005, 13:38
Я говорю не за вышеприведенный случай, а вообще, в принципе!

Автор: Aliance 2.9.2005, 15:45
Цитата(Mont @ 2.9.2005, 06:27)
А если ты ей присваиваешь какое-либо значение перед тем как испльзовать ее где-либо в скрипте, то ничего страшного ИМХО.

Именно!

Кроме того, у меня r_g off и при чем здесь другой хостер? Меня мой волнует smile

Автор: Mal Hack 2.9.2005, 16:16
Вообще по хорошему var является зарезервированным словом. Затем... Зачем заводить лишнюю переменную?
Работай сразу с $_POST массивом.
Проверяя элементы через isset()

Автор: Aliance 2.9.2005, 16:49
Я var как пример привел, есесно у меня не оно smile
Ввожу переменную чтобы проверить, ввел ли юзер что-то. А если не ввел - подставляю значение по умолчанию.
А isset() я негативно отношусь, наверное потому что до сих пор не понимаю ее предназначения smile

Автор: Mal Hack 2.9.2005, 16:59
Цитата(Aliance @ 2.9.2005, 17:49)
А isset() я негативно отношусь, наверное потому что до сих пор не понимаю ее предназначения smile

Проверка существования переменной.

Автор: Kefir 3.9.2005, 12:25
кстати, не знаю насчёт isset - иногда лучше empty. Т.к. переменная может быть создана, но быть пустой. Т.е. для проверки нужно ли ставить дефолтовые значения лучше использовать if(empty($foo)) $foo = $default_foo; Так будут ловиться ловится случаи и неустановленной и пустой переменной.

Автор: -=Ustas=- 3.9.2005, 12:37
Цитата(Kefir @ 3.9.2005, 12:25)
кстати, не знаю насчёт isset - иногда лучше empty. Т.к. переменная может быть создана, но быть пустой. Т.е. для проверки нужно ли ставить дефолтовые значения лучше использовать if(empty($foo)) $foo = $default_foo; Так будут ловиться ловится случаи и неустановленной и пустой переменной.

А вот тут ты ошибаешься. Если переменная не установлена, и ты ее будешь проверять на пустое значение то у тебя в любом случае выскачит ошибка, типа undefined varable, и поэтому придется постоянно глушить - `@`, ИМХО.

Автор: Aliance 3.9.2005, 15:35
Так можно сперва isset() а потом empty() проверить smile

Автор: Mal Hack 3.9.2005, 16:20
Цитата
А вот тут ты ошибаешься. Если переменная не установлена, и ты ее будешь проверять на пустое значение то у тебя в любом случае выскачит ошибка, типа undefined varable, и поэтому придется постоянно глушить - `@`, ИМХО.

Не будет варнинга, проверь. empty проверяет как существование переменной, так и значение, если переменная задана.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)