Cheatah: Missbrauch von Formularen ('jrubin3456@aol.com-Problem')

Beitrag lesen

Hi,

Ich habe versucht das in eine Funktion zu packen, damit bestehende Skripte leicht nachgerüstet werden können. Erste Funktionsproben sind erfolgreich verlaufen, aber ich stelle die Funktion mal zur Diskussion.

ähnlich wie Klaus würde ich einen anderen Ansatz wählen: Du gehst mit Deinem Script nach Indizien, die bei einer akuten Art des Spammings gerade mal üblich sind. Der nächste Spammer geht aber vermutlich anders vor, so dass das Script nicht mehr greift bzw. mit jeder Iterationsstufe individuell nachgerüstet werden muss. Wodurch zeichnet sich denn ein Spammer aus? Meiner Ansicht nach vor allem dadurch, dass er die Formulare automatisiert abschickt - bzw. direkte Requests an die Script-URI schickt, anstatt über ein Formular zu gehen.

Mir schwebt vor, auf der Formularseite eine Session mit langer Laufzeit zu starten (bzw. eine bestehende zu füttern), in der die Aufrufzeit gespeichert wird. Findet der Formularversand früher als nach n Sekunden statt (n könnte im Bereich 5 bis 10 liegen), hat offenbar kein Mensch die Formularfelder ausgefüllt. Die Aufrufzeit sollte nach jedem (mindestens legitimen, besser ausnahmslos jedem) Scriptaufruf aktualisiert werden.

Zugegeben, das ist nicht so leicht nachzurüsten wie Deine Funktion. Im Ergebnis dürfte es aber deutlich effektiver, effizienter und dauerhafter sein.

Erstens: Der Spammer versucht immer in eigentlich einzeilige Variablen Inhalte mit Zeilenumbrüchen einzuschmuggeln.

Das passiert auch leicht durch Copy & Paste.

Zweitens: Der Spammer versucht in jedes Formularfeld eine mindestens Mailadresse einzutragen.

eMail und Firma können sehr leicht @-Zeichen enthalten. Findet sich dies auch noch in einem anderen Feld, warum auch immer, werden legitime Nutzungen bei Deinem Beispielaufruf abgelehnt. Dieses Problem könntest Du zumindest reduzieren, indem Du nicht nur auf @-Zeichen testest, sondern auf eMail-Adressen.

if ($intMaxAllowed > count($arFields)) {
    die ("Error: in function jrubin3456: Die Anzahl der erlaubten Felder mit @ ist größer als die Anzahl der Felder.");

Dies kann nicht von außen manipuliert werden (Hacking mal ausgenommen), wäre also IMHO kein Grund für einen Abbruch.

if (isset($_POST[$strField])) {

[...]

if (isset($_GET[$strField])) {

$_REQUEST würde die Code-Verdopplung sparen ... :-)

Cheatah

--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes