Brauche Refferer Check für CGI Script

Hallo,

ich suche nach einer Lösung für ein Script um beim Aufruf zu überprüfen, ob das Script von einer Domain aus aufgerufen wird, der dies gestattet ist. Ich will damit verhindern, dass Fremde das Script auf meinem Server aufrufen und mir so unnötiger Traffic entsteht.

Ich habe eine Lösung gefunden, bei der folgendes im Script eingefügt werden muss. Die Variante ist mir aber zu aufwendig, da ich mehreren Domains den Zugriff erlauben will und dann nicht jedes mal was im Script ändern will. Mir schweb eine Lösung vor, wo alle erlaubten Domains in eine einzige *.txt Datei eingetragen werden, die dann vom Script ausgelesen wird. Wäre cool, wenn mir da jemand helfen könnte.

if (($ENV{‚HTTP_REFERER‘} eq "http://www.upoint.net/group/form.htm") ||
($ENV{‚HTTP_REFERER‘} eq "http://www.upoint.net/group/anotherform.htm") ||
($ENV{‚HTTP_REFERER‘} eq "http://upoint.net/group/form.htm") ||
($ENV{‚HTTP_REFERER‘} eq "http://upoint.net/group/anotherform.htm")))
{
}
else {
print „Content-type: text/html\n\n“;
print "Error! Invalid referer
";
exit;
}

Grüße
Pfanni

ich suche nach einer Lösung für ein Script um beim Aufruf zu
überprüfen, ob das Script von einer Domain aus aufgerufen
wird, der dies gestattet ist.

[…] Mir schweb eine
Lösung vor, wo alle erlaubten Domains in eine einzige *.txt
Datei eingetragen werden, die dann vom Script ausgelesen wird.

Ungetestet:

my $filename = '/usr/was/auch/immer/allowed.txt';

open(CONFIG,") {
 chomp $\_;
 if ($ENV{'HTTP\_REFERER'} =~ /$\_/i) {
 $okay = 1;
 }
}
close (CONFIG);

if (!$okay) {
 print "Content-type: text/html\n\n";
print "Error! **Invalid referer**";
exit;
}

In der Textdatei sollte dann folgendes stehen (jeweils ein Eintrag/Zeile)

www.xyz.de
xyz.de
64.12.23.12

Achtung: Manche Browser können den Referer unterdrücken bzw. verfälschen, dann sehen Deine Besucher nur die Fehlermeldung.

Nachtrag: kleine Optimierung

 if ($ENV{'HTTP\_REFERER'} =~ /$\_/i) {
 $okay = 1;
 last; #hier können wir bereits aufhören
 }

Hallo Klaus,

vielen Dank für Deine Mühe. Ich hab deinen Vorschlag noch nicht ausprobiert, werde ihn mir aber ganz sicher mal anschauen. In der Zwischenzeit habe ich auch noch einen anderen Quellcode bekommen, der zu funktionieren scheint. Wäre cool, wenn da mal jemand einen Blick drauf werfen könnte und ihn auf seine reibungslose Funktionalität hin analysieren könnte. Im Test ist alles gelaufen.

Wie ist das eigentlich mit Subdomains? Muss da jede Subdomain einzeln eingegeben werden oder reicht die Hauptdomain. Wenn diese reichen würde, wäre das echt doof. Weil man dadurch mit etwas Pech einen ganzen Freespaceprovider freischalten würde.

Grüße

Pfanni

sub check {
if ($offline == 1){
open(FILE, „domains.txt“);@alloweddomains = ;close(FILE);local($check_referer) = 0;
if ($ENV{‚HTTP_REFERER‘}) {foreach $referer (@alloweddomains) {$referer =~ s/[\n\r]//g;if ($ENV{‚HTTP_REFERER‘} =~ m|https?://([^/]*)$referer|i) {$check_referer = 1;last;}}}else {$check_referer = 0;}if ($check_referer != 1) {

print „Content-Type: text/html\n\n“;
print „Zugriff verweigert - Falsche Domain“;
exit;
}
}
}