ошибка с Header()

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

но мне например так удобнее, т.к. к этим переменным достаточное кол-во раз обращаться ещё нужно будет
не знаю, что удобнее, но в больших программах, где приходится принимать, проверять и обрабатывать гораздо бОльшие и сложные POST-массивы, я всетаки предпочитаю использовать глобальные переменные как они есть, т.е. оперировать непосредственно с $_POST. Это наглядно и меньше шанс "потерять" переменные.
 
Хм... вот думаю. Разве уязвимость появляется?
К примеру есть у меня 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 - переменные эти сразу бросаются в глаза и становится ясно их происхождение.
 
господи боже мой.
да можно использовать $login, можно.
только если ты сам писал это $login, а не пихаешь себе в скрипт все, что тебе только хакер вася лопатой подкидывает
автоматизатор хренов
 
:D

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

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

интересно, с третьего раза дойдет?
 
кажется дошло...:D

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

С моей же по идее не может прийти
PHP:
$admin='yes'

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

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

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

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

понимать это не обязательно.
надо просто ДЕЛАТЬ, КАК ТЕБЕ ГОВОРЯТ.
 
*****
Только не обижайся :)
Ты настолько разжевал тему, что наверное ее надо закрыть, что бы не набежали "спецы" с советами.
 
: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-запросом и я грохну тебе всю базу.

Понятно?

Тебе ясно сказали - так не делается. Если не понимаешь почему, просто воспринимай это как незыблемую истину, потом поймешь.
 
Если не понимаешь почему, просто воспринимай это как незыблемую истину, потом поймешь.
я дико извиняюсь за оффтоп, но именно этот принцип обучения в школах и приводит к появлению сейчас говнокодеров. «Ты не поймешь эту теорему, просто вызубри ее». Так и запоминают потом по жизни «магические конструкции» из серии «если произнести это непонятное заклинание над массивом ПОСТ, хакер не сможет меня взломать»!! Думать — не научили.
 
Разумеется, ты прав.
Ну если человек не понимает с пятого раза?
И не хочет понять, в общем-то - не пытается воспроизвести ситуацию, как-то осмыслить?
Я говор о ситуации, когда выбор между "Тупое зазубривание" и "кривой код". Что тут выбрать?

-~{}~ 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
"У меня эта бяка отключена, потому что я примерный пионер! И поэтому мне нужен код, который делает эту же самую бяку".
Что в лоб - что по лбу.
 
Ну ладно вам, не злитесь на меня.
Я конечно туповатый немного, но я ж учусь! =)
Вот что бы я без вас делал, если бы вы мне многих вещей не обьяснили, про которые я спрашивал в топике.
Да я б вообще бы корявый код писал, а теперь уже знаю как начинают писаться 'правильные' 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 нет...
 
Сверху