CMS - Der Dirigent » Community » DeDi-Talk
Neue Umfrage | neues Thema | Antworten
Entwicklung, Evtl. neues Board anlegen :-)?
« Älteres Thema | Neueres Thema » Thema abonnieren | Thema versenden | Thema drucken
stoph | Geschrieben am: 29. Mar 2003 - 07:11 | ||||||||||
Unregistered |
Hi, ppl, ich habe vor (evtl.) eine bestimmte Erweiterung für den Dirigenten zu programmieren. Welche das ist, werde ich noch extra erläutern :-). Könnt Ihr noch ein Entwicklung-Forum aufmachen? Bis dahin schreibe ich meine Frage den client betreffend hier. :-) Ich versuche mich in den DEDI-Quellcode einzuarbeiten und habe gleich in der ersten Datei eine Verständnisfrage. Wenn sie zu banal, oder gar ketzerisch erscheint, dann habt bitte Rücksicht. Folgender Code (index.php - Zeilen 21-28):
Hier werden alle Variable aus den Arrays ($_GET, $_COOKIE, usw.) nochmals in Arrays $HTTP_GET_VARS, $HTTP_COOKIE_VARS, usw. gespeichert. Warum? Die Original-Variablen stehen sein php 4.1.0 allen zur Verfügung, auch wenn register_globals eingeschalten ist. Die Variable ($HTTP_*_VARS) werden ja für verschiedene Funktionen im Backend-Verzeichnis (Sessions, usw.) benutzt. cu, stop.h |
||||||||||
pschuster | Geschrieben am: 29. Mar 2003 - 07:32 | ||||||||||
Unregistered |
Hi stoph, häh?? Mit diesem Code werden lediglich sämtliche Umgebungsvariablen zunächst in $arr geladen und dann in die Keyvariablen extracted. Soll heissen aus z.B. $HTTP_GET_VARS["test"] wird $test. Sollten die Variablen $HTTP_x_VARS nicht zur Verfügung stehen (vielleicht ab PHP 5.0?) wird das selbe nochmal mit $_x probiert. Einen schönen Tag noch Patrick |
||||||||||
stoph | Geschrieben am: 29. Mar 2003 - 08:20 | ||||||||||
Unregistered |
OK, jetzt habe ich den Quelltext kapiert. Extract hatte ich wohl nur anfangs wahrgenommen und dann später durch das Arraygeparse in meinem Schädel ersetzt Ein glanzvoller Einstieg in diesem Forum. Wobei sich aber meine nächste Frage aufdrängt warum die Variable wieder zurückgewandelt werden. Die $_GLOBALS, $_POST, ... Sachen wurden doch aus Sicherheitsgründen in Produktionsumgebungen eingeführt. Siehe: PHP-Website Damit werden doch die Vorteile, die sich daraus ergeben wieder rückgängig gemacht, weil die Kapselung wieder aufgehoben wird. Evtl. sollte dann die alten Variable von HTTP_*_VARS lieber in $_*.Arrays geschrieben und darauf hingewiesen werden, dass der Einsatz von "register_globals=off" unsicher ist. Auch das ist eine Verständisfrage. Wenn mir jetzt jemand erzählt, dass das Risiko gar nicht so gross ist, oder es eigentlich gar nichts macht, wenn Variable theoretisch überschrieben werden können, oder dieser Fall durch den obigen Code auch ausgeschlossen wird, dann lasse ich mich gern belehren. cu, stop.h |
||||||||||
Sven777b | Geschrieben am: 29. Mar 2003 - 09:38 | ||||||||||
Unregistered |
die Variablen $HTTP_*_VARS werden an keiner Stelle zurückgeschrieben oder modifiziert. Es wird lediglich der Schritt simuliert, der bei register_globals=on auch bloss durchgeführt wird. Ich verstehe auch die Frage nicht so ganz , denn offiziell wird register_globals=on als gefährlich eingestuft und deshalb bei der installation von PHP defaultmäßig auf "off" gestellt. Die meisten Server mit der ganz neuen PHP-Version stehen auf register_globals=off. "wer lesen kann ist klar im Vorteil" die von dir gepostete Referenz enthält als allerersten Satz: Ein Feature von PHP zur Erhöhung der Sicherheit ist die Konfiguration von PHP mit register_globals = off. Grüße - Sven |
||||||||||
stoph | Geschrieben am: 29. Mar 2003 - 12:10 | ||||||||||
Unregistered |
OK. Dann muss ich mich wohl noch anders ausdrücken. :-) Hey, ich kann lesen und ... naja, alles, was ich jetzt noch schreiben würde könnte als Angriff ausgelegt werden. Ein kleiner SecurityAudit: "register_globals" (ab sofort RG genannt) hat den Vorteil, dass alle externen Variablen in einem Array landen und dort gekapselt sind. Angenommen, ich über gebe per GET eine Variable "dedi_path", dann ist diese, wenn RG an ist, sofort im Script aktiv. Wird in diesem Fall im Quelltext durch include("config.php"); zwar wieder überschrieben, aber die Variable war da. Wenn RP aus ist (was richtig und sicher ist), landet sie im Array $_GET (oder $_REQUEST). Jetzt kommt das, was mich so stutzig macht. Der aktuelle Quellcode geht her und nimmt alle SICHEREN und ABGESCHIRMTEN Variablen aus den Array wieder heraus und macht richtige Variable daraus. Folgender CODE:
nimmt meine unsichere Variable im $_GET-Array und überschreibt (EXTR_OVERWRITE) die existierende Variable $dedi_path, die in der "config.php" zugewiesen wurde. Ein Beispiel wäre es jetzt, diese Variable durch eine externe Website zu ersetzen.
(geht jetzt so nicht, aber es soll hier nur das Prinzip verdeutlicht werden) Der Schutz, den man durch register_globals erhalten hat wurde hier eindeutig ausgehebelt und sogar "verschlimmbessert". Zudem sollten die Variablen $idcat und $idcatside noch darauf geprüft werden, ob sie wirklich integer-variablen sind. Angenommen ein Angreiffer ersetzt die int-Werte durch einen Text string, diese Variablen werden später ungeprüft in eine SQL-Abfrage eingebunden:
Ein Angreiffer würde den Inhalt von $idcat anders festlegen. Z.B.
dann würde die SQL-Abfrage (sofern sie funktioniert; was hier nicht der Fall ist) folgend lauten:
Ich hoffe meine Beweggründe sind deutlich geworden. cu, #chri "stop.h" |
||||||||||
Eppi | Geschrieben am: 29. Mar 2003 - 12:24 | ||||||||||
.....................noname Gruppe: Admin Beiträge: 8077 Mitgliedsnummer: 1 Mitglied seit: 23. Mar 2003 |
werd ich gleich umsetzen :-) Das mit den globals werd ich vielleicht auch noch andersrum angehen. Merci -------------------- "Heute ist nicht aller Tage... ich komm wieder, keine Frage!"
|
||||||||||
stoph | Geschrieben am: 29. Mar 2003 - 13:01 | ||||||||||
Unregistered |
Für die erste Lücke reicht es ja, die config-Datei nach dem "AntiRegisterGlobals"-Code einzubinden. Es wird aber auf allen wichtigen php-Seiten geraten, globale-Variable im eigenen Array zulassen und damit zu arbeiten. Evtl. könnte man ja eine Prüfklasse für externe Daten schreiben. In Java wäre das die "assert"-Funktion. Edit: php hat schon so eine Funktion (wusste ich gar nicht) http://www.php.net/manual/de/function.assert.php Noch besser soll die php-Adaption von JUnit sein: http://pear.php.net/package-info.php?pacid=38 cu, stop.h Bearbeitet von stoph am 29. Mar 2003 - 13:09 |
||||||||||
Eppi | Geschrieben am: 29. Mar 2003 - 16:48 | ||||||||||
.....................noname Gruppe: Admin Beiträge: 8077 Mitgliedsnummer: 1 Mitglied seit: 23. Mar 2003 |
Achso, Entwicklerforum werden wir die Tage einrichten. -------------------- "Heute ist nicht aller Tage... ich komm wieder, keine Frage!"
|
||||||||||
Thema wird von 0 Benutzer gelesen (0 Gäste und 0 Anonyme Benutzer)
0 Mitglieder:
7 Antworten seit 29. Mar 2003 - 07:11
Thema abonnieren | Thema versenden | Thema drucken