HTTP Zugriffsrechte Benutzerdefiniert
-
Hallo! Ich habe eine webseite bei der sich benutzer anmelden können. Nun möchte ich für unangemeldete benutzer zugriff auf manche dateien verbieten. Kann man sowas erreichen?
z.B. soll
http://domain/Bild.jpg
für angemeldete (Per PHP-Sessions) benutzer freigegeben sein und für unangemeldete gespert.
Ich benutze apache, PHP und Linux.
-
Hallo,
wie wäre es denn wenn du die session überpüfst mit dem benutzername in der DB dann eine Abfrage machst und je anchdem ob er registriert ist anzeigen oder für Gäste nicht anzeigen?
mfg
-
Pack die Dateien in einen Ordner, wo von außen keinerlei Zugriff möglich ist (am besten per .htaccess schützen)
Dann eine download.php, die eine übergebene Datei (nach Überprüfung) zum download anbietet bzw. bei Bildern diese anzeigt und mit mod-rewrite kannst du dafür sorgen, dass der User nicht mitbekommt, dass er nicht die Datei direkt, sondern nur ein Downloadskript aufruft (statt /downloads/bild.jpg lädt der Server downloads.php?file=bild.jpg)
So hast du die volle Kontrolle darüber, wer welche Dateien herunterladen darf, auch wenn ein angemeldeter Benutzer mal seinen Link an einen dritten weitergeben sollte
-edit-
Wie realisiere ich einen Dateidownload mit PHP?
php.net - imagecreatefromjpeg
php.net - imagejpegpassende .htaccess für modrewrite: (ungetestet)
ReWriteEngine On RewriteBase / ReWriteRule ^downloads/([^/]+\.[^/.]+)$ downloads.php?file=$1
-
Achso!
Ja bei mir handelt es sich hauptsächlich um Bilder. Da mache ich einfachheader("Content-Type: image/jpeg"); //Bilder in Variablen Laden $Grafik = ImageCreateFromJPEG("/irgendeinverzeichniss/".$_GET['pic']); //Bilder ausgabe imagejpeg($Grafik);
-
Warum so kompliziert und aus einem vorhandenen JPEG erstmal Daten einlesen, konvertieren und dann unverändert im Browser ausgeben? Viel direkter: Einfach den kompletten Dateiinhalt ausspucken. Und natürlich den via GET übergebenen Pfad auf Gültigkeit prüfen!
-
árn[y]ék schrieb:
Einfach den kompletten Dateiinhalt ausspucken.
wie ausspucken?
da muss man doch noch mime-typ sendenárn[y]ék schrieb:
Und natürlich den via GET übergebenen Pfad auf Gültigkeit prüfen!
Das stimmt. Jemand kann ja
datei.php?file=../../home/ich/bilder/geheimnis.jpg
machen.
würde sowas eigentlich funktionieren?
Wenn ja reicht es einfach bei dem String nach ".." zu suchen?
-
neoexpert schrieb:
árn[y]ék schrieb:
Einfach den kompletten Dateiinhalt ausspucken.
wie ausspucken?
da muss man doch noch mime-typ sendenJein.
Man sollte es, aber du kannst den mime type ja auch beim verlinken in der HTML Seite angebenAber der Punkt ist: ein
$Grafik = ImageCreateFromJPEG("/irgendeinverzeichniss/".$_GET['pic']); //Bilder ausgabe imagejpeg($Grafik);
ist unpraktisch und unnoetig lahm.
Einfach die extension der datei checken und anhand derer den richtigen mime type senden und dann readfile machen.
árn[y]ék schrieb:
Und natürlich den via GET übergebenen Pfad auf Gültigkeit prüfen!
Das stimmt. Jemand kann ja
datei.php?file=../../home/ich/bilder/geheimnis.jpg
machen.
würde sowas eigentlich funktionieren?
Wenn ja reicht es einfach bei dem String nach ".." zu suchen?%2e waere zB auch .
Also so trivial ist es dann doch nicht.