Schon wieder ich :-) || trafficklau

hallo!
ich wollte ein php-script machen, das bilder automatisch austauscht, wenn von einer fremden seite direkt verlinkt wird.

das ist mein versuch, der (wie ich mir schon dachte) nicht klappt.

ist wohl viel quatsch, aber etwas besseres ist mir nicht eingefallen, denn ich bin noch zeimlicher anfänger in sachen php :frowning:

<?php $datei = $PATH_INFO;
$bildordner = „bilderordner“;
$newurl = readfile($imgdir.$datei);
$check = „^http://([www.])*floeper.com/[0-9a-zA-Z]*\.[a-zA-Z]floeper.com/[0-9a-zA-Z]%5C%5C.%5Ba-zA-Z%5D)“;
if ($HTTP_REFERER==$check)
{
echo $newurl;
}
else
{
echo ":smile:

Hallo Stefan !

hallo!
ich wollte ein php-script machen, das bilder automatisch
austauscht, wenn von einer fremden seite direkt verlinkt
wird.

das ist mein versuch, der (wie ich mir schon dachte) nicht
klappt.

ist wohl viel quatsch, aber etwas besseres ist mir nicht
eingefallen, denn ich bin noch zeimlicher anfänger in sachen
php :frowning:

<?php :blush:datei = $PATH_INFO;

Da sollte $_SERVER[„PATH_INFO“] stehen, wenn schon (Sicher für register_globals=off). Du rufst das also mit auf ?

$bildordner = „bilderordner“;

Ok.

$newurl = readfile($imgdir.$datei);

Das gibt den Inhalt der Datei aus, dass willst du hier noch nicht, die Zeile kommt später. In $newurl steht nur die Anzahl der Bytes.

$check =
„^http://([www.])*floeper.com/[0-9a-zA-Z]*\.[a-zA-Z]floeper.com/[0-9a-zA-Z]%5C%5C.%5Ba-zA-Z%5D)“;

Sicher, das nach dem Punkt nur ein Zeichen kommen darf ? Außerdem fehlt der umgebende Trenner, also so was
#http://([www.])*floeper.com/[0-9a-zA-Z]*\.[a-zA-Z]#ifloeper.com/[0-9a-zA-Z]%5C%5C.%5Ba-zA-Z%5D%23i)
i macht das Ganze gleich noch groß/kleinschreibungsunabhängig

if ($HTTP_REFERER==$check)

== ist hier falsch, es soll ja nicht gleich sein, sondern du willst auf den regulären Ausdrück prüfen. also schreibe mal ein preg_match(…) in die Klammer. $_SERVER[„HTTP_REFERER“] geht auch bei register_globals off, siehe oben. Außerdem solltest du zusätzlich noch leeren Referer zulassen, da dieser von einigen Firewalls/Proxys gefiltert wird.

{
echo $newurl;

Da steht nur eine Zahl oder FALSE drin, ganz falsch.
Hier muss jetzt das readfile hin, allerdings solltest du vorher noch prüfen, was für eine Datei angefordert wurde (jpeg oder gif; mit strstr oder preg_match suchen) und den passenden Header senden:
Header(„Content-Type: image/jpeg“);

Danach eigentlich das readfile, aber vorher musst du „böse“ Zeichen aus $datei filtern, damit dir keiner …/…/…/etc/passwd da unterschieben kann. Also am besten per preg_replace alles außer Buchstaben, Ziffern, und dem „.“ entfernen, insbesondere „/“ und „“.
Da kann man dann auch noch abfangen, das es die Datei nicht gibt:
if (@readfile($imgdir.$datei)===FALSE) {
Header(„Location: http://…/nichtda.jpeg“);
exit;
}

Neben dieser Variante, wo der Server das Bild liest und sendet, könntest du hier auch nur eine Umleitung auf die richtige URL, wie unten verwendet, angeben. Das hat den vorteil, das der Server nciht so stark belastet wird, aber den Nachteil, das der Benutzer die wahre URL ermitteln kann…

}
else
{
echo „“;

Das geht nun gar nicht, was soll der Browser mit dem HTML-Code, wenn er ein Bild erwartet ?
Entweder du sendest einfach die URL als „Umleitung“:
Header("Location: http://www.floeper.com/traffic.gif");
wie oben den passenden Content-Type und die Bilddaten hinterher.

}
?>

Alexander

Holladiewaldfee

if ($HTTP_REFERER==$check)

Viele Leute schalten absichtlich (Mozilla, Firewall) oder unabsichtlich (Firewall, Proxy) die Übermittlung des Referers ab.

All diese Leute sperrst Du dann aus Deiner Seite aus.
Willst Du das wirklich?

Ciao,

Harry

hi alexander!
vielen dank für die schnelle und umfangreiche hilfe!

ich probiere mal in der hoffnung, dass es klappt. bei misserfolg melde ich mich noch einmal :smile:)

gruß
stefan

hallo!

…also so klappts auch nicht, ich habe bestimmt immer noch sehr viel falsch. könntet ihr mir nochmal helfen? danke!

gruß stefan

<?php $datei = $_SERVER["PATH_INFO"] ;
$bildordner = "bilderordner"; $newurl = readfile($bilderordner.$datei); $check = $#http://([[www.])\*floeper.com/[0-9a-zA-Z]\*\\.[a-zA-Z]#i](http://www.%5D)*floeper.com/%5B0-9a-zA-Z%5D*%5C%5C.%5Ba-zA-Z%5D%23i)"; if (preg\_match($\_SERVER["HTTP\_REFERER"]=$check)) { $newurl = readfile($bilderordner.$datei); if (@readfile($bilderordner.$datei)===FALSE) { Header("Location: [http://floeper.com/404.html"](http://floeper.com/404.html%22)); exit; } else { Header("Location: [http://www.floeper.com/traffic.gif"](http://www.floeper.com/traffic.gif%22)); } ?\>

hi
ich glaube, ich habe das preg_match() falsch…

kann mir bitte nochmal jemand helfen?

danke!
stefan

Hallo Stefan !

hallo!

…also so klappts auch nicht, ich habe bestimmt immer noch
sehr viel falsch. könntet ihr mir nochmal helfen? danke!

gruß stefan

<?php :blush:datei = $_SERVER["PATH_INFO"] ;
$bildordner = "bilderordner";

$newurl = readfile($bilderordner.$datei);
Lass die Zeile da weg, du willst das Bild nciht jetzt schon ausgeben.

$check ="#http://([www.])*floeper.com/[0-9a-zA-Z]*\.[a-zA-Z]#ifloeper.com/[0-9a-zA-Z]%5C%5C.%5Ba-zA-Z%5D%23i)";

if (preg_match($check, $_SERVER[„HTTP_REFERER“]))

{

Einfügen:
if (strstr($datei, „gif“))
Header(„Content-Type: image/gif“);
else Header(„Content-Type: image/jpeg“);

$newurl = readfile($bilderordner.$datei);

die weg, das passiert in der nächsten Zeile.

if (@readfile($bilderordner.$datei)===FALSE) {
Header("Location: http://floeper.com/404.html");
exit;
}
else
{
Header("Location: http://www.floeper.com/traffic.gif");
}
?>

Alexander