PHP-Login und Bilder

PHP-Login und Datei(en/-Download)

Hi @ all

Mein Problem: Ich habe einen Login mit PHP gecoded. In diesen Bereich möchte ich Bilder stelle, die man aber erst sehen kann, wenn man sich eingeloggt hat. Es ist klar, dass sie auf der Seite erst angezeigt werden, wenn man sich erfolgreich eingeloggt hat (ist ja auch nicht schwer :-)).
Jetzt will ich aber verhindern, dass jemand direkt auf die Bilder zugreift, weil der den Link hat (zB. http://xxx.xxx.xx/xxx/xxx.jpg). Wenn ich das Verzeihnis nur schütze ist, uist das nicht so toll, weil man dann seinen Benutzername und Passowrt nocheinam eingeben muss (einmal beim PHP-Login & beim öffnen des Ortners).
Jetzt meine Frage: wie kann ich bewirken, dass man auf einen Ordner bzw. Bild nur zugreifen kann, wenn man sich im PHP Login eingeloggt hat. Man sollte aber seinen Usernamen und PW nur einmal eingeben müssen.

ich hoffe ihr könnt mir helfen

mfg Sledge
 
Zuletzt bearbeitet:
Müsstest EIGENTLICH mit chmod soweit kommen,dass du die Rechte 770 vergibst, heißt rdx,rdx,--- .
Das bewirkt,dass nur der User und Gruppenangehörige darauf zugreifen können, das PHP-Script dürfte doch als "User" zählen, oder nicht :-( ?
Hat so jedenfalls geklappt,als ich meine Serverlogs unzugänglich machen wollte.

also:
CHMOD runter und PHP die Dateien einlesen lassen.Den LogIn über PHP/DB regeln und Cookies bringen,damit der User seine Daten nicht immer und immer und immer und immer wieder eingeben muss ;)
Viel Glück damit und schöne Feiertage.
 
Nein CHMODS sind zugriffberechtigungen auf dateiebene, da aber der webserver für jeden client unter dem selben user leuft bringt das nicht viel.



Um das zu realisieren musst du ein PHP script bauen das die bilddatei ausgibt, geht nicht anders...

leg die bilder außerhalb des htdocs verzeichnis ab, dann sind sie nicht direkt verfügbar

und nun mach dir ein PHP script das folgendes tut:

1.) Einen passenden Header senden (z.B. Content-Type: image/jpeg)
2.) die datei ausliest und an den browser übergibt.
 
oder du arbeitest mit cookies und fragst halt ab, ob der User noch angemeldet ist (sprich ob das Cookie noch existiert) . Wenn dies nicht der Fall ist, gibst du das Bild nicht aus und wenn ja, dann ja :)...
 
hi!
Danke für eure Hilfe.
Die Methode von chibisuke erscheint mir einleuchtend.
ich bin in diesem bereich noch neuling.
deshalb noch eine frage: wo befindet sich dieser HTDOCS-ordner
und wie kann ich ihn aufrufen?

danke nochmal.
schöne feiertage noch...

Markus
 
Hallo,
ich schätze du benutzt den Apache Webserver.
Den Ordner findest du im Ordner Apache. ( Beispiel: C:\Apache\htdocs\ )
Alle Dateien, die in diesem Ordner liegen, können, falls nicht eine Zugriffbeschränkung mit Passwort oder ähnlichem vorhanden ist, vom Benutzer aufgerufen werden.

mfg Jens
 
Also es gibt leider 2 ansätze von den webspaceprovidern deren struktur aufzubauen.

entweder sie haben

....../username/htdocs
oder die haben
....../htdocs/username

Nun bei ersteren hast du in dem verzeichnis das du per FTP erreichen kannst du einzeichnis namens HTML, WWW, HTDOCS oder ähnliches. quasi ein verzeichnis wo du alles was über den browser sichbar sein soll ablegen kannst
dann kannst du es außerhalb dieses verzeichnises ablegen.


Sollte das bei dir nicht möglich sein auf dem webspace deines providers so leg es einfach in einem eigenen ordner ab, und leg diese .htaccess datei dazu:
Code:
Order allow,deny
Deny from all



@shorty: das is ne prüfungsmöglichkeit ob er eingelegt ist, hatt aber mit bilddateien nix am hut.... Thema verfeht - setzen sechs.
 
so, ich hab das jetzt mit dem PHP-Code hingegriegt:

PHP:
<?php
session_start ();
if (!isset ($_SESSION["user_id"]))
{
header ("Location: index.php?fehler=1");
}

// $download sei der Bezeichner für die zu ladende Datei
// etwa: 
$download = $_GET['download'];

// Dieses Verzeichnis liegt außerhalb des Document Root und
// ist nicht per URL erreichbar.
$basedir = "/home/www/web238/files";

// Übersetzung von Download-Bezeichner in Dateinamen.
$filelist = array(
  "file1" => "test.zip",
  "file2" => "logo.bmp",
  "file3" => "datei1.zip"
);

// Einbruchsversuch abfangen.
if (!isset($filelist[$download]))
  die("Datei $download nicht vorhanden.");

// Vertrauenswürdigen Dateinamen basteln.
$filename = sprintf("%s/%s", $basedir, $filelist[$download]);

// Passenden Datentyp erzeugen.
header("Content-Type: application/octet-stream");

// Passenden Dateinamen im Download-Requester vorgeben,
// z. B. den Original-Dateinamen
$save_as_name = basename($filelist[$download]);
header("Content-Disposition: attachment; filename=\"$save_as_name\"");

// Datei ausgeben.
readfile($filename);
 ?>

Bei den ersten 5 Zeilen wird überprüft, ob man eingeloggt ist.
(1) Lass ich den Code so, dann geht das ganze nicht wirklich. Ihr könnts mal selber veruschen: http://www.online-markus.de/privat/download.php?download=file1
Der Username lautet: admin und das PW: 123456
(Einfach auf die Seite gehn, einloggen und in der browserzeile nochmal die url eingeben.)
Man sieht dann beim download, dass der header nicht richtig übertragen bzw. geschrieben wurde.
(2) Wenn ich diese Login-Prüf-Zeilen weglass, dann geht alles ganz normal.
Hier auch noch ein Link: http://www.online-markus.de/privat/download_2.php?download=file1

Woran könnte das liegen und wie kann ich das Problem beheben?
ich hoffe ihr könnt mir helfen

mfg
markus
 
Zurück