$_RQUEST ?!?
19 отговора
602 прегледа
$_RQUEST ?!?
Въпроса ми е следният : "Има ли смисъл да използвам $_POST и $_GET в скриптовете, които съзадавам, при положение, че имам на разположение $_REQUEST. T.e. има ли смисъл да си правя целия скрипт да ползва само един метод ? Сигурност, портативност... незнам... вие кажете.
Re: $_RQUEST ?!?
с пост или гет можеш да разделиш начина на получаване на параметри в скрипта. Например когато имаш "гет ид" ще ти се изпълнява една част от скрипта а при "пост ид" ще е другата.
Re: $_RQUEST ?!?
Според мен, използването на $_REQUEST е пробив в сигурността на твоя скрипт. Ако използваш $_REQUEST ти абсолютно елиминираш директивата
register_globals = Off
register_globals = Off
Re: $_RQUEST ?!?
Би ли ми дал някакъв кратък практически пример, когато би ми се наложило да използвам това разделяне?
Аз все още не съм схванал напълно и разликата между двата метода (кой при какви условия е подходящ), освен, че единия праща в хедъра, а другия в урл-то.
Аз все още не съм схванал напълно и разликата между двата метода (кой при какви условия е подходящ), освен, че единия праща в хедъра, а другия в урл-то.
в общи линии е нещо от рода
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;
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;
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';}
т.е. пак си се предпазил някой да направи [линк]
т.е. за никакво елиминиране не става дума
не е същото като с директивата 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';}
т.е. пак си се предпазил някой да направи [линк]
т.е. за никакво елиминиране не става дума
Re: $_RQUEST ?!?
E, ако страницата ти test.php съдържа кода:
if ($username == 'ceco') { $login = true; }
if ($login) { echo 'you are logged';}
не виждам как се предпазваш по този начин от [линк]
T.e. oсвен със сесии, друг начин не виждам.
if ($username == 'ceco') { $login = true; }
if ($login) { echo 'you are logged';}
не виждам как се предпазваш по този начин от [линк]
T.e. oсвен със сесии, друг начин не виждам.
Re: $_RQUEST ?!?
примера е елементарен, дори не е пример за подръжка
идеата на $_REQUEST, $_GET, $_POST когато опцията в php.ini
register_globals = Off
е, че няма да имаш никоя обикновенна променлива неинициализирана (защото не си обърнал внимание или забравил) да бъде инициализирана през URL
т.е. варианта който си копирал без $_REQUEST е принципно опасен
а другият не ..... (примера е супер елементарен важен е принципа ;-))
идеата на $_REQUEST, $_GET, $_POST когато опцията в php.ini
register_globals = Off
е, че няма да имаш никоя обикновенна променлива неинициализирана (защото не си обърнал внимание или забравил) да бъде инициализирана през URL
т.е. варианта който си копирал без $_REQUEST е принципно опасен
а другият не ..... (примера е супер елементарен важен е принципа ;-))
Re: $_RQUEST ?!?
а по върпоса дали $_REQUEST или $_POST/$_GET
аз ползвам предимно $_REQUEST (щото по-лесно ;-)) освен в някои случаи, когато се налага да знаеш дали е по $_GET или $_POST, но тва е рядкост
аз ползвам предимно $_REQUEST (щото по-лесно ;-)) освен в някои случаи, когато се налага да знаеш дали е по $_GET или $_POST, но тва е рядкост
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 зависи все пак и от нивото на защита, което се изисква от съответното приложение.
признавам си че писах наизуст и след твоите постинги взех че попрочетох това онова от мануала. Стигнах до извода, че вариантите са два, според стойността на 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 зависи все пак и от нивото на защита, което се изисква от съответното приложение.
Re: $_RQUEST ?!?
гледай сега ;-) да знаеш откъде ти идва променливата от post или get НЕ ПОВИШАВА НИКАКВА СИГУРНОСТ :-)
register_globals = Off
повишава сигурността от гледна точка, че предпазва за от неинициализирани променливи
а сигурността идва от проверка на какви стойности ти идват (т.е. че нещо е int или квото трябва да е, и не съдържа sql injections, javascript injections и т.н.), а не от къде ти идват - някой ако реши да те хаква да немислиш, че не може да си направи заявка каквато си иска и дали си писал _POST или _GET няма никакво значение, той ще го симулира
незнам дали се изразих ясно ;-)
register_globals = Off
повишава сигурността от гледна точка, че предпазва за от неинициализирани променливи
а сигурността идва от проверка на какви стойности ти идват (т.е. че нещо е int или квото трябва да е, и не съдържа sql injections, javascript injections и т.н.), а не от къде ти идват - някой ако реши да те хаква да немислиш, че не може да си направи заявка каквато си иска и дали си писал _POST или _GET няма никакво значение, той ще го симулира
незнам дали се изразих ясно ;-)
Re: $_RQUEST ?!?
Разбирам те напълно. Явно досега съм работил с една голяма заблуда. Благодаря за поясненията, определено ми улесняваш работата. Отсега нататък май само $_REQUEST, $_FILES, $_SERVER ще ползвам.
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
Аз пък ползвам и винаги ще ползвам _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 на
Re: $_RQUEST ?!?
RE: ами защото мога да си миксвам променливи с еднакви имена, без да се бъркам
Точно това би ме обърквало и честно казано - звучи ми като една пълна каша - променливи с еднакви имена, използвани за различни цели. Старая се винаги променливите да си имат уникални за тях имена, свързани с конкретната инфорамация за която се отнасят - article_id, banner_id и т.н.
RE: а при положение, че твори повече от един човек в един и същи код, не е ясно кой какво ще натвори
Когато по един проект работят няколко души, тогава пък трябва да си изработите доста строги правила за именуването на променливите точно за да нямате поменливи с еднакви имена, използвани за различни цели.
Точно това би ме обърквало и честно казано - звучи ми като една пълна каша - променливи с еднакви имена, използвани за различни цели. Старая се винаги променливите да си имат уникални за тях имена, свързани с конкретната инфорамация за която се отнасят - article_id, banner_id и т.н.
RE: а при положение, че твори повече от един човек в един и същи код, не е ясно кой какво ще натвори
Когато по един проект работят няколко души, тогава пък трябва да си изработите доста строги правила за именуването на променливите точно за да нямате поменливи с еднакви имена, използвани за различни цели.
Re: $_RQUEST ?!?
Напълно подкрепям, и аз си давам различно значение на променливите, идващи от гет, пост, сесия и тн. и това ми е много полезно. (друг е въпроса, че това ми причинява доста главоболия, ако се сложи на хост с включен регистър глобалс).
Освен това не виждам как на пхпГуру му е по-лесно да пише дума със 9 знака, вместо такава с 5 или 6
---
Priatelite.net
Uslugite.net
Освен това не виждам как на пхпГуру му е по-лесно да пише дума със 9 знака, вместо такава с 5 или 6
---
Priatelite.net
Uslugite.net
Re: $_RQUEST ?!?
Е да де - променливите - банер_ид - слагаш му го в кукито за да знаеш кой банер си му показал - обаче следващия му клик дава друг банер - и го редиректваш през гет-а да кажем .... и .....
А точно конвенцията да имената на променливите дава по-голяма вероятност да има дублирани променливи .... навсякъде където има някакво ИД се пуска променлива ИД, а не на_баба_ми_ИД-то ;-)))))
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
А точно конвенцията да имената на променливите дава по-голяма вероятност да има дублирани променливи .... навсякъде където има някакво ИД се пуска променлива ИД, а не на_баба_ми_ИД-то ;-)))))
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: $_RQUEST ?!?
хахаа
като например да ти напиша:
script.php?_SESSION['user']=admin
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
като например да ти напиша:
script.php?_SESSION['user']=admin
root@ro6avia#echo rm -rf * > /bin/seek_and_destroy
root@ro6avia#/bin/seek_and_destroy
Re: $_RQUEST ?!?
начи, аз не карам никой да го ползва ;-) само казвах, че е толкова сигурно, колкото и който и да е от другите масиви :-)
иначе аз пиша всичко с много, но малки файлове, всеки от които прави нещо (а не 1 голям дето прави 100 неща) и така много рядко може да ми се случи да трябва да миксвам 100 неща post па get .... и при тва да ме интересува от къде е дошло - щом е дошло е добре дошло ;-) фрас един $_REQUEST и вече само гледам да не е некое лайно :-)
иначе аз пиша всичко с много, но малки файлове, всеки от които прави нещо (а не 1 голям дето прави 100 неща) и така много рядко може да ми се случи да трябва да миксвам 100 неща post па get .... и при тва да ме интересува от къде е дошло - щом е дошло е добре дошло ;-) фрас един $_REQUEST и вече само гледам да не е некое лайно :-)
Re: $_RQUEST ?!?
ми давам ти конкретен пример за това за какво точно ползвам една и съща променлива, и според зависи дали е дошла с ГЕТ или ПОСТ правя различни работи:
значи имаш таблица в ДБ, и си изкарал (да речем) първите 20 записа... на всеки ред има линкове за "едит" и "делете" (примерно) - както се досещаш, викат файловете дето се занимават с редактирането и изтриването на записи с ГЕТ параметър ИД-то (примерно)... такааа... файла за редактиране очаква ИД от ГЕТ за да прочете конкретния запис от ДБ и да ти го покаже във форма, която се предава по ПОСТ на същия скрипт... и когато получи данни от ПОСТ-а (съответно и ИД) - прави УПДАТЕ на този запис... обобщено: ако получи ИД-то от ГЕТ - чете от базата, ако го получи от ПОСТ - записва пак там... а ако не получи никво ИД - отваря празна форма, която си попълваш и събмитваш - тогава се прави ИНСЕРТ (получава по ПОСТ ИД със стойност НУЛЛ)...
Ако ползвам РЕКУЕСТ за целта - кво праим?
и така се решава и проблема с регистер_глобалс, щото ме интересуват променливите само от ГЕТ или ПОСТ, дори и да са импортнати автоматично на кой му пука...
Just a genius
значи имаш таблица в ДБ, и си изкарал (да речем) първите 20 записа... на всеки ред има линкове за "едит" и "делете" (примерно) - както се досещаш, викат файловете дето се занимават с редактирането и изтриването на записи с ГЕТ параметър ИД-то (примерно)... такааа... файла за редактиране очаква ИД от ГЕТ за да прочете конкретния запис от ДБ и да ти го покаже във форма, която се предава по ПОСТ на същия скрипт... и когато получи данни от ПОСТ-а (съответно и ИД) - прави УПДАТЕ на този запис... обобщено: ако получи ИД-то от ГЕТ - чете от базата, ако го получи от ПОСТ - записва пак там... а ако не получи никво ИД - отваря празна форма, която си попълваш и събмитваш - тогава се прави ИНСЕРТ (получава по ПОСТ ИД със стойност НУЛЛ)...
Ако ползвам РЕКУЕСТ за целта - кво праим?
и така се решава и проблема с регистер_глобалс, щото ме интересуват променливите само от ГЕТ или ПОСТ, дори и да са импортнати автоматично на кой му пука...