Autor Zpráva
MilanJ
Profil
Mám nainstalovanou verzi PHP 4.3.10
Když chci zpracovat formullář metodou POST, měl bych mít proměnné z formuláře uložené v $_POST['x'] a stejně tak v $x, přesto mi PHP hlásí, že proměnná $x neexistuje.
Hádám, že je to nastavením php.ini, ale v jaké části? Co musím změnit, abych ji přístupnou měl?
jrm
Profil
REGISTER_GLOBALS on/off
MilanJ
Profil
Mám v php.ini nastaveno register_globals = Off a proměnná odesílaná pomocí POST není v $x, ale pouze v $_POST['x']
Když nastavím register_globals = On, bude to fungovat jak pro $_POST['x'], tak pro $x?

Není nebezpečné mít na serveru nastaveno register_globals = On ? Můj poskytovatel ho tak nastaven má.
MilanJ
Profil
Někde jsem četl, že register_globals = Off už PHP 5 vysloveně vyžaduje, je na tom něco pravdy? ...nerad bych, aby mi scripty s přechodem na PHP 5 přestaly fungovat.
jrm
Profil
http://interval.cz/clanky/superglobalni-promenne-v-php/
MilanJ
Profil
Článek jsem přečetl, ale stále mi není jasné, jestli je bezpečnější mít na serveru nastaveno register_globals = On nebo register_globals = Off.

Můj poskytovatel Active 24 má nastaveno register_globals = On . Jak je to u jiných poskytovatelů?

Když budu používat striktně $_POST['x'], může mi být jedno, je-li register_globals ON nebo OFF, je to tak?
krteczek
Profil
MilanJ: I tak to není jedno, pokud je na serveru register_globals=on, tak ikdyž budeš používat $_POST, $_GET... tak hrozí, že ti útočník snadno podstrčí něco co nechceš.

Dobrý zvyk je všechny normální proměnné ($a, $n['neco'],...) nejprve na začátku scriptu vynulovat ($a = 0; $b = ''; ... ), aby nešlo tyto proměnné nakrmit z get/post.

Příklad: vytvoř soubor a tohle do něj zapiš:
<?php
$c = $a + $b;
echo '<br>$c = ' . $c ;
?>
register_globals=on
1. zavolej ten skript bez parametrů v adrese "index.php"
2. zavolej ho s "index.php?a=9"
3. zavolej ho s "index.php?a=9&b=3

register_globals=off
1. zavolej ten skript bez parametrů v adrese "index.php"
2. zavolej ho s "index.php?a=9"
3. zavolej ho s "index.php?a=9&b=3

Skript si uprav následovně:
<?php
$c = $_GET['a'] + $b;
echo '<br>$c = ' . $c ;
?>

register_globals=on
1. zavolej ten skript bez parametrů v adrese "index.php"
2. zavolej ho s "index.php?a=9"
3. zavolej ho s "index.php?a=9&b=3

register_globals=off
1. zavolej ten skript bez parametrů v adrese "index.php"
2. zavolej ho s "index.php?a=9"
3. zavolej ho s "index.php?a=9&b=3

uprav script znovu:
<?php
$b = 0;
$c = 0;
$a = 5;
$c = $_GET['a'] + $b;
echo '<br>$c = ' . $c ;
echo '<br>$a= ' . $a ;
echo '<br>$_GET["a"] = ' . $_GET['a'] ;
echo '<br>$b= ' . $b ;
echo '<br>$_GET["b"] = ' . $_GET['b'] ;
?>
register_globals=on
1. zavolej ten skript bez parametrů v adrese "index.php"
2. zavolej ho s "index.php?a=9"
3. zavolej ho s "index.php?a=9&b=3

register_globals=off
1. zavolej ten skript bez parametrů v adrese "index.php"
2. zavolej ho s "index.php?a=9"
3. zavolej ho s "index.php?a=9&b=3

Myslím že výsledky jsou dost pochopitelné, po každé změně nastavení v php.ini musíš restartovat apache
krteczek
MilanJ
Profil
krteczek
Co bys doporučoval Ty?
krteczek
Profil
vypnout register_globals, iniciovat všechny proměnné, používat $_POST, $_GET, $_SESSION, $_COOKIE, na počítači na kterém vyvijíš nastavit v php.ini error_reporting = E_ALL , nebo ve skriptech použít error_reporting(E_ALL);, bude to vypisovat veškeré hlášky php všetně používání neiniciovaných proměnných
krteczek
Toto téma je uzamčeno. Odpověď nelze zaslat.

0