Sub mit Schleife wird nicht richtig beendet
Sub mit Schleife wird nicht richtig beendet
am 18.06.2006 15:40:22 von Maik Prinz
Hallo,
um die Spamflut in Gästebuch etwas abzuwehren, wollte ich das
entsprechende Script um einen Filter erweitern, der bei bestimmten
Wörtern den Staus 403 ausgibt. Dafür gehe ich vor dem endgültigen
Eintragen zunächst in eine Sub-Routine, in welcher eine Datei mit
Spam-Zuordnungen geöffnet und mit den Einträgen verglichen wird.
[Gästebucheintag hinzufügen ...]
&checkspam($username) if ($username ne "");
&checkspam($comments) if ($comments ne "");
[... weiter hinzufügen]
#############
sub checkspam {
local($chkval)=$_[0];
open(FILE, "guestbookspamfile");
@spamlist = ;
close (FILE);
foreach $spamtext(@spamlist){
chomp($spamtext);
if ($chkval =~ m/$spamtext/i) {
print "Status: 403 Forbidden\n\n";
# exit 0;
}
}
}
#############
Wenn ich einen relevanten Text im Gästebuch eintrage, wird tatsächlich
"Status 403" ausgegeben (als einfacher Text im Browser?!). Gibt es keine
Übereinstimmungen (Kein Spam), öffnet sich eine leere HTML-Seite und der
Eintrag kommt nicht zustande.
Warum bricht das Script scheinbar ab, wenn keine Übereinstimmungen
gefunden werden, und macht nicht mit der bisherigen Eintragung weiter?
TIA, Maik
--
250+ 3D Wallpaper: http://www.2prinz.de
40tude Dialog - Free Windows-Newsreader
Download: http://www.40tude.com/dialog/
NG: news:de.comm.software.40tude-dialog
Re: Sub mit Schleife wird nicht richtig beendet
am 19.06.2006 00:05:45 von Maik Prinz
*Ingri* schrieb am So, 18. Jun. 2006 um 15:40...
> Dafür gehe ich vor dem endgültigen Eintragen zunächst in eine
> Sub-Routine, in welcher eine Datei mit Spam-Zuordnungen geöffnet und
> mit den Einträgen verglichen wird.
Da lag wohl auch der Fehler. Ich hatte u.a. den Eintrag "[URL"
hinzugefügt, was wohl auf Grund der eckigen Klammer zum Abbruch führt.
Allerdings funktioniert nicht mal die Verwendung von "\[URL". :-/
BTW: Ist die Verwendung des Fehler-Codes 403 an dieser Stelle richtig?
TIA, Maik
--
250+ 3D Wallpaper: http://www.2prinz.de
40tude Dialog - Free Windows-Newsreader
Download: http://www.40tude.com/dialog/
NG: news:de.comm.software.40tude-dialog
Re: Sub mit Schleife wird nicht richtig beendet
am 19.06.2006 09:56:19 von Ferry Bolhar
Maik:
> Allerdings funktioniert nicht mal die Verwendung von "\[URL". :-/
Wieso nicht? Was passiert da bzw. passiert nicht?
> BTW: Ist die Verwendung des Fehler-Codes 403 an dieser Stelle richtig?
403 steht für "Forbidden", dh., der Zugriff auf den angegebenen URL
ist - meistens infolge fehlender Berechtigungen - nicht erlaubt. Inwieweit
sich das auf deine Situation anwenden läßt, ist letztlich eine Geschmacks-
frage. Ich persönlich würde sagen, der Code ist OK, allerdings solltest
du eine Erklärung mitliefern (ohne natürlich zu verraten, was genau als
Spam eingestuft wurde).
Eine Option wäre auch noch die Verwendung von 409 "Conflict",
den ich in einer ähnlichen Situation verwende. Da diese Code aber
weitgehend unbekannt ist, musst du umbedingt eine Erklärung dazu
mitsenden, was ich beim Apache mit entsprechenden "ErrorDocument"
Direktiven mache.
LG, Ferry
--
Ing. Ferry Bolhar
Municipality of Vienna, Department 14
A-1010 Vienna / AUSTRIA
E-mail: bol@adv.magwien.gv.at
Re: Sub mit Schleife wird nicht richtig beendet
am 19.06.2006 23:01:16 von Michael Perle
Maik Prinz wrote:
> Wenn ich einen relevanten Text im Gästebuch eintrage, wird tatsächlich
> "Status 403" ausgegeben (als einfacher Text im Browser?!).
Ich interpretiere Dein "?!" mal so, dass Du das nicht willst.
Kann es sein, dass Dein Skript irgendwo weiter oben einen
Header ausgibt, also z.B. ein
print "Content-Type: text/html\n\n" oder -- falls CGI --
print $cgi->header();
den Headerbereich mit "\n\n" abschlieszt oder bereits
einen Status angibt?
MP
Re: Sub mit Schleife wird nicht richtig beendet
am 21.06.2006 18:04:20 von Maik Prinz
*Michael Perle* schrieb am Mo, 19. Jun. 2006 um 23:01...
> Maik Prinz wrote:
>> Wenn ich einen relevanten Text im Gästebuch eintrage, wird tatsächlich
>> "Status 403" ausgegeben (als einfacher Text im Browser?!).
> Ich interpretiere Dein "?!" mal so, dass Du das nicht willst.
Genau.
> Kann es sein, dass Dein Skript irgendwo weiter oben einen
> Header ausgibt, also z.B. ein
> print "Content-Type: text/html\n\n"
Ja. Sollte ich also vorher auf Spam prüfen?
> oder -- falls CGI --
> print $cgi->header();
> den Headerbereich mit "\n\n" abschlieszt oder bereits
> einen Status angibt?
CGI wird nicht verwendet.
TIA, Maik
--
250+ 3D Wallpaper: http://www.2prinz.de
40tude Dialog - Free Windows-Newsreader
Download: http://www.40tude.com/dialog/
NG: news:de.comm.software.40tude-dialog
Re: Sub mit Schleife wird nicht richtig beendet
am 21.06.2006 18:20:02 von Maik Prinz
*Ferry Bolhar* schrieb am Mo, 19. Jun. 2006 um 9:56...
> Maik:
>> Allerdings funktioniert nicht mal die Verwendung von "\[URL". :-/
> Wieso nicht? Was passiert da bzw. passiert nicht?
Hm, ich hab jetzt "\[/URL\]" genommen, und das funktioniert.
>> BTW: Ist die Verwendung des Fehler-Codes 403 an dieser Stelle richtig?
> 403 steht für "Forbidden", dh., der Zugriff auf den angegebenen URL
> ist - meistens infolge fehlender Berechtigungen - nicht erlaubt. Inwieweit
> sich das auf deine Situation anwenden läßt, ist letztlich eine Geschmacks-
> frage. Ich persönlich würde sagen, der Code ist OK, allerdings solltest
> du eine Erklärung mitliefern (ohne natürlich zu verraten, was genau als
> Spam eingestuft wurde).
Nachdem ich teilweise im 15 Min/Takt mit Spam bombardiert wurde, habe
ich mich dazu entschlossen, markante Wörter bzw. Wortgruppen in eine
externe Datei zu schreiben, welche vor dem schreiben des
Gästebucheintrages den Inhalt aus "Name", "Server" und "Kommentar" mit
deren Inhalt vergleicht. Neben Wörtern die eigentlich in keinem
Gästebuch vorkommen sollten, sind es auch solche, die am Inhalt meiner
Homepage vollkommen vorbeigehen.
> Eine Option wäre auch noch die Verwendung von 409 "Conflict",
> den ich in einer ähnlichen Situation verwende. Da diese Code aber
> weitgehend unbekannt ist, musst du umbedingt eine Erklärung dazu
> mitsenden, was ich beim Apache mit entsprechenden "ErrorDocument"
> Direktiven mache.
Da nicht mal sicher ist, ob die Bots auf 403 reagieren (ähnlich
Bounce-Mail), wird 409 eher noch weniger bewirken. :-/
BTW: Ich habe auch schon mal darüber nachgedacht, die Skript-Datei
regelmäßig umzubenennen.
cu, Maik
--
250+ 3D Wallpaper: http://www.2prinz.de
40tude Dialog - Free Windows-Newsreader
Download: http://www.40tude.com/dialog/
NG: news:de.comm.software.40tude-dialog
Re: Sub mit Schleife wird nicht richtig beendet
am 21.06.2006 18:25:14 von Wolf Behrenhoff
Maik Prinz schrieb:
> *Michael Perle* schrieb am Mo, 19. Jun. 2006 um 23:01...
>> Maik Prinz wrote:
>>> Wenn ich einen relevanten Text im Gästebuch eintrage, wird tatsächlich
>>> "Status 403" ausgegeben (als einfacher Text im Browser?!).
>> Ich interpretiere Dein "?!" mal so, dass Du das nicht willst.
>
> Genau.
>
>> Kann es sein, dass Dein Skript irgendwo weiter oben einen
>> Header ausgibt, also z.B. ein
>> print "Content-Type: text/html\n\n"
>
> Ja. Sollte ich also vorher auf Spam prüfen?
Ja. Der Status muss im Header, also vor der Leerzeile, übergeben werden.
>> oder -- falls CGI --
>> print $cgi->header();
>> den Headerbereich mit "\n\n" abschlieszt oder bereits
>> einen Status angibt?
>
> CGI wird nicht verwendet.
Warum nicht? Es ist wesentlich einfacher, mit dem Modul zu arbeiten als
ohne!
Wolf
Re: Sub mit Schleife wird nicht richtig beendet
am 21.06.2006 19:01:45 von Wolf Behrenhoff
Maik Prinz schrieb:
> Nachdem ich teilweise im 15 Min/Takt mit Spam bombardiert wurde, habe
> ich mich dazu entschlossen, markante Wörter bzw. Wortgruppen in eine
> externe Datei zu schreiben, welche vor dem schreiben des
> Gästebucheintrages den Inhalt aus "Name", "Server" und "Kommentar" mit
> deren Inhalt vergleicht. Neben Wörtern die eigentlich in keinem
> Gästebuch vorkommen sollten, sind es auch solche, die am Inhalt meiner
> Homepage vollkommen vorbeigehen.
Was auch funktioniert, ist eine Sicherheitsabfrage. Also wie etwa 'geben
Sie "xyz" ein, um ihren Eintrag freizuschalten'. Sollte das nicht
helfen, muss man das "xyz" eben als Bild erstellen. Dann ist man relativ
sicher gegen Spambots geschützt. (xyz ist hier ein Zufallsstring)
Wolf
Re: Sub mit Schleife wird nicht richtig beendet
am 21.06.2006 20:05:38 von Maik Prinz
*Wolf Behrenhoff* schrieb am Mi, 21. Jun. 2006 um 18:25...
> Maik Prinz schrieb:
>> *Michael Perle* schrieb am Mo, 19. Jun. 2006 um 23:01...
>>> Maik Prinz wrote:
>>>> Wenn ich einen relevanten Text im Gästebuch eintrage, wird tatsächlich
>>>> "Status 403" ausgegeben (als einfacher Text im Browser?!).
>>> Ich interpretiere Dein "?!" mal so, dass Du das nicht willst.
>> Genau.
>>> Kann es sein, dass Dein Skript irgendwo weiter oben einen
>>> Header ausgibt, also z.B. ein
>>> print "Content-Type: text/html\n\n"
>> Ja. Sollte ich also vorher auf Spam prüfen?
> Ja. Der Status muss im Header, also vor der Leerzeile, übergeben werden.
Super, jetzt wird die /echte/ Server-Fehlerseite ausgegeben. :-)
Der Content-Type-Header wird jetzt allerdings nur ausgegeben, wenn kein
Spam identifiziert wurde.
>>> oder -- falls CGI --
>>> print $cgi->header();
>>> den Headerbereich mit "\n\n" abschlieszt oder bereits
>>> einen Status angibt?
>> CGI wird nicht verwendet.
> Warum nicht? Es ist wesentlich einfacher, mit dem Modul zu arbeiten als
> ohne!
Das glaube ich gern, aber ich müßte einiges im Skript umstellen und
kenne mich leider nicht so gut damit aus. Jedenfalls funktioniert es
jetzt.
THX, Maik
--
250+ 3D Wallpaper: http://www.2prinz.de
40tude Dialog - Free Windows-Newsreader
Download: http://www.40tude.com/dialog/
NG: news:de.comm.software.40tude-dialog
Re: Sub mit Schleife wird nicht richtig beendet
am 21.06.2006 20:11:56 von Maik Prinz
*Wolf Behrenhoff* schrieb am Mi, 21. Jun. 2006 um 19:01...
> Maik Prinz schrieb:
>> Nachdem ich teilweise im 15 Min/Takt mit Spam bombardiert wurde, habe
>> ich mich dazu entschlossen, markante Wörter bzw. Wortgruppen in eine
>> externe Datei zu schreiben, welche vor dem schreiben des
>> Gästebucheintrages den Inhalt aus "Name", "Server" und "Kommentar" mit
>> deren Inhalt vergleicht. Neben Wörtern die eigentlich in keinem
>> Gästebuch vorkommen sollten, sind es auch solche, die am Inhalt meiner
>> Homepage vollkommen vorbeigehen.
> Was auch funktioniert, ist eine Sicherheitsabfrage. Also wie etwa 'geben
> Sie "xyz" ein, um ihren Eintrag freizuschalten'. Sollte das nicht
> helfen, muss man das "xyz" eben als Bild erstellen. Dann ist man relativ
> sicher gegen Spambots geschützt. (xyz ist hier ein Zufallsstring)
Die sogenannten Captcha[1] sind aber nicht gerade unumstritten. Effektiv
sind sie aber in jedem Fall. Jedoch möchte ich den wirklichen Nutzern
keine unnötigen Hürden bereiten.
cu, Maik
Footnotes:
¯¯¯¯¯¯¯¯¯¯
[1] http://de.wikipedia.org/wiki/Captcha
--
250+ 3D Wallpaper: http://www.2prinz.de
40tude Dialog - Free Windows-Newsreader
Download: http://www.40tude.com/dialog/
NG: news:de.comm.software.40tude-dialog