Überprüfen der URL bei Seitenabruf (speziell Bilder)

Alles, was den Apache betrifft, kann hier besprochen werden.

Überprüfen der URL bei Seitenabruf (speziell Bilder)

Postby clevercom » 07. March 2005 17:00

Hallo,

ich suche eine Lösung für folgendes Problem:
ich binde bei eBay-Auktionen Bilder ein, die auf meinem Server liegen.
Leider werden diese Auktionstext öfters komplett kopiert, d. h. fremde Auktionen benutzen meine Bilder auf meinem Server.
Kann man dem Apachen beibringen, die aufrufende URL nach einer (gegebenen) Auktionsnummer zu durchsuchen, bevor er das Bild ausliefert?

Im Idealfall würde er im Fehlerfall ein "Fehlerbild" liefern.

Da dies alles Bildzugriffe sind, scheidet PHP leider aus.

Hat jemand eine Idee?

Danke im Voraus.

Manfred
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Postby deepsurfer » 07. March 2005 17:09

baust du auch die aktionseiten selber oder benutzt du die webbaukasten von eBay ??

Wenn du selber die Seiten erstellst, so gibt es den kleinen trick das du ein <Table> baust, diesen Table dann das originalbild als backround definierst und als <img> darüber eine transparentes GIF bild.
wenn nun jemand hingeht und kopiert sich zu einem nur die URL so erhält dieser nur das Transp.Gif, auch beim kopieren des bildes erhält derjenige nur das Trans.Gif.

Damit würdest du schonmal die """"einfachen"""" leute ohne explizieten kenntnisse über html ausschliessen.
Für diejenigen die das durchschauen ist der przentsatz aber wieder sehr gering
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby clevercom » 07. March 2005 17:42

deepsurfer wrote:baust du auch die aktionseiten selber oder benutzt du die webbaukasten von eBay ??

Wenn du selber die Seiten erstellst, so gibt es den kleinen trick das du ein <Table> baust, diesen Table dann das originalbild als backround definierst und als <img> darüber eine transparentes GIF bild.
wenn nun jemand hingeht und kopiert sich zu einem nur die URL so erhält dieser nur das Transp.Gif, auch beim kopieren des bildes erhält derjenige nur das Trans.Gif.

Damit würdest du schonmal die """"einfachen"""" leute ohne explizieten kenntnisse über html ausschliessen.
Für diejenigen die das durchschauen ist der przentsatz aber wieder sehr gering


Ich benutze Afterbuy mit eigenen HTML-Texten.
Die Idee mit den transparenten GIFs hatte ich auch schon, nur die Abkupferer lassen sich anscheinend den Sourcecode anzeigen und kopieren die entsprechenden Passagen dann in ihre eigenen Auktionen. Da würde der Schutz dann mitkopiert :?
Ich sehe die einzige Möglichkeit darin, die URLs nach den eigenen Auktionsnummern abzufragen. Leider sehen die eBay-URLs jedesmal anders aus, je nachdem, wie jemand eine Auktion abruft (spätestens wenn jemand über eine ausländische eBay-Seite kommt, versagt eine statische Prüfung).
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Postby deepsurfer » 07. March 2005 19:05

hhmm... benutzt du eine Linuxkiste als Server???
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby clevercom » 07. March 2005 20:59

deepsurfer wrote:hhmm... benutzt du eine Linuxkiste als Server???


:oops: Windows XP Prof.
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Re: Überprüfen der URL bei Seitenabruf (speziell Bilder)

Postby clevercom » 21. April 2005 12:38

clevercom wrote:Hallo,

ich suche eine Lösung für folgendes Problem:
ich binde bei eBay-Auktionen Bilder ein, die auf meinem Server liegen.
Leider werden diese Auktionstext öfters komplett kopiert, d. h. fremde Auktionen benutzen meine Bilder auf meinem Server.
Kann man dem Apachen beibringen, die aufrufende URL nach einer (gegebenen) Auktionsnummer zu durchsuchen, bevor er das Bild ausliefert?

Im Idealfall würde er im Fehlerfall ein "Fehlerbild" liefern.

Da dies alles Bildzugriffe sind, scheidet PHP leider aus.

Hat jemand eine Idee?

Danke im Voraus.

Manfred


Falls es jemanden interessiert...
konnte das Problem inzwischen mit PHP lösen
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Postby Stefan » 21. April 2005 12:44

Seruvs,

und wie?

Schilder doch mal.

ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz

Postby clevercom » 21. April 2005 13:26

Folgende Seite hat mich inspiriert: http://www.guweb.com/postcards/help/antileech.shtml

So wie es dort steht, funktioniert es aber nicht :?

folgendes File tut bei mir nun Dienst:
<?php

// Eigene Domain (ohne "www." oder dergleichen)
$selfdomain = ".domain.de";

// Verzeichnis der Bilder (kein Slash am Ende!)
$imgdir = "c:/www/www.domain.de/richtig";
$errdir = "C:/www/www.domain.de/falsch";
$errfile = "C:/www/www.domain.de/illegal.gif";

// Zustzlich erlaubte Domain
$allowdomain = "afterbuy.de";

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

$ebayjoker = strtoupper("cgi5.ebay.de/ws2/eBayISAPI.dll");
$ebay = strtoupper("eBayISAPI.dll");
$item1 = strtoupper("123456789");
$item2 = strtoupper("123456789");
$item3 = strtoupper("123456789");
$item4 = strtoupper("123456789");
$item5 = strtoupper("123456789");
$item6 = strtoupper("123456789");
$item7 = strtoupper("123456789");
$item8 = strtoupper("123456789");
$item9 = strtoupper("123456789");
$item10 = strtoupper("123456789");
$item11 = strtoupper("123456789");


$ref = strtoupper($HTTP_REFERER);

// protokoll entfernen
$ref = str_replace("HTTP://", "", $ref);
$ref = str_replace("x.php", "", $ref);

// domain extrahieren
if (strpos($ref, "/")) $ref = substr($ref, 0, strpos($ref, "/"));

if (($ref=="") || (strpos($ref, $allowdomain)) || (strpos($ref, $selfdomain)) ||
(strpos($ref, $ebayjoker)) ||
(
((strpos($ref, $ebay)) && (strpos($ref, $item1))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item2))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item3))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item4))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item5))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item6))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item7))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item8))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item9))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item10))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item11)))
))
{
$fn = $PATH_INFO;

if ((strpos($fn, "../")) || (strpos($fn, "..\\")))
{ echo "Zugriffsverletzung"; // Server schützen
}
else
{
if (file_exists ($imgdir.$fn))
{ @readfile($imgdir.$fn); }// Datei ausgeben
else
{ @readfile($errfile); } // Datei fehlt, Ersatzdatei senden
}
}
else
{
$fn = $PATH_INFO;

if ((strpos($fn, "../")) || (strpos($fn, "..\\")))
{echo "Zugriffsverletzung"; // Server schützen
}
else
{
if (file_exists ($errdir.$fn))
{@readfile($errdir.$fn); }// Datei ausgeben
else
{ @readfile($errfile); } // Datei fehlt, Ersatzdatei senden
}
}

?>


Aufgerufen würde über o.g. Script dann z. B. mittels www.domain.de/x.php/bild1.jpg (Habe das veröffentlichte Script leicht modifiziert, der Link wird so nicht funktioneren).

Die "richtigen" Bilder liegen unter "/richtig",
ein Ersatzbild liegt im Verzeichnis "/falsch",
existiert kein Ersatzbild bzw. kein Original, wird "/illegal.gif" gesendet.

Ein Zugriff wird als korrekt erkannt, wenn von "domain.de" bzw. "Afterbuy.de" verlinkt wird, oder via eBay und die Auktionsnummer einer der eingegebenen Nummern (hier 1234567890) entspricht.

Der eBayJoker wird noch mit dem Referrer ersetzt, der bei der Neuanlage von Auktionen gesendet wird... man will ja nicht voreilig warnen.

Da ist sicher noch viel Platz für Optimierungen, aber es funktioniert. Einziger Haken: Gibt man den Link direkt ein, interpretiert der Browser den Bildinhalt als Text/HTML und man sieht Zeichensalat statt einem Bild.

Bei mir hat das File auch noch eine andere Endung als PHP, um den Link noch unauffälliger zu machen.
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Postby clevercom » 21. April 2005 13:43

außerdem schütze ich die Bilderverzeichniss noch mit folgender .htaccess:
<Files ~ "\.(gif|jpe?g|png|pdf)$">
ErrorDocument 403 http://www.domain.de/illegal.gif
ErrorDocument 500 http://www.domain.de/illegal.gif
SetEnvIfNoCase Referer "^http://www.domain.de" local_ref=1
SetEnvIfNoCase Referer "^http://domain.de" local_ref=1
Order Allow,Deny
Allow from env=local_ref
</Files>

<Files .htaccess>
order allow,deny
deny from all
</Files>

da auf die Bilder nur über das Script zugegriffen werden soll, ist ein Direktzugriff nicht nötig bzw. sinnvoll. Da man das Verzeichnis auch noch beliebig nennen kann, könnte man auch durch Umbenennen bzw. häufigen Namenwechsel die Bilder schützen. Durch den 2. Teil wird auch die .htaccess vor neugierigen Blicken geschützt.
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Postby clevercom » 26. April 2005 07:48

Das Interesse scheint ja nicht groß zu sein, sonst hätte jemand bemerkt, dass noch ein kleiner, aber bedeutender Fehler im Script steckt...
Folgende Änderungen sind nötig, damit es wirklich läuft:
Code: Select all
 // protokoll entfernen
$ref = str_replace("HTTP://", "", $ref);
$ref = str_replace("x.php", "", $ref);

wird zu
Code: Select all
 // protokoll entfernen
$ref = str_replace("HTTP://", "", $ref);
$eref = $ref;
$ref = str_replace("x.php", "", $ref);


und

Code: Select all
 (strpos($ref, $ebayjoker)) ||
(
((strpos($ref, $ebay)) && (strpos($ref, $item1))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item2))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item3))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item4))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item5))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item6))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item7))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item8))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item9))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item10))) ||
((strpos($ref, $ebay)) && (strpos($ref, $item11)))

wird zu
Code: Select all
 (strpos($eref, $ebayjoker)) ||
(
((strpos($eref, $ebay)) && (strpos($eref, $item1))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item2))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item3))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item4))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item5))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item6))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item7))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item8))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item9))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item10))) ||
((strpos($eref, $ebay)) && (strpos($eref, $item11)))


In der ursprünglichen Version wurde hinter der Domain abgeschnitten und damit waren die gesuchten Daten nicht mehr im Vergleichsstring vorhanden.
clevercom
 
Posts: 15
Joined: 07. March 2005 16:53

Postby Stefan » 26. April 2005 12:41

Grüß Dich,

Das Interesse scheint ja nicht groß zu sein[...]


HEY! nicht aufhören Deine Erfolge hier zu posten.
Dein Beitrag wird garantiert noch gefunden werden.

ciao, Stefan
User avatar
Stefan
 
Posts: 475
Joined: 26. December 2002 22:36
Location: Mitten in der sonnigen Südpfalz


Return to Apache

Who is online

Users browsing this forum: No registered users and 15 guests