« 1 2
Autor Zpráva
YoSarin
Profil
Bart
Založ vlastní topic, tohle s původním tématem nijak nesouvisí
joe
Profil
YoSarin
Žádnou nevýhodu při použití $_REQUEST neznám a plno lidí to používá. A používá se to i v různých opensource systémech, i když to asi není dobrý argument, když je to zrovna opensource, no ale zase na druhou stranu, pracuje na tom větší komunita, tak o tom něco musí vědět.

Takže kdo mi vysvětlí proč nepoužívat $_REQUEST, které mi přijde čistější v kódu než $_GET / $_POST?
hej?
Profil *
takže je to tak, kolik mám odkazů, které chci zobrazit v obsahu tolik musim mit v obsahu $_REQUESTů???
Ted
Profil *
Joe: Výsledek: nejde přistupovat přes $_REQUEST k obsahu sessions nebo cookies. Alespoň u mě ne :-) Možná, že se to dá nastavit někde v PHP.

U tebe to nefunguje, u mě na localhostu taky ne... Ale na cizím servru už mi request ukazuje i cookie.
Nicméně je nutné ji nastavit správně pomocí setcookie, ne přes $_COOKIE['cookie'] =

Konkrétní příklad:

Kód:
 setcookie("cookie", "2", time()+24 * 3600);
 $_COOKIE['cookie'] = "4";


Výsledek:
COOKIES: Array ( [cookie] => 4 ) 
REQUEST: Array ( [cookie] => 2 ) 


Co z toho plyne a proč se to takhle vlastně děje mi nicméně stále není jasné. ;-)
Ted
Profil *
jinak můj konkrétní problém byl v tom, že mi request načítal jméno uživatele z cookie a ne z odeslaného formuláře.

řešení:
a) nepoužívat $_request
b) nepoužívat stejný název pro proměnou a pro název klíče v superglobálních polích
Ted
Profil *
hej? : např. pro hromadné načtení proměnných z $_requestu do normálních proměnných lze použít

foreach($_REQUEST as $ind => $val) 
{ 
  $val=addslashes($val); 
  eval("$".$ind."=\"".$val."\";"); 
} 


(převzato z interval.cz)
souki
Profil
Tak přesně kvůli tomuhle kusu kódu byl teď vyhackován jeden eshop. Je to parádní díra :)
dRaGen
Profil
Ted:
To si doufam nemohl myslet vážně ten kód, ale jako pobavení jak se to NEMÁ dělat je to výborný. Nemáš link kde přesně to na intervalu je ?
TomášK
Profil
dRaGen:
http://interval.cz/clanky/superglobalni-promenne-v-php/ Za domácí úkol vymysli, jak jsem to objevil ;-)
dRaGen
Profil
TomášK:
google :) ale já na to byl až moc línej :)
Ted
Profil
souki: dRaGen: klidně se můžete i rozepsat, tato diskuze je přeci o tom zda používat $_REQUEST nebo ne a proč. ;) můžeš popsat přesněji jak ta díra funguje?
dRaGen
Profil
Ted:
Kde je ta díra ? Dosaď si za $ind třeba a = 1; die('you bitch'); $x

$_REQUEST určitě nepoužívat, protože můžeš zaměnovat data z POST a GET což vede ke spoustě útokům a také špatně odhalitelným chybám v aplikaci proč se ti dvě proměnný pořád přepisují... používat $_REQUEST je prostě prasárna. Používání $_GET a $_POST je už o něco lepší ale přímo do kódu to psát taky není moc košér... nejlepší způsob jak se dostat k POST/GET parametrům je udělat si nějaký způsob reflexe.
Majkl578
Profil
Ted:
foo.php?x;exec('rm -rf /');$x
foo.php?x;exec('dd if=/dev/null of=/');$x
foo.php?x;$c%3Dchr(32);$r%3Dmysql_query("SHOW{$c}TABLES");$x&x;$y%3Dmysql_num_rows($r);$x&x;for($x%3D0;$x<$y;$x%2B%2B){echo(mysql_result($r,$x));echo("\n");}$x
foo.php?x;var_dump(get_defined_vars());$x

Atd.

Mimochodem, když už jít do extrému a simulovat chování register_globals (zavržená a v další verzi odstraněná feature), existuje funkce extract.
Ted
Profil
pěkné, už je mi to jasné, díky za osvětlení
DoubleThink
Profil *
Ted:
jinak můj konkrétní problém byl v tom, že mi request načítal jméno uživatele z cookie a ne z odeslaného formuláře.
Pak je administrátor tvého serveru pitomec, protože standardní hodnota direktivy request_order je jen "GP".

dRaGen:
$_REQUEST určitě nepoužívat, protože můžeš zaměnovat data z POST a GET což vede ke spoustě útokům
Například jakým? Je to request, tedy suma dat odeslaných v požadavku. A požadavku se apriori nedá věřit nikdy. Je šumák, jestli data přišla z POST, GET nebo COOKIE, všechny se dají zfalšovat stejně jednoduše.

$_REQUEST se v neopodstatněných důvodech nepoužívá, protože je to pak nepřehledné ve zdroji. S bezpečností to nesouvisí.
« 1 2

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: