Zugriff auf bestimmte Dateien erlauben

Apache, Lighttpd, nginx, Cherokee
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Zugriff auf bestimmte Dateien erlauben

Post by snowball »

Hallo zusammen,

mein Problem ist folgendes.
Ich möchte Über .htaccess oder Konfiguration meines Apache 2.2 den Zugriff nur auf bestimmte Dateien erlauben. Z.B. index.php, main.php und *.jpg.

Hätte da jemand einen Hinweis für mich? Alles was ich in der reichlich vorhanden Dokumentation gefunden habe, ist die umgekehrte Version, bei der ich bestimmte Dateien ausschließen kann.

Danke schonmal.

Cheers,

Jochen
User avatar
Joe User
Project Manager
Project Manager
Posts: 11183
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by Joe User »

Einzige Möglichkeit: Alle Files/Dirs die nicht von Apache verarbeitet werden sollen einer dedizierten User/Group-Kombination zuordnen und keine world-Rechte vergeben.
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by snowball »

Joe User wrote:Einzige Möglichkeit: Alle Files/Dirs die nicht von Apache verarbeitet werden sollen einer dedizierten User/Group-Kombination zuordnen und keine world-Rechte vergeben.
Mhh, nicht so kompfortabel wie ich es mir erhofft hatte, aber immerhin eine Lösung.

Vielen Dank.
dotme
Posts: 150
Joined: 2004-12-15 16:48
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by dotme »

snowball wrote:Alles was ich in der reichlich vorhanden Dokumentation gefunden habe, ist die umgekehrte Version, bei der ich bestimmte Dateien ausschließen kann.
Sollte einem aber nicht schwerfallen so ein Beispiel anzupassen, oder?

Zumindest müßtest Du in etwa in diese Richtung gehen (ungetestet):

Code: Select all

# cat .htaccess
Order Deny,Allow
Deny from All

<FilesMatch "^((main|index).php|.+.jpg)$">
    Allow from All
</FilesMatch>
Du kannst das auch unverändert in einen <Directory>-Kontext schreiben.
User avatar
Joe User
Project Manager
Project Manager
Posts: 11183
Joined: 2003-02-27 01:00
Location: Hamburg
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by Joe User »

dotme wrote:Zumindest müßtest Du in etwa in diese Richtung gehen (ungetestet):
Allerdings schmeisst Apache dann Error 403 statt 404 bei den verbotenen Files...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by snowball »

dotme wrote:Sollte einem aber nicht schwerfallen so ein Beispiel anzupassen, oder?
Doch, genau das ist mir schwer gefallen. Aber dein Bespiel funktioniert genau so, wie ich mir das gewünscht habe. Vielen Dank für Eure Hilfe.

Cheers,

Jochen
dante77
Posts: 36
Joined: 2006-10-18 11:33
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by dante77 »

Macht das ganze eigentlich wirklich Sinn? Wirklich interessante Dateien wie /etc/passwd holt sich ein Angreifer ja eher über Löcher in PHP-Skripten.
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by snowball »

Für micht macht es schon Sinn.

Es geht mir nicht um das anzeigen von Systemdateien. Sondern um das verhindern von direktem Zugriff auf template Daten. Die templates werden von meinem PHP includet. sollen aber nicht direkt anzeigbar sein. Normalerweise verhinderer ich das direkte anzeigen auch durch php funktionen. Die .htaccess Datei sollte auch nur als zusäzlicher Schutz dienen.

Leider funtkoiniert sie nicht so wie ich das wollte. Mit der weiter oben beschriebenen Datei wird auch der Aufruf ohne index Datei verhindert.
z.B

http://www.domain.de/ <- geht nicht
http://www.domain.de <- geht nicht
http://www.domain.de/index.php <- geht

Lieder habe ich noch nicht rausgefunden woran es liegt.
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by Roger Wilco »

snowball wrote:Lieder habe ich noch nicht rausgefunden woran es liegt.
Die FilesMatch Direktive von oben enthält keinen RegEx für "^$", also einen leeren String, wie es beim Aufruf ohne index.php vorkommt.

Ein weiterer Ansatz wäre, alle Dateien, auf die nicht zugegriffen werden soll, in ein Verzeichnis zu packen und dieses mit "Deny from all" zu schützen. Aber eigentlich sollten solche Dateien erst gar nicht im DocumentRoot der Domain liegen. ;)
dante77
Posts: 36
Joined: 2006-10-18 11:33
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by dante77 »

Probiers mal damit? (nur ein pipe mehr)

Code: Select all

<FilesMatch "^((main|index).php|.+.jpg|)$"> 
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by snowball »

Roger Wilco wrote: Die FilesMatch Direktive von oben enthält keinen RegEx für "^$", also einen leeren String, wie es beim Aufruf ohne index.php vorkommt.
Danke für den Tipp, scheint aber auch nicht zu funktionieren.

Code: Select all

Order Deny,Allow
Deny from All

<FilesMatch "^((main|index).php|.+.jpg|.+.png|.+.css|.+.pdf|^$)$">
    Allow from All
</FilesMatch>
dante77 wrote:Probiers mal damit? (nur ein pipe mehr)

Code: Select all

<FilesMatch "^((main|index).php|.+.jpg|)$"> 
Führt zu "Internal Server Error" Fehler 500


Regular Expressions ist einfach nicht meine Welt :(
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by Roger Wilco »

Code: Select all

<FilesMatch "^((main|index).php|.+.(jpg|png|css|pdf))?$">
  Allow from all
</FilesMatch>
Ungetestet, sollte aber funktionieren. Die Variante mit den Dateien außerhalb des DocumentRoots oder in einem eigenen Verzeichnis ist aber vorzuziehen, zumal du dann auch eine organisatorische Trennung auf Dateisystemebene hast.
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by snowball »

Roger Wilco wrote: Ungetestet, sollte aber funktionieren.
Nein, bei meinem Apache 1.3.37 leider nicht. Gleiches Problem wie vorher, auch wenn der Code besser aussieht :wink:
Roger Wilco wrote: Die Variante mit den Dateien außerhalb des DocumentRoots oder in einem eigenen Verzeichnis ist aber vorzuziehen, zumal du dann auch eine organisatorische Trennung auf Dateisystemebene hast.
Da hast du natürlich recht. Aber den Aufwand möchte ich dafür nicht betreiben. Ich bin grade dabei, eine Webseite zu erstellen (Nur 'ne kleine für den Sportverein). Da ich aber noch keine Ahnung habe, ob ich die danach auch hosten werde, oder das jemand anderes übernimmt, versuche ich das ganze so einfach wie möglich zu hallten. Wenn ich bei der Übergabe der Seite auch noch eine Installationsanleitung für einen Webserver mitgeben muss, würde das den Rahmen sprengen.
dante77
Posts: 36
Joined: 2006-10-18 11:33
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by dante77 »

Sowohl Roger Wilcos als auch mein regulärer Ausdruck sind valide und matchen sowohl die Dateien als auch den leeren String. Aber offenbar führt es beim Apache zu einem Fehler, wenn ein leerer String gematcht wird (IMHO)
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by Roger Wilco »

snowball wrote:Da hast du natürlich recht. Aber den Aufwand möchte ich dafür nicht betreiben.
Die Templates liegen vermutlich schon in einem eigenen Verzeichnis, in das du einfach eine entsprechende .htaccess Datei packen kannst. Dazu sind keine Installationsanweisungen nötig.
snowball
Posts: 218
Joined: 2004-09-15 10:14
 

Re: Zugriff auf bestimmte Dateien erlauben

Post by snowball »

Roger Wilco wrote:Die Templates liegen vermutlich schon in einem eigenen Verzeichnis, in das du einfach eine entsprechende .htaccess Datei packen kannst. Dazu sind keine Installationsanweisungen nötig.
Mhh, hast recht. so hätte es mir zwar besser gefallen, aber das ist natürlich auch ne gute Lösung. Mache ich es halt so.

Vielen Dank für den Denkanstoss.