PHP-Frust
Mittwoch, den 28. November 2007
PHP gehört wirklich nicht zu meinen Lieblings-Sprachen. Und es wird mir auch zunehmend unsympathischer.
Neuestes Beispiel: ein Kunde hat ein Problem mit einem Script, welches unter anderem irgendwo Dateien auf seinen Webspace hochlädt (per PHP-File-Upload). Die neu erstellten Dateien haben aber “nur” die Rechte 0600, obwohl diese eigentlich 0644 haben sollten. umask() ist richtig gesetzt, ein explizites chmod() nach dem Upload ist nicht möglich (es handelt sich um ein gekauftes, codiertes Script), und bei seinem bisherigen Webhoster hat das Script nach Angaben des Kunden wohl einwandfrei funktioniert.
Andere Baustelle: eine Kundin zieht eine Contenido-CMS-Website auf einen Webspace bei uns um. Gleiches Problem: nach Uploads sind die Rechte immer falsch. In diversen Contenido-Foren weisen deren Entwickler die Notwendigkeit eines chmod() nach dem move_uploaded_file()-Aufruf von sich - “der Provider ist für eine anständige umask() verantwortlich”. Wenn das Problem nur in der umask() bestehen würde…
Nun haben wir die Wurzel allen Übels identifiziert: PHP selbst.
Bug #42291: wird eine Datei mit PHP hochgeladen und mit move_uploaded_file() auf ein Ziel verschoben welches im gleichen Filesystem wie die temporäre Datei liegt (=>rename), dann werden die Rechte fälschlicherweise auf 0600 gesetzt statt auf 0644. Da bei uns aus Sicherheitsgründen jeder Kunde sein eigenes tmp-Verzeichnis innerhalb seines geschützten Kundenverzeichnisbaums hat (also im gleichen Filesystem), tritt genau dieser Fall ein.
Der Workaround für die betroffenen Kunden ist also, diesen ein tmp-Verzeichnis auf einer anderen Partition einzurichten… ein kurzer Test hat das bestätigt.
PHP gehört wirklich nicht zu meinen Lieblings-Sprachen. Und es wird mir auch zunehmend unsympathischer.
Neuestes Beispiel: ein Kunde hat ein Problem mit einem Script, welches unter anderem irgendwo Dateien auf seinen Webspace hochlädt (per PHP-File-Upload). Die neu erstellten Dateien haben aber “nur” die Rechte 0600, obwohl diese eigentlich 0644 haben sollten. umask() ist richtig gesetzt, ein explizites chmod() nach dem Upload ist nicht möglich (es handelt sich um ein gekauftes, codiertes Script), und bei seinem bisherigen Webhoster hat das Script nach Angaben des Kunden wohl einwandfrei funktioniert.
Andere Baustelle: eine Kundin zieht eine Contenido-CMS-Website auf einen Webspace bei uns um. Gleiches Problem: nach Uploads sind die Rechte immer falsch. In diversen Contenido-Foren weisen deren Entwickler die Notwendigkeit eines chmod() nach dem move_uploaded_file()-Aufruf von sich - “der Provider ist für eine anständige umask() verantwortlich”. Wenn das Problem nur in der umask() bestehen würde…
Nun haben wir die Wurzel allen Übels identifiziert: PHP selbst.
Bug #42291: wird eine Datei mit PHP hochgeladen und mit move_uploaded_file() auf ein Ziel verschoben welches im gleichen Filesystem wie die temporäre Datei liegt (=>rename), dann werden die Rechte fälschlicherweise auf 0600 gesetzt statt auf 0644. Da bei uns aus Sicherheitsgründen jeder Kunde sein eigenes tmp-Verzeichnis innerhalb seines geschützten Kundenverzeichnisbaums hat (also im gleichen Filesystem), tritt genau dieser Fall ein.
Der Workaround für die betroffenen Kunden ist also, diesen ein tmp-Verzeichnis auf einer anderen Partition einzurichten… ein kurzer Test hat das bestätigt.
