AHoj. Mám problem. Zaregistroval sem si freehosting a doménu na www.psisco.com. U freehostingu píšou, že nejde zapnout Register globals a vypnout Safe mode. Já mám načítání stránek pomocí proměných např: ?show=home. Příkaz ke vkládání mám: <? if($show==""){$show="welcome";}?><? require $show.".php"; ?>. No tohle tam nefunguje. Na podporu jsem psal a napsali mi to že nejde zapnout Register globals a vypnout Safe mode. Já mám dotaz jestli tohle načítání nejde udělat nějak jinak aby to fungovalo. Prosím pomocte Dik. Dan
tohle si napis uplne nad tu podminku a melo by to jet ...
$show = $_GET['show'];
Pokud ne.. SOJKOVEC bo NIPAL bo jiny PHP schopny ti poradi ;)
sprav si register globals sam:
register_globals () {
foreach ($_GET as $key=>$value) {
$key = $value;
}
foreach ($_POST as $key=>$value) {
$key = $value;
}
foreach ($_COOKIE as $key=>$value) {
$key = $value;
}
}
uz stali len zavolat funkciu register_globals na zaciatku kazdeho skriptu a je to
lacop:
to vsetko sa da zapisat aj takto:
extract($_GET);
extract($_POST);
extract($_COOKIE);
lacop: IMHO by ti to nemohlo fungovat. musel bys místo $key = $value dávat $$key = $value, což je trochu rozdíl ;)
dan: k čemu je psisco dobrý, když neumožňuje zapnout register globals? já myslím, že register globals by neměly mít nějaký bezpečnostní problém, že by nešly zapnout.
pinkynew: jj. i když ještě lépe by šlo popadnout textový editor a dát najdi->nahraď a všechny tyhle proměnné normálně nahradit za $_POST nebo $_GET. ušetří se pak práce PHP parseru.
dan: mimochodem, takovýmto způsobem zobrazovat různé stránky není bezpečné. řekněme, že inkriminovaný soubor se jmenuje index.php. pak někdo zadá tvojeadresa.neco/index.php?show=index. nechtěj vědět, co se stane ;) zacyklí se ti server :D (mno, on to ten server po 30 sekundách vzdá, ale výsledek bude otřesný - prázdná stránka s nějakým varováním, že běh skriptu překročil 30 s)
if (isset($_REQUEST)) extract($_REQUEST);
Jinak totální nebezpečnost vkládání přímo názvů stránek byla zmíněna výše.