Jörg Reinholz: .htaccess - Ordner nur für bestimmte User sichtbar machen

Beitrag lesen

Ich weiss ja nicht, wie viele Benutzer es mal geben soll.

aber im Prinzip kannst Du mit htaccess wie folgt vorgehen:

(im Folgenden sei '/var/www/' Dein Document-Root:

#file /var/www/upload/.htaccess  
AuthType basic  
AuthName "upload"  
AuthUserFile /var/www/noaccess/.htpasswd  
Require valid-user  
DirectoryIndex index.php

und:

<?php  
# file: /var/www/upload/index.php  
if (isset($_SERVER['PHP_AUTH_USER']) {  
  header('Location: http://DEINHOST/upload/'.$_SERVER['PHP_AUTH_USER']);  
}  
?>
#file /var/www/upload/User1/.htaccess:  
AuthType basic  
AuthName "upload"  
AuthUserFile /var/www/noaccess/.htpasswd  
Require user User1  

#file /var/www/upload/User2/.htaccess:  
AuthType basic  
AuthName "upload"  
AuthUserFile /var/www/noaccess/.htpasswd  
Require user User2

Ganz andere Lösung:

Eine völlig eigene, in php geschriebene Lösung kannst Du mit mod_rewrite einsetzen, wenn Du etwa wie folgt vorgehst:

#file /var/www/.htaccess  
  RewriteEngine   on  
  # Reihenfolge ist wichtig:  
  RewriteRule     ^/uploads/(.*)/hochladen$ /var/www/hochladen.php?dir=$1 [L]  
  RewriteRule     ^/uploads/(.*)$           /var/www/upload-dirs.php?p=$1 [L]  

Jetzt behandelt die upload-dirs.php jeden Request innerhalb von /var/www/uploads.
Die hochladen.php behandelt jeden Request der zum Upload führen soll.

HINWEIS:
Schalte jegliches CGI/PHP ab! Ein hinreichend sicherer Weg wäre, die von den Benutzern hochgeladenen  Dateien prinzipiell mit einer eigenen Endung zu versehen oder den Dateiname z.B. mit md5() zu neutralisieren und den sowie die ursprünglichen Dateinamen in einer eigenen Ressource zu speichern - die dann gleich zum "Verzeichnislisting" dient. Ausliefern beim Downlad mit dem via header('Content-Type: application/unknown') - Das ließe sich auch verfeinern, in dem z.B. für PDF der korrekte Typ gesendet wird.

Falls das nicht gemacht werden soll:

* Eine der zahlreichen Möglichkeiten, die Authorisierung vornehmen zu lassen findet sich dann auf php.net
* Selbstredend gibt es in PHP auch genügend Möglichkeiten Verzeichnis-Listings nach eigenem Gustus zu erzeugen.

Noch etwas: Wenn Deine Benutzer virulentes Zeug hochladen "haftet" bei Google Deine gesamte Domain... Es wäre insofern also klug, eine eigene Subdomain zu verwenden.

"haftet" bei Google Deine gesamte Domain