Array aus Konfigurationsdatei Global verfügbar machen

Marius Heil

Erfahrenes Mitglied
Hi,

ich hab ne Konfigurationsdatei, welche Dinge wie MySQL Daten, Serverpfad,... speichert, alles in einem assoziativen Array. Die Datei binde ich mit require_once ein. Jetzt hätte ich dieses Array auch gerne global verfügbar, irgendwie geht das nicht.


Marius
 
Du könntest das Ganze einfach in die superglobale $_SERVER-Variable einschleusen, etwa:
PHP:
$_SERVER['MYSQL_CONFIG'] = array( … );
Damit ist der Array-Inahlt ebenfalls superglobal.
 
... und ein besucher schafft es PHP Code einzuschleusen und liest mal so eben dein mysql passwort aus ;)

Wenn du MySQL Zugriffe auf vielen verschiedenen Scripts brauchst dann hast du was falsch gemacht. Bilde dir ein Datenzugriffslayer bei dem du richtig schön penetrant paranoid bist und den du abschirmst. Aber keinesfalls deine Konfigurationseinstellungen Webapplikationsweit verstreuen.
 
Klar, dein Vorschlag ist natürlich wesentlich sicherer. Besonders dann, wenn das Passwort direkt als Parameter übergeben wird und nicht erst in einer Variable gespeichert wird.
 
Um mal beim Beispiel Datenbank-Verbindung zu bleiben:
Diese wird ja in der Regel am Anfang des Scripts aufgebaut und am Ende wieder getrennt, es macht ja eher wenig Sinn fuer jede Anfrage zu verbinden und dann wieder zu trennen. Dementsprechend hab ich das bei mir so geregelt, dass ich ein kleines Script include welches die Datenbank-Verbindung aufbaut, die Verbindungsdaten werden nicht in Variablen abgelegt, weil wofuer auch?
Sachen wie den Serverpfad kann man in der Regel auf recht einfache Weise bei Bedarf aus $_SERVER holen. Anders sieht es natuerlich bei Pfaden aus die z.B. auf einem Remote-Server (z.B. fuer FTP) liegen oder die aehnlich leicht anpassbar sein sollen wie die MySQL-Daten. Da ist die Devise im Grunde folgende: Variablen bei Bedarf erstellen, und nach Bedarf entfernen.
Mal ein Beispiel dazu (ich bleib auch mal bei der Sache mit dem Array):
PHP:
require('ftpinfo.php');
$ftp=new ftpconnection($ftpinfo['host'],$ftpinfo['user'],$ftpinfo['password']);
$ftp->chdir($ftpinfo['ftproot']);
//irgendwas auf dem FTP-Server machen
unset($ftp); //trennt auch automatisch die Verbindung
unset($ftpinfo);
Es werden hier direkt vor der FTP-Verbindung die noetigen Daten bereitgestellt, und nach Beendigung der Arbeit auf dem FTP-Server wieder in's Nirwana geschickt.
Natuerlich koennte dazwischen irgendwelcher boeser Code eingeschleust werden, aber wenn man mit normalen Arrays oder auch normalen Variablen arbeitet und nicht wie in Gumbos Vorschlag solche Informationen in $_SERVER verstaut muss ein Angreifer Variablennamen raten, was nicht immer einfach ist (ausser man kann durch Fehlermeldungen auf Variablennamen schliessen, aber solche Fehlermeldungen gilt es natuerlich zu vermeiden).
Ansonsten kann man auch ganz gut mit Konstanten arbeiten, im Grunde ist es doch egal ob ich $info_array['mysql_user'] anspreche oder $mysql_user oder gar MYSQL_USER.
 
Hi,

wäre natürlich ne Möglichkeit, die ganzen SQL Funktionen sind sowieso in ner Extra php Datei. Wäre also kein Problem die Daten gleich dort einzutragen.
Aber die restlichen Einstellungen hätte ich doch ganz gerne global verfügbar gehabt ;)
Hab mal probiert, in eine php Datei die einstellungen zu importieren, dann müsste ich aber in jeder Funktion global $config; eingeben, was etwas zu umständlich ist ;)


Marius
----
Ich glaube, ich erzähl noch ein wenig, wie das bei mir aufgebaut ist:
Die komplette Website besteht aus HTML und Flash.
Alle wichtigen Funktionen werden von den Flashdateien erledigt.
Diese greifen bei bedarf auf eine Funktionsdatei zu, welche die Variablen empfängt und alle Daten nach draußen schickt.
In der flash.php befinden sich also einfach nur reichlich viele Funktionen, welche benutzt werden, diese Datei greift wiederrum auf meine SQL Datei zu, welche die nötigen Funktionen für MySQL Verbindungen bereithält, damit ich nicht immer die Arrays aus den Anfragen,... von hand generieren muss.
 
Zuletzt bearbeitet:
Schau mal hier.
Dort findest Du was zum Array $GLOBALS. Das erspaert natuerlich einem Angreifer auch jegliches Variablen raten wie ich zuvor (wie ich jetzt weiss faelschlich) angegeben hatte.
Du koenntest aber trotzdem mit $GLOBALS arbeiten wenn Du die Zeit der Existenz der Variablen minimierst, wie ich ja auch bereits angesprochen habe. Dadurch ist das Risiko zwar nicht eliminiert, aber "kontrollierbarer" geworden.
 
Zurück