2009-05-05 14 views
3

Was wird heutzutage als beste Methode angesehen, Daten aus einem PHP-E-Mail-Formular zu bereinigen?Was ist die beste Vorgehensweise, um E-Mail-Injection-Angriffe in PHP zu verhindern?

ich zur Zeit so etwas wie dieses bin mit ...

$msg = $_POST['msg']; 
$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); 
$name = $_POST['name']; 

$subject = "Message from the MY_WEBSITE website e-mail system"; 
$message = "From: " . $name . "\n"; 
$message .= "Email: " . $email . "\n\n"; 
$message .= $msg; 
$headers = "From: " . $email . "\r\n" . 
      "Reply-To: " . $email . "\r\n" . 
      "X-Mailer: PHP/" . phpversion(); 

$mailSuccess = mail("[email protected]", $subject, $message, $headers); 

Ist es ausreichend Schutz der E-Mail-Feld auf diese Weise einfach zu filtern? Kann/sollte ich das Skript effektiver schützen, um gegen Spammer zu schützen?

Vielen Dank im Voraus!

[EDIT] Klärung, da die Antworten bisher darauf hindeuten, dass ich mich nicht gut erklärt habe.

Ich bin nicht hauptsächlich besorgt über Spambots, die dieses Skript bekommen, aber mit jedem, der es verwendet, um illegale E-Mails an eine andere Adresse als [email protected] zu senden. Dies könnte einen Bot enthalten, könnte aber auch ein Mensch sein, der einen CAPTCHA-Test besiegt.

Was ich suchen ist PHP, die sicherstellen, dass die E-Mail von der mail() Methode nicht entführt wird. Dies ist wahrscheinlich eine Regex oder Filter oder ähnliches, die einfach bestimmte Zeichen entfernt. . Nochmals vielen Dank [/ EDIT]

Antwort

2

Ich würde dies tun:

  • Verwenden CAPTCHA;
  • Senden fehlgeschlagen, wenn das Thema oder der Körper irgendwelche HTML-Tags enthält. Hinweis: Ich habe nicht gesagt, strippe sie aus. Senden Sie die E-Mail einfach nicht und geben Sie dem Benutzer eine Fehlermeldung, warum. Es macht keinen Sinn, sich selbst eine gefilterte Spam-Nachricht zu schicken. Schick es einfach nicht;
  • alle hohen oder niedrigen Zeichen entfernen (filter_vars() kann dies tun);
  • begrenzen Sie die Nachricht auf, sagen wir, 4000 Zeichen (oder eine andere geeignete Grenze, die Sie auswählen);
  • schlägt fehl, wenn die Nachricht eine URL enthält, die nicht auf die aktuelle Site verweist;
  • verwenden Sie einige der Techniken aus How do you stop scripters from slamming your website hundreds of times a second?, um sicherzustellen, dass ein Mensch die Nachricht sendet.
+0

> Best Practice (imho) ist nicht E-Mails an E-Mail-Adressen aus einem HTML-Formular zu senden. Nur um in diesem Punkt klar zu sein, der angegebene Code nicht - oder zumindest sollte nicht - E-Mails an andere als die Website-Besitzer senden. Diese Adresse ist in PHP festgeschrieben ([email protected]). Was ich sicherstellen will, ist, dass niemand das Skript entführt, wie bei der klassischen \ ncc: [email protected], um andere zu spammen. Danke für den Link! : c) – Wikiup

+0

Sorry, du hast Recht: Ich habe es falsch gelesen. Jetzt behoben. – cletus

Verwandte Themen