Moin Moin!
Nachhaltiges Ignorieren des Problems wird früher oder später zu Datenverlust führen.
Ja, Du Sicherheitsneurotiker ;)
Gebranntes Kind.
Es ist NICHT LUSTIG, wenn eine mit viel Herzblut gepflegte Anwendung immer mal wieder in Panik verfällt, weil die zentrale Konfigurationsdatei mit absolut nicht zur Umgebung passenden Einstellungen versehen ist. Insbesondere dann nicht, wenn das beim zahlenden Kunden passiert und auf keinem Entwicklungssystems nachvollziehbar ist. Irgendwann fängst Du an, die Hardware des Kundenservers und den dazu gehörenden Administrator zu verdächtigen (dessen Arbeitsplatz indirekt von der Anwendung durchaus gefährtet ist).
Letztlich haben zwei Instanzen der Anwendung nur leicht versetzt mit der Konfigurationsdatei herumhantiert. Die eine Instanz hat die Datei eingelesen, dann neu angelegt und mit veränderten Werten zurückgeschrieben. Genau in dem Moment, als die Konfiguration neu angelegt wurde, liest die zweite Instanz die zu dem Zeitpunkt leere Datei ein, und nachdem die erste Instanz fertg ist, schreibt die zweite Instanz in ihrer Not, keine brauchbare Konfiguration vorgefunden zu haben, die Default-Werte in die Datei zurück.
Recht hast Du. Andererseits weißt Du, dass Tainted Love von der Liebe des Providers abhängig ist...
Jaja, nur hätte auch der Taint-Mode hier absolut nicht weiter geholfen. Der unkontrollierte, parallele Zugriff zweier Insanzen auf die selbe Datei war und ist tödlich und kann vom Taint-Mode nicht erkannt werden (weil es nicht Job des Taint-Mode ist). Dabei gilt nun einmal "last write wins".
Man hat im CGI-Umfeld eigentlich nur zwei Alternativen: Entweder schlägt man sich selbst damit herum, dass immer garantiert nur eine Instanz die Datei schreiben kann, oder man überläßt es einer bewährten Software, die Daten kollisionsfrei abzulegen -- eben indem man ein RDBMS benutzt (oder eine Library, die sich um das kollisionsfreie Handling von Dateien kümmert).
In meinem aktuellen Projekt gehe ich das Problem mit einem hybriden Ansatz an: Die eigentliche Konfigurationsdatei enthält nur die Zugangsdaten zum RDBMS und einige wenige Daten, die zur Laufzeit des Programms ohnehin nicht sinnvoll gändert werden können, der Rest der Konfiguration steht im RDBMS. Die Konfigurationsdatei ist für alle Web-Prozesse nur lesbar. Daten werden ohnehin nur im RDBMS gespeichert.
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".