[PHP]Register globals On/Off
-
der code sollte oben so heissen (sry kann nciht edit )
function data_read { ... if($_REQUEST["tmp_table"]) mysql_query("select foo from $_REQUEST[tmp_table] where bar"); else mysql_query("blup"); }
-
$tmp_table ist bei uns ein 'temporaere' variable die die zuletzt verwendete tabelle angibt. (das ganze ist teil einer komplexen engine)
wenn nun $tmp_table nicht gesetzt ist, dann kann data_read daraus einiges schließen und deswegen anderes reagieren.
wenn wir nun aber über die URL tmp_table übergeben, und tmp_table wird nicht im script gesetzt, dann wird data_read aufgerufen und nimmt an, dass tmp_table von der engine gesetzt wurde (validiert tmp_table dadurch nicht) und gibt vielleicht interne daten aus, die der kunde nicht sehen soll.
wenn wir nun register globals auf off stellen, kann dies nicht passieren. da eine $_REQUEST variable keine $GLOBALS überdecken kann.
dh bedeutet, wenn wir nun tmp_table über die URL übergeben, dann ist das nicht schlimm, da das globale tmp_table ja nicht überlagert wird und data_read das echte tmp_table verwendet.wie gesagt: $_REQUEST und $GLOBALS sollen sich nicht überschneiden, sonst kann es zu Problemen kommen.
-
k danke, werd das bei meinem webserver daheim mal testen,
gruß ranger81
-
Falls register_globals bei deinem Provider auf on ist, würde vielleicht folgender Code helfen, um das von Shade Of Mine genannte Problem zu beseitigen (einfach ganz oben im Script aufrufen):
foreach($_REQUEST as $key => $value) { unset(${$key}); // die {} kann man hier glaub ich auch weglassen }
-
Aber dann kannst du doch keine Benutzerangaben mehr übernehmen, oder doch?
-
Wieso nicht? es werden doch nur die globalen Variablen zerstört, das $_REQUEST-Array bleibt ja erhalten
-
Ja, aber dann kann man auch register globals auf off setzen...
-
Ich schrieb ja, dass dies vielleicht eine mgl. Alternative ist, falls sein Hoster es (bzw. er es halt nicht ändern kann) auf on hat.
-
Hi!
Wenn man einfach überprüft, ob die tabelle überhaupt existiert, bzw. dass der Zugriff gestatet ist, hat man keine Probs.
Bye
-
WARUM heißt es in php nich einfach $req_bla (oder so) statt $bla? Und wozu braucht man diese klitzekleine Bequemlichkeit? Also wer mit $_REQUEST["key"] Probleme hat tut mir leid. <verymuchverwundert>
-
Original erstellt von Cenetix:
Wenn man einfach überprüft, ob die tabelle überhaupt existiert, bzw. dass der Zugriff gestatet ist, hat man keine Probs.*lol*
Woher soll data_read denn wissen, ob das aktuelle Script rechte hat die Tabelle zu lesen? bzw. vielleicht hat das Script ja rechte die Tabelle zu lesen, nur ausgeben darf es die Daten nicht.Wie willst du sowas vernüftigerweise prüfen?
und vergiss nicht: das script kann ja vielleicht 100 mal pro Request data_read aufrufen -> da kannst du nicht jedesmal 100.000 Tests durchführen...