Инициализация переменных

  • Автор темы Автор темы player
  • Дата начала Дата начала

player

Новичок
Инициализация переменных

Всем привет!
Сегодня прочитал на счет безопасности РНР, и что надо инициализировать переменные еще до их употребления. Вопрос: как?

например если я ожидаю

$_POST[submit];
$_POST[name];
$_POST[pass];

Заранее спасибо
 
Это относится к переменным, которые получаются в результате использования register_globals = On.
т.е. раньше это нужно было писать
$a = 0, потому что злоумышленник мог передать
script.php?a=10
$_POST, $_GET и остальные суперглобальные массивы не нужно инициализировать.
 
ок, сенкс. А если вдруг register_globals = On?? мой код не будет тогда дырявый?
 
Обычные переменные нужно инициализировать тогда, потому что иначе злоумышленник может вмешаться в алгоритм работы твоего скрипта.
 
Re: Инициализация переменных

Автор оригинала: player
например если я ожидаю

$_POST[submit];
$_POST[name];
$_POST[pass];
ожидай $_POST['submit'];
и т. д.

Иначе будет выводить undefined index..

Кроме того, делай проверку на [m]isset[/m] или [m]empty[/m] в зависимости от потребностей.

Если используешь суперглобальные массивы, то вопрос с регистер не должен волновать...
update: это касается переменных, которые ты ожидаешь получить и строки или методом пост.

В принципе всё-таки лучше сразу привыкнуть делать что-то типа
$var='';
или
$var=0;
для переменных.
 
ожидай $_POST['submit'];
и т. д.

Иначе будет выводить undefined index..
Я пробовал, написал
$_POST[submit];
$_POST[name];
$_POST[pass];
но это конечно неправильно. Как делать?
Если написать $_POST[name]=""; то оно же обнулится

В принципе всё-таки лучше сразу привыкнуть делать что-то типа
$var='';
или
$var=0;
значит просто в начале скрипта всегда как и в других языках программирования инициализация. ОК, спасиб за советы
 
Имя индекса в кавычках.. !
$_POST['pass']

если же числовой индекс, то без кавычек..

как вариант можно использовать такие конструкции:

$var=(isset($_POST['pass']))?$_POST['pass']:'';

И дальше в коде плясать от этого..
 
ну да ясно, просто поленился. Короче, если глобалс включен, то супермассивы надо инициализировать или нет? если да то как?
Спасибо
 
player
Суперглобальный массивы не нужно инициализировать даже если включен глобалс. Это делает PHP.
 
твои скрипты не должны зависеть от положения глобалс.
поэтому все внутренние переменные надо инициализировать, чтобы при включённых глобалс они не перезаписывались.
И для того, чтобы ты всегда чётко знал, что у тебя есть эта переменная и её значение
 
Помоему я отупел. При грамотном использовании кода register_globals = on не является помехой. Так-то вы проверяйте все переменные прежде чем их использовать даже с register_globals = off
 
SiZE
Речь в топике шла не про проверку а про инициализацию переменных. Это два разных процесса проверка и иницализация.
Инциализация это чаще всего присваивание.
Проверка же чаще всего содежит условные конструкции типа if, switch.
 
В любом случае использование инициализированных переменных на порядок быстрее (относительно).
А если, вдруг, придется перейти на уровень вывода ошибок E_ALL то без инициализации ваще ппц).

З.Ы.
К $_POST, $_GET ... etc. вышесказанное отношения не имеет).
 
Сверху