ошибка с Header()

Safary

Новичок
ну какую-то строчку в цикле дописать, чтоб автоматически массив "разобрать" по переменным. Только я не врублюсь как создавать переменные в цикле и чтоб у этих переменных имена разные были...
 

Духовность™

Продвинутый новичок
Не знаю, возможно ли это сделать...хм...
extract есть такая функция, но...

но мне например так удобнее, т.к. к этим переменным достаточное кол-во раз обращаться ещё нужно будет
не знаю, что удобнее, но в больших программах, где приходится принимать, проверять и обрабатывать гораздо бОльшие и сложные POST-массивы, я всетаки предпочитаю использовать глобальные переменные как они есть, т.е. оперировать непосредственно с $_POST. Это наглядно и меньше шанс "потерять" переменные.
 

Safary

Новичок
Хм... вот думаю. Разве уязвимость появляется?
К примеру есть у меня register.php и в ней переменная $_POST['admin']
скрипту-обработчику, который register.php можно запросто любое значение переменной массива $_POST['admin'] послать.
И также можно любое значение переменной $admin послать.
Разве не так?

-~{}~ 13.12.08 17:27:

triumvirat, вот точно, я extract() и имел ввиду. Оказывается есть такая функция и вручную не надо такого делать.
Спасибо. Что ж я не догадался в мануал заглянуть...

-~{}~ 13.12.08 17:32:

triumvirat, хм... вот теперь я призадумался использовать $_POST['login'] или $login
 

Духовность™

Продвинутый новичок
вот теперь я призадумался использовать $_POST['login'] или $login
думать тут особо нечего. с опытом сам поймешь и придешь к тому, что тебе более комфортно.

Как я уже сказал, использование явных GET, POST и др. глоальных массивов упрощает чтение кода сами программистом.

Кога ты сделаешь форму с кучей полей и оттранслируешь данные POST в локальные переменные, то ты будешь путаться, является ли переменная значением POST или это созданная непосредственно в сценарии.
Вот пример моего говнокода 7-летней давности: http://phpclub.ru/paste/index.php?show=2240

если ты заметил, то в сценарии я работаю напрямую с POST и GET - переменные эти сразу бросаются в глаза и становится ясно их происхождение.
 

Фанат

oncle terrible
Команда форума
господи боже мой.
да можно использовать $login, можно.
только если ты сам писал это $login, а не пихаешь себе в скрипт все, что тебе только хакер вася лопатой подкидывает
автоматизатор хренов
 

Safary

Новичок
:D

Ф-анат,Ну я ж проверку $login произвожу по полной, чтобы не хакнули, а так и в $_POST['login'] вася может подкинуть че-нибудь... одно и тоже ведь получается )

triumvirat, сейчас пишу registration.php, всётаки пока что пришел к выводу что для меня удобнее $login.
Только что писал $_POST['login'] но потом когда стал делать проверку на ошибки и т.д. Посмотрел как много раз используется и всётаки в конечном итоге опять заменил на $login, лично мне так удобнее. Пока что.
 

Фанат

oncle terrible
Команда форума
дело не в $login, а в $admin
в том, что обрабатывая пост автоматом, ты пихаешь себе в скрипт все переменные, которые пожелает хакер вася.

интересно, с третьего раза дойдет?
 

Safary

Новичок
кажется дошло...:D

тогда нужно делать проверку, откуда $_POST направился,
если не с моей страницы- то
PHP:
die('Ах ты сцуко хакер вонючий! пшел вон!');
правильно?

С моей же по идее не может прийти
PHP:
$admin='yes'
либо сразу же после
PHP:
extract($_POST);
писать $admin='';

А потом уже проверку через MySQL имеет ли такой-то логин админские права.

А вообще я вход в админку думал делать не из общего входа, а со страницы типа test1.ru/?page=jKsi7
 

Фанат

oncle terrible
Команда форума
да блин при чем здесь админка?
ты даешь в руки хакеру возможность переписать ЛЮБУЮ переменную в своем скрипте.

чтобы этого не было, $_POST нельзя обрабатывать автоматом.
только руками
именно так, как ты до судорог боишься - руками написав все переменные, которые ты хочешь получить из поста.

понимать это не обязательно.
надо просто ДЕЛАТЬ, КАК ТЕБЕ ГОВОРЯТ.
 

sakon

П..и.н..ок
*****
Только не обижайся :)
Ты настолько разжевал тему, что наверное ее надо закрыть, что бы не набежали "спецы" с советами.
 

Safary

Новичок
:D не, погодите тему закрывать!

тоесть если писать так - то переписать переменную не могут:
PHP:
$login=$_POST['login'];
а если так, то могут:
PHP:
extract($_POST);
А кто-нибудь знает почему? Мне реально интересно это знать...
В принципе получается
PHP:
extract()
вообще применять не советуется? или если советуется - то где применять? Вот мне важно это знать... =))))

-~{}~ 13.12.08 22:26:

P.S. я кстати сейчас к изучению регулярных выражений перешел :D

-~{}~ 13.12.08 22:28:

А как это понимать не обязательно, хорошему программисту - обязательно всё понимать.
Я ж хороший программист! :)
Ну пока что учусь конечно, но скоро стану хороший :D
 

Духовность™

Продвинутый новичок
А кто-нибудь знает почему?
потому, что ты выражением
траслируешь в свой скрипт ВСЁ, что тебе пошлют в посте. Пошлю я тебе в скрипт

PHP:
$_POST['sql'] = 'DELETE FROM table WHERE 1';
с помощью extract($_POST) переменная $_POST['sql'] превратится в $sql.

А у тебя в скрипте уже ранее определена переменная sql, которая содержит SQL-запрос на выборку. В результате новое значение $sql заместит твою ранее определенную переменную $sql со SQL-запросом и я грохну тебе всю базу.

Понятно?

Тебе ясно сказали - так не делается. Если не понимаешь почему, просто воспринимай это как незыблемую истину, потом поймешь.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Если не понимаешь почему, просто воспринимай это как незыблемую истину, потом поймешь.
я дико извиняюсь за оффтоп, но именно этот принцип обучения в школах и приводит к появлению сейчас говнокодеров. «Ты не поймешь эту теорему, просто вызубри ее». Так и запоминают потом по жизни «магические конструкции» из серии «если произнести это непонятное заклинание над массивом ПОСТ, хакер не сможет меня взломать»!! Думать — не научили.
 

Фанат

oncle terrible
Команда форума
Разумеется, ты прав.
Ну если человек не понимает с пятого раза?
И не хочет понять, в общем-то - не пытается воспроизвести ситуацию, как-то осмыслить?
Я говор о ситуации, когда выбор между "Тупое зазубривание" и "кривой код". Что тут выбрать?

-~{}~ 14.12.08 10:21:

Тебе он, кстати, ответит - я уже знаю, что: у него $sql пишется сразу перед вызовом.
Полное отсутствие абстрактного мышлнеия, системы Буратно:
Код:
--  Мы  займемся арифметикой... У вас в кармане два яблока...
   Буратино хитро подмигнул:
   -- Врете, ни одного...
   -- Я говорю, -- терпеливо повторила девочка, -- предположим,
что  у  вас в кармане два яблока. Некто взял у вас одно яблоко.
Сколько у вас осталось яблок?
   -- Два.
   -- Подумайте хорошенько.
   Буратино сморщился, -- так здорово подумал.
   -- Два...
   -- Почему?
   -- Я же не отдам Некту яблоко, хоть он дерись!
Неспособность представить себе ситуацию, которой нет перед глазами. Хоть он дерись.

-~{}~ 14.12.08 10:24:

А принцип обучения нормальный. Государству не нужны программисты. Государству нужны клерки в евросеть и подавальщики в макдональдс. А там как раз на все случаи жизни есть должностная инструкция.

-~{}~ 14.12.08 10:28:

Перечитал топик.
Все, как ты говоришь. Собственно, вот это вот сообщение от 13.12.08 16:55 можно вешать в рамочку и сдавать в музей, как эталон того, о чем ты говоришь - отсутствия понимания:
флопик, мне не совсем это нужно. У меня глобальные переменные отключены, я знаю что переменные все в массиве $_POST
Мне надо чтобы автоматически переменные из $_POST становились самостоятельными, т.е. чтобы вместо:

$_POST['login'] писать $login
"У меня эта бяка отключена, потому что я примерный пионер! И поэтому мне нужен код, который делает эту же самую бяку".
Что в лоб - что по лбу.
 

Safary

Новичок
Ну ладно вам, не злитесь на меня.
Я конечно туповатый немного, но я ж учусь! =)
Вот что бы я без вас делал, если бы вы мне многих вещей не обьяснили, про которые я спрашивал в топике.
Да я б вообще бы корявый код писал, а теперь уже знаю как начинают писаться 'правильные' CMS. Про них же нигде не написано, написаны только корявые конструкции в уроках 5-ти летней давности.
triumvirat, вот теперь я понял почему нельзя extract'om в таких случаях пользоваться, спасибо! Я просто не сразу схватываю, но у меня большое желание учиться PHP, всё свободное время на него трачу! :)

-~{}~ 14.12.08 20:23:

вот странно то, почему не работает такая конструкция:
PHP:
list($login,$pass,$rpass,$email,$nick,$ok)=$_POST;
-~{}~ 14.12.08 20:25:

с обычным массивом работает, а с $_POST нет...
 
Сверху