Spam bei PHP-Kontaktformular
Wer Probleme mit Spams als Inhaber eines PHP-Kontaktformulars hat, für den ist folgender Artikel sicherlich interessant:
Mail-Injection-Artikel: http://www.mailinjection.com/solutions
Zudem biete ich hier eine Lösung an, um die im obigen Artikel beschrieben Zeilenumbrüche via RegularExpressions zu entfernen:
$_POST['E-Mail']=preg_replace( “/(content-type:|bcc:|cc:|to:|from:)/im”, “”, $_POST['E-Mail']);
if (!preg_match(‘/^[a-z0-9_\.\-]+@[a-z0-9\.\-]+\.[a-z]{2,}$/i’,$_POST['E-Mail'])) die (“Bitte geben Sie ein gültige E-Mail-Adresse ein”);
if (strstr($_POST['Betreff'], “\n”)) die (“Spamversuch blockiert”);
…..
Dabei steht \n bei PHP für eine neue Zeile. Da laut der Spezifikation RFC 2822 die einzelnen Felder durch eine neue Zeile definiert werden müssen, bleibt Spam außen vor.
Update I: http://www.drweb.de/webmaster/kontakt-formular-akismet.shtml – Vorgefertigte Lösung. Skript gibt aus, ob der Nutzer ein Spammer ist oder nicht. Je nachdem kann dann individuell darauf reagiert wernde.
Update II: Vielleicht gefällt ja dem ein oder anderen diese Version besser:
// Prüft, ob Eingabe Zeilenumbrüche enthält
function has_no_newlines($text)
{
return preg_match(“/(%0A|%0D|\\n+|\\r+)/i”, $text) == 0;
}
// Prüft, ob mehrzeilige Textangaben E-Mail-Headerangaben enthalten
function has_no_emailheaders($text)
{
return preg_match(“/(%0A|%0D|\\n+|\\r+)(content-type:|to:|cc:|bcc:)/i”, $text) == 0;
}
// Prüft, ob Angabe eine korrekt formatierte Mailadresse ist
function is_valid_email($email)
{
return preg_match(“/^[^@]+@.+\.\D{2,6}$/”, $email);
}
//Beispielanwendung
if (!has_no_newlines($email) || !has_no_emailheaders($text))
die (“Die Eingabe wurde durch den Spam-Filter beanstandet und nicht entgegen genommen.”);
if (!is_valid_email($email))
die (“Die eingegebene E-Mail-Adresse scheint ungültig zu sein”);
About this entry
You’re currently reading “Spam bei PHP-Kontaktformular,” an entry on Online Marketing 4 U
- Published:
- 08.31.07 / 7am
- Category:
- PHP
No comments
Jump to comment form | comments rss [?] | trackback uri [?]