Direkten Link auf img verhindern

Tach Community,

man sieht es immer häufiger. direkte links auf bilder werden mit einer mitteilung beantwortet, doch bitte die seite regulaer zu besuchen. das verhindert die nutzung der bilder auf anderen seiten.

das moechte ich auch tun. nun moechte ich nicht unbedingt im apache einstellungen veraendern. gibt es eine trickreiche moeglichkeit zu verhindern, dass jemand bilder direkt aufruft?

merci

Grusz

PixelKoenig

Hallo!

Nach meinen Kenntnisstand wird das leider nicht mit einer php-lösung gehen, da wenn du direkt ein Bild aufrufst der Server nicht weiß, das da irgendwo ein Skript läuft, dass es verhindern soll, dass du ein Bild aufrufst.

Allerdings würde ein verstecken des Bildes funktionieren. Wenn du über die php-klasse Image das ganze handhaben würdest, dann kannst du die Quelle verstecken. Allerdings kannst du dann immrnoch noch nicht verhindern, dass du das Bild immernoch direkt aufrufen kannst. Dies geht wirklich nur über den Apache.

Greetz
Mike

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

mööp falsch

Nach meinen Kenntnisstand wird das leider nicht mit einer
php-lösung gehen, da wenn du direkt ein Bild aufrufst der
Server nicht weiß, das da irgendwo ein Skript läuft, dass es
verhindern soll, dass du ein Bild aufrufst.

das mag stimmen. Wenn das Bild aber garnicht erst im Webroot liegt hat man keine Wahl das Bild über die php-Seite aufzurufen. Nur leider kann nicht jeder auf sowas zurückgreifen - aber wofür gibts htaccess :wink:

Allerdings würde ein verstecken des Bildes funktionieren. Wenn
du über die php-klasse Image das ganze handhaben würdest, dann
kannst du die Quelle verstecken. Allerdings kannst du dann
immrnoch noch nicht verhindern, dass du das Bild immernoch
direkt aufrufen kannst.

wie gesagt - siehe oben…
ein kleines Beispiel, wie es sehr wohl gehen kann:

index.php:

$wert = 1;
include("zeigdasbild.php");
?\>
zeigdasbild.php:

$\_GET['wert'] = 0;
$\_POST['wert'] = 0;
//zurücksetzen der übergebungsvariablen um ausnutzen der global vars zu unterbinden

if ($wert == 1)
{
//zeig das Bild an also header senden und son kram 
}
else
{
echo "";
}



> Dies geht wirklich nur über den  
> Apache.


wie sollte das denn gehen bitte?

Nach meinen Kenntnisstand wird das leider nicht mit einer
php-lösung gehen, da wenn du direkt ein Bild aufrufst der
Server nicht weiß, das da irgendwo ein Skript läuft, dass es
verhindern soll, dass du ein Bild aufrufst.

das mag stimmen. Wenn das Bild aber garnicht erst im Webroot
liegt hat man keine Wahl das Bild über die php-Seite
aufzurufen. Nur leider kann nicht jeder auf sowas
zurückgreifen - aber wofür gibts htaccess :wink:

Ups, an htaccess hab ich nicht gedacht. *schäm*

Allerdings würde ein verstecken des Bildes funktionieren. Wenn
du über die php-klasse Image das ganze handhaben würdest, dann
kannst du die Quelle verstecken. Allerdings kannst du dann
immrnoch noch nicht verhindern, dass du das Bild immernoch
direkt aufrufen kannst.

wie gesagt - siehe oben…
ein kleines Beispiel, wie es sehr wohl gehen kann:

index.php:

$wert = 1;
include(„zeigdasbild.php“);
?>
zeigdasbild.php:

$_GET[‚wert‘] = 0;
$_POST[‚wert‘] = 0;
//zurücksetzen der übergebungsvariablen um ausnutzen der
global vars zu unterbinden

if ($wert == 1)
{
//zeig das Bild an also header senden und son kram
}
else
{
echo „“;
}

Eine ähnliche Idee hatte ich auch, allerdings hätte ich es über die gd-lib verwirklicht.

Dies geht wirklich nur über den
Apache.

wie sollte das denn gehen bitte?

Da hab ich mich falsch ausgedrückt. Ein kleines Wort kann eine Aussage erheblich ändern. Ich wollte sagen: „Anscheined geht dies wirklich nur über den Apache.“ Da viele Restriktionen über den Apache gesetzt werden können, hab ich mir gedacht, dass dies auch möglich sei. :smile: Aber ich lasse mich gerne eines besseren belehren.

Greetz Mike

Tach Community,

man sieht es immer häufiger. direkte links auf bilder werden
mit einer mitteilung beantwortet, doch bitte die seite
regulaer zu besuchen. das verhindert die nutzung der bilder
auf anderen seiten.

das moechte ich auch tun. nun moechte ich nicht unbedingt im
apache einstellungen veraendern. gibt es eine trickreiche
moeglichkeit zu verhindern, dass jemand bilder direkt aufruft?

Naja, nicht trickreich, aber es geht auch mit PHP:
Im Source auf
verlinken, getimage.php prüft dann den Referer (leer oder eigener zulassen) und gibt zuerst den korrekten Content-Type und dann das File selbst aus (welches in einem unzugänglichem Verzeicunis liegt):

$imgdir = "/am/besten/ausserhalb/von/docroot";
$boeserbube = "du\_darfst\_nicht.jpg";
$nichtda = "leider\_nichts\_da.jpg";

$name = str\_replace("/\\", "", $\_GET["b"]); //Sicherheitshalber alle Slashes und backslashes wegwerfen

// falscher Referer
if (!preg\_match('#^$|^http://(www\.)?meinedomain\.de/#',$\_SERVER["HTTP\_REFERER"])) 
 {
 Header("image/jpeg"); 
 readfile("$imgdir/$boeserbube"); 
 exit; 
 }; 

// File nicht da
if (!is\_file("$imgdir/$name")) 
 { 
 Header("image/jpeg"); 
 readfile("$imgdir/$nichtda"); 
 exit;
 }

// Content-Type aus Name
if (preg\_match("/\.jpe?g$/", $name)) Header("Content-Type: image/jpeg");
if (preg\_match("/\.gif$/", $name)) Header("Content-Type: image/gif");
if (preg\_match("/\.png$/", $name)) Header("Content-Type: image/png");
readfile("$imgdir/$name");

… so ungefähr in PHP…
Es geht auch einfacher in .htaccess, sofern mod_rewrite läuft:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [OR]
RewriteCond %{HTTP_REFERER} !^http://(www.)?meine-domain.de/.*$ [NC]
RewriteRule .(gif|jpg|png)$ /boeserbube.jpg

dann erspart man sich das Ersetzen der Tags im Source…
(Alles nicht getestet, ggfs. ist irgendwo noch nen Tippfehler drin)

Alexander