Bild vor fremden Zugriffen schützen

xSeppelx

Lt. Junior Grade
Registriert
Sep. 2009
Beiträge
384
Hi,

ich suche nach einer Möglichkeit ein Bild vor fremden Zugriffen zu schützen.
Dieses Bild sollen nur Personen sehen können die sich auch einloggen und nicht den Weg über die Browserzeile nutzen ;)
also nicht http://xy.de/bild.jpg, sondern dieses Bild darf man nur über den Login auf der Seite sehen!

Das ganze müsste mit .htacces und PHP funktionieren oder?
(Weil man mit .htaccess ja vor externen Zugriff schützen kann, aber das Bild ja immer noch aufrufbar ist, man also irgendwie dafür sorgen muss das das Bild immer gesperrt ist und nur über einen Code freigeschaltet wird, den der User aber nicht eingeben soll, sondern lediglich durch seine Authentifizierung freischaltet)

Hoffe ihr könnt mir helfen.

mfg
Seppel
 
@claW.
Funktioniert das dann, das nur die eingeloggten User das Bild sehen und nichts zusätzliches eingeben müssen??
 
wsl. schon, aber mit php ist es wsl. ein wenig leichter das mit php ausgeben...in einer image.php datei hald checken ob in der sessionid das bild freigeschaltet ist, und dann das bild ausgeben

dazu müsstest du hald mit htacess den bilderfolder sperren, und dann dem image.php irgendwie den pfad übergeben
 
Also das Problem ist eigentlich, das das Bild in einem Ordner mit der Logindatei liegt und die Bilddatei nicht verschoben werden kann! ;)
Klingt komisch ist aber so, ich habs mir auch nicht ausgesucht, aber das Bild muss halt dringend geschützt werden. Zmd. für kleine Gegner.
 
du erstellst nur die nutzer inkl passwörter über ne .htpasswd datei und dann dazughörig die .htaccess. an den ordnerinhalt kommst du dann nur mit nem validen account. falls der falsch ist, bekommst du nur ne 401er fehlermeldung und das wars. probiers doch einfach mal aus.

@ zeroflow: wo ist die php lösung einfacher? du musst ein haufen drumherum machen, nur um sowas kleines zu erstellen. bevor du auch nur ein bild angezeigt bekommst, hab ich schon 20 hochgeladen und zum ansehen bereit. ;)
 
Ja aber der User muss doch dann ein Passwort eingeben zusätzlich zu seinem eigenen oder nicht?
Anders kanns ja auch nicht gehen und genau das will ich ja nicht ;)
Außerdem weiß ich nicht wie ich die .htaccess Datei erstellen solle, wobei Logindatei und img Datei in einem Ordner liegen.
 
passwörter und user erstellst du mit htpasswd (liegt jedem apache server bei, gibts aber auch separat zu downloaden, ggf. einfach im internet nach scripten suchen) und der inhalt der .htaccess besteht nur aus:
Code:
AuthUserFile /path/to/.htpasswd
AuthType Basic
AuthName "name"
Require valid-user
 
Zeroflow hat es schon richtig angedeutet..

Wenn es sich nur um ein einzelnes Bild handelt, brauchst du nicht mal eine .htaccess dafür. Du kannst einfach die CHMOD Rechte des Bildes so beschränken, dass nur noch der Besitzer und Root Zugriff drauf haben. In dem Fall ist das also der PHP Nutzer auf deinem Server (CHMOD Rechte 660 sollten es tun).
Anschließend legst du eine image.php an, welche als Content-Type image/png oder image/jpeg inne hat (je nachdem, welches Bild du schützt).
Die image.php prüft dann die Session des eingeloggten Users (oder zumindest das, was einen eingeloggten User in deinem System ausmacht) und liest bei erfolgreicher Authentifizierung das Bild mit nem readfile() ein.

Ist ein Benutzer nun nicht eingeloggt und ruft das Bild manuell auf, bekommt er nix zu sehen, da er keine Rechte hat. Ist der Benutzer aber korrekt eingeloggt, dann kann er die image.php aufrufen, welche das Bild per PHP einliest und anschließend ausgibt.
 
Ok, damit ich das jetzt richtig verstehe:
Ich lese das Bild aktuell so ein:
<table id="img" border="0" cellspacing="0" cellpadding="0" background="img.png">
Hat seine Gründe wieso als Tabelle ;)
Also das Loginscript und der ganze kram liegen in einer Datei.
Ich soll jetzt das Bild mit chmod Rechten ausstatten die es nur dem root erlauben es zu sehen.
Dann soll ich mir ein phpScript basteln was nur dafür zuständig ist das Bild zu laden oder wie?
Das include ich dann einfach an geeigneter Stelle?
 
Fast. ;-)

Zugriff auf dein Bild sollte auch der Besitzer bzw. der PHP-Benutzer sein. Nur der Zugriff für Andere (letzte Ziffer) muss gesperrt werden.
Genau, dann machst du ein kleines Script, welches dir das Bild ausliest. Dafür setzt du ganz oben in die PHP Datei (wir nennen sie mal image.php) ein header("Content-type: image/png"); damit dein Script auch weiß, dass es ein Bild sein soll.
Anschließend prüfst du in der image.php ob der Nutzer gerade eingeloggt ist oder nicht. Da ich nicht genau weiß, wie du den Login prüfst, kann ich dir auch nicht besser hier helfen.
Lässt du zum Login nur eine Session starten und nicht noch zusätzlich ein dauerhaften DB-Abgleich, dann reicht in der image.php auch ein einfaches if(isset($_SESSION['loginblabla']))
Im Body der If-Abfrage liest du das Bild dann z.Bsp. mit nem readfile() ein.

Wenn du dann eingeloggt bist und im Browser die Datei image.php ohne Probleme aufrufen kannst und das Bild siehst, dann hat alles funktioniert (sofern du en Fehler siehst, wenn duc nicht eingeloggt bist).

Die image.php kannst du dann wie ein normales Bild behandeln. Sprich, du includest sie nicht, sondern bindest sie als Hintergrundbild ein oder per img Element.

Einfach en bissl rumspielen, klingt schwerer als es ist. :-)
 
PHP:
<?php 
header('Content-type: image/png');

$mylogin = new login(session::getSID());

if($mylogin->logged_in()!==true){
readfile('img.png');
}
else{
echo"Sie haben keine Berechtigung diese Datei zu sehen!";
}
?>
Fehlermeldung:
Die Grafik "http://www.adresse.de/image.php" kann nicht angezeigt werden, weil sie Fehler enthält.
Also mir ist schon klar wie ihr das gemeint habt^^
Nur bislang habe ich nur nicht verstanden wie ihr das mit der PHP Datei gemeint hat, aber jetzt hats Klick gemacht.
Die Frage ist nur was ist falsch ;)
 
Liegt wohl daran, dass die Login Klasse (und alle abhängigen davon) nicht geladen werden.

Kommentier einfach mal das header('Content-type: image/png'); testweise aus und ruf die image.php auf. Dann siehste die Fehlermeldung.
Einfach die fehlenden Bibliotheken und Configs einbinden und es sollte laufen.


Den else Teil kannste übrigens komplett weglassen, weil sobald deine Datei sagt, sie wäre ein Bild, verhält sie sich auch wie ein Bild.
Wenn du unbedingt eine Fehlernachricht als Bild übergeben möchtest, musst du entweder per readfile ein alternatives Bild laden (einfachste Möglichkeit) oder du erzeugst dir ein neues leeres Bild mit PHP (imagecreate()) und schreibst da dann Text per Imagestring drauf (etwas komplexer, aber auch nicht schwer).
 
Alles klar habs behoben^^ War was ganz anderes^^
Einmal der Login, hat ein include gefehlt und das andere Problem war der Pfad!!!
Aber es läuft jetzt ;)
Mal schauen wie es sich jetzt verhält wenn ich die Chmod Rechte anpasse.
Also ich editiere dann gleich nach dem Test.

edit:
Funzt alles wunderbar!
Bis auf einem Problemchen ;)
Man kann die image.php Datei immer öffnen.. so scheint es zmd., auch wenn ich mich auslogge und dann image.php auswähle sehe ich es noch.
Das Loginscript arbeitet ja mit Sessions, ich bin mir nicht sicher ob die Session beim Logout vollständig gelöscht wird...
Aber gut für euch ist es jetzt auch schwer von außen ohne das Script zu kennen zu sagen woran es liegt^^
Aber ich kann garantieren, das das Script prüft ob eine gültige Session vorliegt...

edit2:
Also das mit der Session scheint doch das Problem zu sein.
Ich berichte dazu später mal mehr...
 
Zuletzt bearbeitet:
Zurück
Oben