Wie schütze ich den Inhalt eines Odners vor direktem Zugriff (php)?
In einer Session habe ich Zugriff auf einen mit Passwort geschützen Bereich. Von dort greife ich auf einen Ordner mit Bildern und pfd-Dateien zu.
Jetzt möchte ich verhindern, das ein direkter Zugriff auf diese Dateien möglich ist, wenn man nicht eingeloggt ist.
Es soll nicht möglich sein, ohne eingeloggt (in der session) zu sein, ein Bild direkt aufzurufen. Z.B. durch Eingabe von: http://meineSeite.php/Ordner/Bilddatei.jpg
Würde mich über eure Hilfe freuen.
2 Antworten
Leg die Bilder in einem per Web nicht erreichbaren Ordner ab - also außerhalb des Web-Verzeichnisses. Dann verlinkst Du die Bilder ausschließlich über eine PHP-Datei die den Login-Status prüft und gibst die Bilder dann über diese PHP-Datei aus.
Wenn Du so ein Bild einbetten willst sähe der HTML-Code z.B. so aus:
<img src="bild.php?dateiname=example.jpg" alt="">
In bild.php ermittelst Du dann den übergebenen Dateinamen, öffnest die Datei und gibst sie aus. Ganz einfaches Beispiel:
<?php
if( checkLogin() ) {
header("Content-type: image/jpeg");
echo file_get_contents("/var/www/pfad/zu/bildern/".$_REQUEST["dateiname"]);
}
Wie gesagt: nur ein grobes Beispiel was Du abhängig von deinem PHP-Aufbau adaptieren müsstest. Achte auch auf den korrekten Content-type bei der Ausgabe der Datei.
Du kapselst den Bereich ab, beispielsweise mittels einer passenden .htaccess-Datei.
Über diese sollte sich denke ich auch etwas implementieren lassen, um den Zugriff unter bestimmten Umständen zu gewähren.
Falls nicht, dann kannst du etwas tricksen und eine PHP-Datei erstellen, in der du einen Passwort-Schutz implementierst und ann die Files mittels read_file und passend gesetzten Headern an den Clienten zurückliefert.
Und wie macht man das?