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 - imagejpeg

    passende .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 einfach

    header("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?


  • Mod

    neoexpert schrieb:

    árn[y]ék schrieb:

    Einfach den kompletten Dateiinhalt ausspucken.

    wie ausspucken?
    da muss man doch noch mime-typ senden

    Jein.
    Man sollte es, aber du kannst den mime type ja auch beim verlinken in der HTML Seite angeben 😉

    Aber 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.


Anmelden zum Antworten