.htaccess - Ordner nur für bestimmte User sichtbar machen
Nighty
- html
Hallo,
ist es möglich mithilfe von .htaccess einen Ordner nur für einen bestimmten User sichtbar zu machen?
z.b:
/upload -keine Indexierung
/upload/User1
/upload/User2
usw...
Wenn sich User 1 in den /upload Ordner begibt soll er nichts sehen, sondern aufgefordert werden sein Passwort einzugeben und nach Eingabe entweder nur diesen einen Ordner sehen oder direkt in das entsprechende Verzeichnis gelangen
Oder ist das ganze nur möglich wenn ich immer im entsprechenden Verzeichnis eine .htaccess anlege das dann erst die Passwortabfrage kommt?
Danke und Grüße
@@Nighty:
nuqneH
ist es möglich mithilfe von .htaccess einen Ordner nur für einen bestimmten User sichtbar zu machen?
Welche Fragen lässt denn http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz@title=SELFHTML da offen?
Qapla'
Hello,
@@Nighty:
nuqneH
ist es möglich mithilfe von .htaccess einen Ordner nur für einen bestimmten User sichtbar zu machen?
Welche Fragen lässt denn http://de.selfhtml.org/servercgi/server/htaccess.htm#verzeichnisschutz@title=SELFHTML da offen?
Naja, wenn man substantiierte Rechte verwalten will, kommt man mit Auth-Basic bald an seine Grenzen.
Da ist die Idee mit
* Datenbank,
* Useranmeldung,
* Files außerhalb der Dokument Root lagern,
* fpassthru() http://de2.php.net/manual/de/function.fpassthru.php
* sowie einem soliden Uploadsystem für die Files, falls die User auch uploaden dürfen,
die bessere Variante.
Und jetzt komm bitte nicht "Auth-Basic geht aber auch mit Datenbank". Bis das einer verstanden hat, ist ein Jahr Lernarbeit vergangen.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
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
Vielen Dank Jörg, damit kann ich etwas anfangen, werde es später versuchen umzusetzen :)