Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/virtual/benny-baumann.de/blog/htdocs/wp-includes/post-template.php on line 316

Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/virtual/benny-baumann.de/blog/htdocs/wp-includes/post-template.php on line 316

BenBE's humble thoughts Thoughts the world doesn't need yet …

19.09.2009

Anhänge in WordPress richtig machen

Filed under: Server — Schlagwörter: , — BenBE @ 12:31:32

Ich nutze hier im Blog Anhänge eher selten, weshalb mir der Fehler auch bisher nicht wirklich aufgefallen ist. Und selbst dann war es eher ein Zufall, dass ich gestern darauf gestoßen bin: Grob gesagt: WordPress nutzt ein Pass-Through für Downloads, d.h. generiert URLs die auf die eigentlichen zu downloadenden Dateien zeigen. Das ist an sich erstmal nicht schlimm und bietet sogar, gerade bei Anhängen, die Möglichkeit, dass der Apache diese Cachen kann. Problematisch wird dies aber in einem Fall, der bei mir aufgetreten war.

Ich hatte wie sicherlich viele gelesen haben werden, meinen 1kLOC-Templater vorgestellt und in den Post auch gleich den Templater zum Download anbinden wollen. Einmal abgesehen davon, dass in WordPress 2.8.4 mal wieder ein Evil-Modifier eingebaut ist (zum Korrigieren der URL des Attachments) und ich daher erstmal mein WordPress patchen musste, um die Datei überhaupt verlinken zu können, zeigte der generierte Download-Link weit ab jeglicher Dateien, die zum Download freigegeben waren – und enthielt im konkreten Fall sogar Teile des Server-Pfades, die eigentlich nicht sichtbar sein sollten. Ein kurzes Eingreifen in die Pfad-Einstellungen unter „Verschiedenes“ (ich hätte das eher unter Mediathek erwartet …) löste zumindest dieses Problem.

Bliebe noch der kritischere Punkt: Das Upload-Verzeichnis enthält die Download-Fähigen Dateien mit ihrem originalen Namen in unveränderter Form. D.h. die TTemplater.php meines 1kLOC-Templaters lag im besagten Verzeichnis unverändert und wurde beim Versuch sie zu downloaden – da .php genannt – vom Apachen an PHP zur Ausführung übergeben –> 0 Byte Output.

Die Lösung für einen funktionierenden Download – und der gleichzeitigen Verbesserung der Sicherheit – bringt eine kleine .htaccess-Datei im Upload-Verzeichnis:

RemoveHandler .php .php3 .php4 .php5 .htm .html .cgi .fcg .fcgi
php_value engine off

Die erste Zeile verhindert hierbei die Ausführung der Datei über die CGI-Schnittstelle, während die zweite Zeile die Ausführung über mod_php deaktiviert. Ein php_admin_value geht in .htaccess-Dateien verständlicherweise nicht zu setzen; würde aber auch wenig Sinn ergeben.

Mit dieser kleinen Änderung in der Konfiguration können nun in meinem Blog auch PHP-Files angehängt werden, ohne dass ich mir Gedanken darüber machen müsste, dass diese ausgeführt würden. Auch versehentlich in dieses Verzeichnis gelegte Dateien werden nun 1:1 zurückgegeben.

Flattr this!

Keine Kommentare »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress