PHP Warning, beim absichern des Kontaktformulars

Guten Tag,

ich habe mir seit längerem Gedanken gemacht wie ich mein Konatkformular, Kommentarformular bzw. mein Newsletterformular vor sogenannten Spammern schützen könnte. Nach langem lesen verschiedenster Meinungen habe ich mich dafür entschieden den Lösungsansatz von der Site http://www.php-kurs.com/e-mail-und-sicherheit.htm leicht angepasst zu verwenden. Der Sinn dieses Scriptes ist es ungewollte Wörter bzw. Zeichen die für Spammer wichtig sind zu filtern und den Versendevorgang zu stoppen bis diese nicht erlaubten Zeichen entfernt wurden. Doch leider funktioniert etwas noch nicht richtig und es erscheint nach mehrmaligem anpassen immer noch folgende PHP Warnung:

Die Warnung:
Warning: preg_match() [function.preg-match]: Unknown modifier ‚d‘ in /is/htdocs/__root__/__dir__/__file__.php on line 71

Code-Ausschnitt, ab Linie 71:
if (preg_match("/(to:expressionless:cc:expressionless:bcc:expressionless:from:expressionless:subject:expressionless:reply-to:expressionless:content-type:expressionless:MIME-Version:expressionless:multipart/mixed|Content-Transfer-Encoding:smile:/ims", $input)) {
$eingabefehler .= "- NO SPAM PLEASE
";
}

if (preg_match("/%0A|\r|%0D|\n|%00|\0|%09|\t|%01|%02|%03|%04|%05|%06|%07|%08|%09|%0B|%0C|%0E|%0F|%10|%11|%12|%13/i", $input)) {
$eingabefehler .= "- NO SPAM PLEASE
";
}

Zur Erläuterung:
Der oben aufgeführte Code ist im Quelltext unterhalb von anderen Validierungs Funktionen die mittels if (isset($_POST["__feldname__"])) {
if (strlen(__$inputfeld__) überprüfen ob das Feld weder leer ist und eine mindest Anzahl an Zeichen geschrieben wurde. Die Variable $input beinhaltet bei mir eine Aufzählung der __feldnamen__ des jeweiligen Formulars.

Meine Frage:
Habe ich nur einen Tippfehler oder ist mir da ein „Denkfehler“ unterlaufen, denn ich nicht beachtet habe. Was muss ich verbessern bzw. umschreiben?

Ich bin über jede Antwort dankbar und freue mich besonders über Lösungsvorschläge aber natürlich auch über Hinweise! Vielen Dank im Voraus! Beste Grüße!

Der Modifier ‚d‘ ist keine gültige Syntax für diese Funktion. Siehe hier:

http://php.net/manual/de/reference.pcre.pattern.modi…

Guten Tag,

vielen Dank für Ihre schnelle Antwort. Ich habe mir gerade die angegebene Site durchgelesen, aber ich muss leider zugeben das dies mich nicht weiter gebracht hat. Ich habe zwar jetzt verstanden das ich also den Modifier „m“ rausnehmen muss, doch leider wird immer noch die selbe Warnung ausgegeben. Ich möchte Sie höfflich fragen ob Sie mir eventuell einen weiteren Tipp geben würden, bzw. mir sagen könnten welchen Modifier ich in diesem Fall überhaupt verwenden muss/sollte?

Ich würde mich sehr über Ihre Hilfe freuen, da ich mich mit PHP leider nicht sehr gut auskenne, aber trotzdem den Wunsch habe sichere Spamfreie Formulare anzubieten. Beste Grüße!

Hallo,

du hast im ersten Ausdruck zwischen multipart und mixed ein / eingebaut; das verwendest du aber auch gleichzeitig als Begrenzer. Ist in dem Beispiel zwar genauso, meines Wissens nach aber nicht richtig.
Probier doch mal das / in der Mitte zu escapen oder einen anderen Begrenzer zu wählen.

Gruß Zorki

folgende lösung ist nicht so elegant wie reguläre ausdrücke, aber es ist verständlicher.
achtung: ein betreff wie "auto: " wäre nach diesem muster ebenfalls spam. es wäre besser, in diesem fall den nutzer darauf aufmerksam zu machen, einen anderen betreff zu wählen.

$muster = array (‚to:‘,‚cc:‘ …)
$spam = false;
while ( list($key,$val) = each ($muster) ){
if (stristr( $input, $val )){
$spam = true;
break;
}
}