Page 1 of 1

php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-03 20:35
by tomotom
Ich habe mit folgendem php-script einen Mailer laufen. Ein Provider hat dieses script allerdings kürzlich gesperrt, da er behauptet es sein eine Spamschleuder.
Kann das jemand bestätigen und den angeblichen Fehler im script entdecken und benennen bzw. einen Tipp für einen Spamsicheren Mailer?

Code: Select all

<?php
define("MAILTO", "info@xyz.de");


if (isset($_POST["form_submitted"]))
 {
  // übergebene Variablen ermitteln:
  $name = $_POST['name'];
  $email = $_POST['email'];
  $subject = $_POST['subject'];
  $text = $_POST['text'];

  // Überprüfungen der Daten:
  unset($errors);
  if ($name == "") $errors[] = "Sie haben keinen Namen  eingegeben !";
  if ($email == "") $errors[] = "Sie haben keine Email Adresse  eingegeben !";
  if ($email != "" and !preg_match("/^[^@]+@.+.D{2,5}$/", $email)) $errors[1] = "Ihre e-Mail Adresse ist nicht richtig !";
  if ($text == "") $errors[] = "Sie haben keine Text eingegeben !";


  if (empty($errors))
   {
    if ($name != "") $mail_name=$name; else $mail_name="unbekannt";
    if ($subject != "") $mail_subject = $subject; else $mail_subject = "kein Betreff";
    if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
    $ip = $_SERVER["REMOTE_ADDR"];
    $text = stripslashes($text);
    $header= "From: ".$mail_name." <".$mail_email.">n";
    $header .= "Reply-To: ".$mail_name." <".$mail_email.">n";
    $header .= "X-Mailer: PHP/" . phpversion(). "n";
    $header .= "X-Sender-IP: $ipn";
    $header .= "Content-Type: text/plain";
    if (mail(MAILTO, $mail_subject, $text, $header)) { $sent = true; } else { $errors[] = "Ihre e-Mail konnte nicht versendet werden - bitte nochmal versuchen"; }
   }
 }

if (empty($sent))
 {
  if(isset($errors))
   {
    ?><ul class="fehler"><?php foreach($errors as $f) { ?><li><?php echo $f; ?></li><?php } ?></ul><?php
   }
$subject= " ...";
...

Re: php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-03 20:49
by r. u. serious
Google doch einfach nach Mail + injection. z.B.:
http://www.securephpwiki.com/index.php/Email_Injection

Man kann (unter anderem) über $_POST['name'] mittels Zeilenumbruch weitere Header einfügen. Beispw. für CC/BCC usw. Auch über die E-Mail-Adresse denn [^@]+ matched eine beliebig lange Zeichenkette mit allen Zeichen außer @; und somit ebenfalls Zeilenumbrüche usw.

Wieso man nun ausgerechnet bei so einem Standardanwendungsfall unbedingt das Rad neu erfinden will, insbesondere wenn man sich vorher nicht ausreichend mit der Materie bekannt gemacht hat ist mir ehrlich gesagt ein wenig schleierhaft...

Re: php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-03 21:00
by tomotom
R. U. Serious wrote:Google doch einfach nach Mail + injection. z.B.:
http://www.securephpwiki.com/index.php/Email_Injection

Man kann (unter anderem) über $_POST['name'] mittels Zeilenumbruch weitere Header einfügen. Beispw. für CC/BCC usw. Auch über die E-Mail-Adresse denn [^@]+ matched eine beliebig lange Zeichenkette mit allen Zeichen außer @; und somit ebenfalls Zeilenumbrüche usw.

Wieso man nun ausgerechnet bei so einem Standardanwendungsfall unbedingt das Rad neu erfinden will, insbesondere wenn man sich vorher nicht ausreichend mit der Materie bekannt gemacht hat ist mir ehrlich gesagt ein wenig schleierhaft...
Danke für Deine schnelle Antwort. Dieses script lief seit Jahren. Ich hatte es empfohlen bekommen etwas abgeändert und somit das Rad nicht neu erfunden, da ich das auch nicht beabsichtigt habe. Allerdings war mir die header Problematik nicht bewußt.

Die auf Deinem Link empfohlenen Maßnahmen, um dieses Problem zu beheben setzen einen root Zugrif voraus. Ich suche nach einem sicheren php-Mailer.

Ist es richtig, dass das Unterbinden von Zeilenumbrüchen in Variablen eine wirksame Methode bei mailern gegen spam ist?

Re: php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-03 22:35
by miker
Ich suche nach einem sicheren php-Mailer.
Schau dir mal phpMailer an.

Re: php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-03 23:06
by Joe User
tomotom wrote:Ist es richtig, dass das Unterbinden von Zeilenumbrüchen in Variablen eine wirksame Methode bei mailern gegen spam ist?
Nein, es muss noch auf viele andere Dinge geachtet werden...

Re: php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-06 01:01
by tomotom
Ich habe die Eingabeüberprüfung im script wie folgt erweitert.
1. Reicht das?

Code: Select all

//error_reporting(E_ALL);
setlocale(LC_ALL, 'de_DE');
define("MAILTO", "info@blabla.de");


if (isset($_POST["form_submitted"]))
 {
  // übergebene Variablen ermitteln:
  $name = $_POST['name'];
  $email = $_POST['email'];
  $subject = $_POST['subject'];
  $text = $_POST['text'];

  // Überprüfungen der Daten:
  unset($errors);
if ($name == "") $errors[] = "Sie haben keinen Namen  eingegeben!";
if ($name != "" and !preg_match("/^[[:print:]]{3,}$/", $name)) $errors[1] = "Fehler bei der Namenseingabe";
//if ($email == "") $errors[] = "Sie haben keine Email Adresse  eingegeben !";
//  if ($email != "" and !preg_match("/^[^@]+@.+.D{2,5}$/", $email)) $errors[1] = "Ihre e-Mail Adresse ist nicht richtig !";
 if ($email != "" and !preg_match("/^ [w.!#%&*/=?^`{|}~+-]{1,64}@ [[:alnum:].-]{1,255} . [a-z]{2,6} $/xi", $email)) $errors[2] = "Ihre e-Mail Adresse ist nicht richtig !";

//if ($subject == "") $errors[] = "Sie haben keine Text eingegeben !";
if ($subject == "") $errors[3] = "Sie haben keine Betreff eingegeben!";
 if ($subject != "" and !preg_match("/^[[:print:]]{3,}$/", $subject)) $errors[4] = "Fehler bei der Betreffeingabe";

//if ($text == "") $errors[] = "Sie haben keine Text eingegeben !";
if ($text == "") $errors[5] = "Sie haben keine Text eingegeben!";
 if ($text != "" and !preg_match("/^[[:print:][:space:]]{10,}$/", $text)) $errors[6] = "Fehler bei der Texteingabe";

...
//prüft Mailhost (MX)
//nur unter Unixen, keine Umlautdomains (sonst Zeile streichen)
if(!getmxrr(substr(strstr($_POST['email'], '@'), 1), $mxhosts))
   die("<ul class='fehler'><li>Konnte keine gültige Domain für " . $_POST['email'] . " finden!</li></ul><br>
<a class='email' href='javascript:history.back();'>zurück</a>");


...

Re: php-Mailer als Spam-Schleuder - korrigiert - ok so?

Posted: 2007-01-08 17:08
by tomotom
MikeR wrote:
Ich suche nach einem sicheren php-Mailer.
Schau dir mal phpMailer an.
Prüft der phpmailer die Eingaben automatisch?