[Apache] Dateiauslieferung verhindern

joschilein

Multitalent
ID: 9301
L
5 Mai 2006
1.393
151
Ich habe mir ein kleines CMS gebastelt, wofür ich mit zentralen php-Dateien und über .htaccess mit entsprechenden RewriteRules arbeite.

Funktioniert auch alles wunderbar, bis auf die Tatsache, dass, wenn ein Dateiname getroffen wird, diese Datei eben doch angezeigt bzw. ausgeliefert wird. Dies ist insbesondere bei einer config.xml nicht ganz so super ;)

Daher habe ich jetzt schon ewig versucht über die .htaccess eine Lösung zu finden.

Aktuell sieht der entsprechende Part so aus:
Code:
<Files ~ "\.(xml|xls|txt|tpl)$">
  Order Deny,Allow
  Deny from All
</Files>

Damit ist z.B. die config.xml nicht mehr sichtbar und der Aufruf wird über das ErrorDocument 403 verarbeitet. txt wird ebenfalls geblockt.

Seltsamerweise funktioniert das aber nicht mit tpl* oder xls. In den Fällen wird die entsprechende Datei direkt per Downloadfenster ausgeliefert.
(*Wie man erahnen kann sind das zu parsende html-Dateien)

Nun habe ich schon gesucht und erfahren, dass man die Auslieferung forcieren kann:
Code:
<FilesMatch .... >
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

Aber wie kann man es verhindern? Alle Versuche über ForceType einen anderen MIME-Type zu setzen, schlagen fehl, es wird also weiterhin ausgeliefert.

Die xls werden zwar nicht auf einen Server geladen und die tpl sind nun auch nicht sooooo geheim, es sollte aber dennoch zu verhindern sein. Zumal ich mir Gedanken mache, ob es bei anderen Servereinstellungen plötzlich dazu kommen könnte, dass auch die config.xml wieder frei einsehbar/auslieferbar ist.
 
Hallo,

ich würde Dateien, die nicht ausgeliefert werden sollen, nicht in einen Ordner packen, der überhaupt durch den Apache zugänglich ist, dann muß man sich auch keinen Kopf um evtl. Konfigurationseinstellungen machen. Also z.B.

/Hauptordner/public
Hier kommen die auszuliefernden Dateien rein und das Document Root des Servers/der Domain wird darauf gesetzt

/Hauptordner/secret
/Hauptordner/includes
/Hauptordner/templates

In dieser Ordnern dann die Dateien, die nicht für die Öffentlichkeit sind, diese können dann aber über require_once() etc. eingebunden werden. Der Einfachheithalber vieleicht nch den Include_path von PHP anpassen, dass geht meistens auch zur Laufzeit.

Viele Grüße aus Spanien

leller