Bilderklau mit Hilfe von Ref verhindern

Hallo liebe Community,

egal was ich noch daran drehe und schraube, tu’ und mache, es will einfach nicht funktionieren hoffe ihr könnt mir helfen.

Hier mal der Code meiner schutz.php

[code]<?php

error_reporting(E_ALL);

$selfdomain = “perle.bplaced.net”;

$imgdir = “4ys58”;

$allowdomain = “google.com”;

$selfdomain = strtoupper($selfdomain);
$allowdomain = strtoupper($allowdomain);

$ref = strtoupper($HTTP_REFERER);

$ref = str_replace(“HTTP://”, “”, $ref);

if (strpos($ref, “/”)) $ref = substr($ref, 0, strpos($ref, “/”));

if (($ref=="") || (strpos($ref, $allowdomain))
|| (strpos($ref, $selfdomain))) {

$fn = $PATH_INFO;

if ((strpos($fn, “…/”)) || (strpos($fn, “…\”)))
{
echo “Zugriffsverletzung”;

} else readfile($imgdir.$fn);

} else {
echo “Kein zugriff”;
}

?>[/code]

perle.bplaced.net/4ys58/bild.jpg

Doch wenn man nun perle.bplaced.net/test.html aufruft geschieht nichts, ein weißer Bildschirm bzw. ein “kaputtes” Bild - kann mir das nicht mehr erklären.

Liebe Grüße

MaxT :wink:

perle.bplaced.net/schutz.php/bild.jpg
Unter dieser Adresse teilt der Server mit, er würde Daten vom Typ text/html senden (für die Auslieferung von Bildern schon mal falsch) - und dann kommt gar nichts mehr.

Stelle bitte das error_reporting auf E_ALL - dann teilt dir PHP mit, dass es diesen Wert bspw. gar nicht gibt.

[quote]
Notice: Undefined variable: HTTP_REFERER in /users/perle/www/schutz.php on line 16

Notice: Undefined variable: PATH_INFO in /users/perle/www/schutz.php on line 28[/quote]
perle.bplaced.net/schutz.php

Was mache ich falsch?

register globals ist seit PHP 4.2 standardmäßig auf off
du musst machen: $_SERVER[‘HTTP_REFERER’] und erst testen, ob der auch gesetzt ist.
Beispiel:

$HTTP_REFERER = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : "";

Vielen Dank für deine Antwort - aber wie stellst du dir das Testen vor?

Liebe Grüße

MaxT :wink:

So wie er dir das gepostet hat :wink:

Alles klar, wusste anfangs nicht an welcher Stelle ich es setzen soll.

Mein Code sieht nun wie folgt aus:

[code]<?php

error_reporting(E_ALL);

$selfdomain = „perle.bplaced.net“;

$imgdir = „4ys58“;

$allowdomain = „google.com“;

$selfdomain = strtoupper($selfdomain);
$allowdomain = strtoupper($allowdomain);

$ref = $HTTP_REFERER = (isset($_SERVER[‚HTTP_REFERER‘])) ? $_SERVER[‚HTTP_REFERER‘] : „“;

$ref = str_replace(„HTTP://“, „“, $ref);

if (strpos($ref, „/“)) $ref = substr($ref, 0, strpos($ref, „/“));

if (($ref=="") || (strpos($ref, $allowdomain))
|| (strpos($ref, $selfdomain))) {

$fn = $PATH_INFO;

if ((strpos($fn, „…/“)) || (strpos($fn, „…\“)))
{
echo „Zugriffsverletzung“;

} else readfile($imgdir.$fn);

} else {
echo „Kein zugriff“;
}

?>[/code]

Nun bleibt noch:
Notice: Undefined variable: PATH_INFO in /users/perle/www/schutz.php on line 28 o.0

[quote=“MaxT”]Nun bleibt noch:
Notice: Undefined variable: PATH_INFO in /users/perle/www/schutz.php on line 28 o.0[/quote]
Und dafür gilt, mitdenkende Menschen haben es bereits erkannt, das gleiche wie für HTTP_REFERER.

Alles klar.

Allerdings will er nun das Bild als HTML-Datei ausgeben wie schon oben genannt wurde. (perle.bplaced.net/bild.html)

Wie kann ich das denn nun noch ändern?

Liebe Grüße

MaxT :wink:

Du musst den mimetyp der Datei holen und per header()-Anweisung senden.
php.net/manual/en/function.finfo-open.php

PS: Du brauchst dazu kein PHP-Skript. es reicht, wenn du in das Verzeichnis mit den Bildern eine htaccess legst, die per mod_rewrite alle Zugriffe mit falschen Referrer blockt oder umleitet. Das sollte auch für den Server weniger belastend sein.

Vielen lieben Dank.

Mit freundlichen Grüßen

MaxT :slight_smile: