Moin!
Ich habe mich nochmals des Themas der missbrauchten Formulare angenommen. Zur Erinnerung: Da versucht ein Spammer via Skript in Formulare ziemlich wüstes Zeug einzutragen (Genau genommen versucht er die vom Formular aufgerufenen Skripte mit dem Stuff zu füttern).
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. Vielleicht (hoffentlich) findet jemand jemand Fehler
Die Funktion untersucht zwei Eigenarten:
Erstens: Der Spammer versucht immer in eigentlich einzeilige Variablen Inhalte mit Zeilenumbrüchen einzuschmuggeln.
- In diesem Fall erfolgt der sofortige Abbruch.
Zweitens: Der Spammer versucht in jedes Formularfeld eine mindestens Mailadresse einzutragen.
- In diesem Fall erfolgt der sofortige Abbruch in Abhängigkeit von der Anzahl der Variablen mit einem @ im Inhalt und der erlaubten Anzahl eben solcher.
# Im Gedenken an den gestorbenen jrubin3456@aol.com
function jrubin3456($intMaxAllowed, $strFields) {
# Übergeben Sie dieser Funktion als Int wieviele Formularfelder ein
# '@' enthalten dürfen sowie als String eine Komma-separierte
# Liste aller Namen von Formularfeldern, die einzeilig sein sollen.
# Die Funktion liefert ein true zurück, wenn in den Feldern Zeilenumbrüche
# vorkommen oder die zulässige Anzahl der Felder mit einem '@' überschritten wird
# Beispiel eines Aufrufs:
#
/*
if (jrubin3456(2, 'name,email,firma,position')) {
header("HTTP/1.0 403 Forbidden");
die("Spam attempt denied");
}
*/
#
#
if ((!isset($strFields)) || (trim($strFields)=='')) {
die ("Error: in function jrubin3456: Es wurden keine Feldnamen übergeben");
}
$arFields=explode(',', $strFields);
if ($intMaxAllowed > count($arFields)) {
die ("Error: in function jrubin3456: Die Anzahl der erlaubten Felder mit @ ist größer als die Anzahl der Felder.");
}
$intFoundAet=0;
foreach ($arFields as $strField) {
$strField = trim ($strField);
if (isset($_POST[$strField])) {
if ((strpos($_POST[$strField],"\n")) || (strpos($_POST[$strField],"\r"))) {
return true;
}
if (strpos($_POST[$strField],'@')) {
$intFoundAet++;
}
}
if (isset($_GET[$strField])) {
if ((strpos($_GET[$strField],"\n")) || (strpos($_GET[$strField],"\r"))) {
return true;
}
if (strpos($_GET[$strField],'@')) {
$intFoundAet++;
}
}
if ($intFoundAet > $intMaxAllowed)
return true;
}
return false;
}
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development