$_RQUEST ?!?

19 отговора 602 прегледа
#1

$_RQUEST ?!?

Въпроса ми е следният : "Има ли смисъл да използвам $_POST и $_GET в скриптовете, които съзадавам, при положение, че имам на разположение $_REQUEST. T.e. има ли смисъл да си правя целия скрипт да ползва само един метод ? Сигурност, портативност... незнам... вие кажете.

Отговор
в отговор на Unit-731 #2

Re: $_RQUEST ?!?

с пост или гет можеш да разделиш начина на получаване на параметри в скрипта. Например когато имаш "гет ид" ще ти се изпълнява една част от скрипта а при "пост ид" ще е другата.

Отговор
в отговор на Unit-731 #3

Re: $_RQUEST ?!?

Според мен, използването на $_REQUEST е пробив в сигурността на твоя скрипт. Ако използваш $_REQUEST ти абсолютно елиминираш директивата

register_globals = Off

Отговор
в отговор на Bълk #4

Re: $_RQUEST ?!?

Би ли ми дал някакъв кратък практически пример, когато би ми се наложило да използвам това разделяне?
Аз все още не съм схванал напълно и разликата между двата метода (кой при какви условия е подходящ), освен, че единия праща в хедъра, а другия в урл-то.

Отговор
в отговор на Unit-731 #5

в общи линии е нещо от рода

if(isset($_GET['action'])):
switch($_GET['action']):
case "delete":
if(!isset($_GET['id'])): header("location:".$_SERVER['PHP_SELF']);exit; endif;
// delete operation dependecies display for an operation confirmation
// display of the form with hidden field 'action=delete' and hidden field 'id=$_GET['id']'
break;
endswitch;
elseif(isset($_POST['action'])):
switch($_POST['action']):
case "delete":
if(!isset($_POST['id'])): header("location:".$_SERVER['PHP_SELF']); exit; endif;
mysql_query("DELETE FROM sometable WHERE something='".$_POST['id']."'")
break;
endswitch;
else:
// full list with action link
endif;

Отговор
в отговор на $burov #6

Re: $_RQUEST ?!?

ами не си прав!! (само да спомена аз много рядко ползва _POST и _GET ... само когато ми се налага ;-))

не е същото като с директивата register_globals = Off

защото там основно се предпазваш от нещо като

if ($username == 'ceco') { $login = true; }
if ($login) { echo 'you are logged';}

а тук ще се предпазиш пак защото кода ще е

if ($_REQUEST['username'] == 'ceco') { $login = true; }
if ($login) { echo 'you are logged';}

т.е. пак си се предпазил някой да направи [линк]

т.е. за никакво елиминиране не става дума

Отговор
в отговор на phpGuru #7

Re: $_RQUEST ?!?

E, ако страницата ти test.php съдържа кода:

if ($username == 'ceco') { $login = true; }
if ($login) { echo 'you are logged';}

не виждам как се предпазваш по този начин от [линк]
T.e. oсвен със сесии, друг начин не виждам.

Отговор
в отговор на Unit-731 #8

Re: $_RQUEST ?!?

примера е елементарен, дори не е пример за подръжка

идеата на $_REQUEST, $_GET, $_POST когато опцията в php.ini

register_globals = Off

е, че няма да имаш никоя обикновенна променлива неинициализирана (защото не си обърнал внимание или забравил) да бъде инициализирана през URL

т.е. варианта който си копирал без $_REQUEST е принципно опасен
а другият не ..... (примера е супер елементарен важен е принципа ;-))

Отговор
в отговор на Unit-731 #9

Re: $_RQUEST ?!?

а по върпоса дали $_REQUEST или $_POST/$_GET

аз ползвам предимно $_REQUEST (щото по-лесно ;-)) освен в някои случаи, когато се налага да знаеш дали е по $_GET или $_POST, но тва е рядкост

Отговор
в отговор на phpGuru #10

Re: $_RQUEST ?!?

Здрасти Гуру,
признавам си че писах наизуст и след твоите постинги взех че попрочетох това онова от мануала. Стигнах до извода, че вариантите са два, според стойността на register_globals

1. Ако register_globals = Off - ти си прав, в общия случай.

2. Ако register_globals = On стигнах до:

[линк]

[линк]

If the register_globals directive is set, then these variables will also be made available in the global scope of the script; i.e., separate from the $_REQUEST array.

.....

If you don't care where the request data comes from, you can use $_REQUEST as it contains a mix of GET, POST and COOKIE data.

.....

Of course, simply turning off register_globals does not mean your code is secure.



което ще рече, че при включени register_globals, най-добре забрави за $_REQUEST, а по-добре е да се проверява от къде идва променливата, от кой глобален масив. Лично мое мнение. Дали ще използваш $_GET, $_POST или само $_REQUEST зависи все пак и от нивото на защита, което се изисква от съответното приложение.

Отговор
в отговор на $burov #11

Re: $_RQUEST ?!?

гледай сега ;-) да знаеш откъде ти идва променливата от post или get НЕ ПОВИШАВА НИКАКВА СИГУРНОСТ :-)

register_globals = Off
повишава сигурността от гледна точка, че предпазва за от неинициализирани променливи

а сигурността идва от проверка на какви стойности ти идват (т.е. че нещо е int или квото трябва да е, и не съдържа sql injections, javascript injections и т.н.), а не от къде ти идват - някой ако реши да те хаква да немислиш, че не може да си направи заявка каквато си иска и дали си писал _POST или _GET няма никакво значение, той ще го симулира

незнам дали се изразих ясно ;-)

Отговор
в отговор на phpGuru #12

Re: $_RQUEST ?!?

Разбирам те напълно. Явно досега съм работил с една голяма заблуда. Благодаря за поясненията, определено ми улесняваш работата. Отсега нататък май само $_REQUEST, $_FILES, $_SERVER ще ползвам.

Отговор
в отговор на $burov #13

Re: $_RQUEST ?!?

Айде и аз да се намеся ;-)
Аз пък ползвам и винаги ще ползвам _GET, _POST, _COOKIE,
защото .... ами защото мога да си миксвам променливи с еднакви имена, без да се бъркам, а при положение, че твори повече от един човек в един и същи код, не е ясно кой какво ще натвори ;-)))))
в _REQUEST стойностите пристигат във variables_order
Т.Е. GET, POST, Cookie (или както са настроени), така че ако имаш куки id=5 и си пуснеш script.php?id=3 познай кое ще дойде в рекуеста :-)))
_REQUEST["id"]=5
_GET["id"]=3
_COOKIE["id"]=5

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy

Редактирано от ro6avia на

Отговор
в отговор на ro6avia #14

Re: $_RQUEST ?!?

RE: ами защото мога да си миксвам променливи с еднакви имена, без да се бъркам

Точно това би ме обърквало и честно казано - звучи ми като една пълна каша - променливи с еднакви имена, използвани за различни цели. Старая се винаги променливите да си имат уникални за тях имена, свързани с конкретната инфорамация за която се отнасят - article_id, banner_id и т.н.

RE: а при положение, че твори повече от един човек в един и същи код, не е ясно кой какво ще натвори

Когато по един проект работят няколко души, тогава пък трябва да си изработите доста строги правила за именуването на променливите точно за да нямате поменливи с еднакви имена, използвани за различни цели.

Отговор
в отговор на ro6avia #15

Re: $_RQUEST ?!?

Напълно подкрепям, и аз си давам различно значение на променливите, идващи от гет, пост, сесия и тн. и това ми е много полезно. (друг е въпроса, че това ми причинява доста главоболия, ако се сложи на хост с включен регистър глобалс).
Освен това не виждам как на пхпГуру му е по-лесно да пише дума със 9 знака, вместо такава с 5 или 6

---
Priatelite.net
Uslugite.net
Отговор
в отговор на $burov #16

Re: $_RQUEST ?!?

Е да де - променливите - банер_ид - слагаш му го в кукито за да знаеш кой банер си му показал - обаче следващия му клик дава друг банер - и го редиректваш през гет-а да кажем .... и .....

А точно конвенцията да имената на променливите дава по-голяма вероятност да има дублирани променливи .... навсякъде където има някакво ИД се пуска променлива ИД, а не на_баба_ми_ИД-то ;-)))))

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на voyager #17

Re: $_RQUEST ?!?

хахаа

като например да ти напиша:
script.php?_SESSION['user']=admin

root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Отговор
в отговор на ro6avia #18

Re: $_RQUEST ?!?

нещо не мога да хвана връзката

Отговор
в отговор на voyager #19

Re: $_RQUEST ?!?

начи, аз не карам никой да го ползва ;-) само казвах, че е толкова сигурно, колкото и който и да е от другите масиви :-)

иначе аз пиша всичко с много, но малки файлове, всеки от които прави нещо (а не 1 голям дето прави 100 неща) и така много рядко може да ми се случи да трябва да миксвам 100 неща post па get .... и при тва да ме интересува от къде е дошло - щом е дошло е добре дошло ;-) фрас един $_REQUEST и вече само гледам да не е некое лайно :-)

Отговор
в отговор на $burov #20

Re: $_RQUEST ?!?

ми давам ти конкретен пример за това за какво точно ползвам една и съща променлива, и според зависи дали е дошла с ГЕТ или ПОСТ правя различни работи:

значи имаш таблица в ДБ, и си изкарал (да речем) първите 20 записа... на всеки ред има линкове за "едит" и "делете" (примерно) - както се досещаш, викат файловете дето се занимават с редактирането и изтриването на записи с ГЕТ параметър ИД-то (примерно)... такааа... файла за редактиране очаква ИД от ГЕТ за да прочете конкретния запис от ДБ и да ти го покаже във форма, която се предава по ПОСТ на същия скрипт... и когато получи данни от ПОСТ-а (съответно и ИД) - прави УПДАТЕ на този запис... обобщено: ако получи ИД-то от ГЕТ - чете от базата, ако го получи от ПОСТ - записва пак там... а ако не получи никво ИД - отваря празна форма, която си попълваш и събмитваш - тогава се прави ИНСЕРТ (получава по ПОСТ ИД със стойност НУЛЛ)...
Ако ползвам РЕКУЕСТ за целта - кво праим?
и така се решава и проблема с регистер_глобалс, щото ме интересуват променливите само от ГЕТ или ПОСТ, дори и да са импортнати автоматично на кой му пука...

Just a genius

Отговор