am 20. Dezember 2008
Heute will ich mal ein paar Worte über den Umgang mit Passwörtern, die man in PHP verwendet verlieren. Ich denke jeder von euch hatte bereits ein Projekt, in dem mit eben solchen hantiert wurde. Login und noch häufiger Datenbank Passwort seien hier genannt. Ich werde meinen Artikel am Beispiel von Datenbank Passwörter aufhängen, gilt aber natürlich auch für alle anderen.
In den meisten Datenbank Klassen habe ich einen Konstruktor, der Passwort, Datenbank, User und Tabelle als Parameter mitbekommt. Diese werden dann in einer privaten Membervariablen hinterlegt und die Verbindung zum DB Server aufgebaut. Auf diese, meistens als Singleton gehaltene Klasse, können jetzt alle Module, Plugins und Kernkomponenten eines Projektes zugreifen. Klingt bis jetzt ja sehr angenehm und komfortabel. Aber macht doch mal einen var_dump auf eure Datenbank Klasse. In den meisten Fällen, wird dort das Passwort mit ausgegeben. Ist das denn nötig? Nein, denn nachdem die Verbindung zum Datenbank Server aufgebaut wurde, ist sie persistent, bis das Skript vollständig durchlaufen. Ich sollte also, sobald die Verbindung steht, das Passwort löschen um mögliche Angriffe zu umgehen.
Ihr erschwert es einem Angreifer auf diese Weise zumindest an die Passwörter zu kommen, falls ihr eine Schwachstelle im System habt. Auch so etwas wie ein var_dump auf ein Model, dass ja häufig einen Verweis auf die DB Klasse hält, würde das Passwort nicht auf den Schirm bringen. Besonders bei der Integration von Third Party Modulen, kann man ja nie wirklich sicher sein, was diese machen. Oder schaut ihr euch den Code von den Plugins an, die ihr installiert.