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

Bash, Shell, PHP, Python, Perl, CGI
tomotom
Posts: 330
Joined: 2006-09-22 13:37

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

Post by tomotom » 2007-01-03 20:35

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= " ...";
...
Last edited by tomotom on 2007-01-08 12:30, edited 2 times in total.

r. u. serious
RSAC
Posts: 93
Joined: 2006-06-10 14:17

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

Post by r. u. serious » 2007-01-03 20:49

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...

tomotom
Posts: 330
Joined: 2006-09-22 13:37

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

Post by tomotom » 2007-01-03 21:00

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?

miker
Posts: 64
Joined: 2005-03-26 13:33
Location: Wildeshausen

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

Post by miker » 2007-01-03 22:35

Ich suche nach einem sicheren php-Mailer.
Schau dir mal phpMailer an.

User avatar
Joe User
Project Manager
Project Manager
Posts: 11616
Joined: 2003-02-27 01:00
Location: Hamburg

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

Post by Joe User » 2007-01-03 23:06

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...
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.

tomotom
Posts: 330
Joined: 2006-09-22 13:37

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

Post by tomotom » 2007-01-06 01:01

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>");


...

tomotom
Posts: 330
Joined: 2006-09-22 13:37

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

Post by tomotom » 2007-01-08 17:08

MikeR wrote:
Ich suche nach einem sicheren php-Mailer.
Schau dir mal phpMailer an.
Prüft der phpmailer die Eingaben automatisch?