Hallo,
leider habe ich mich schon lange nicht mehr mit PHP beschäftigt. Aus
diesem Grund bin ich auch sehr aus der Materie heraus und ich hoffe
jemand vom Board kann mir helfen mein Script auf den neuesten
Stand zu bringen und anzupassen.
Bisher lief es immer einwandfrei, doch bei einem anderen Provider
funktionierte es nicht, wenn man dem Formular keine Mail-Adresse
mitgegeben hat. Dort hat es dann einen 404-Fehler gegeben.
Wenn ich hier ein anderes Posting und die Antwort des Providers richtig
interpretiere hat es mit der E-Mailinjection zu tun.
Antwort Provider:
Anbei findet ihr mein PHP-Script für die Mailabfrage.
Ich hoffe jemand von euch kann mir weiter helfen...
Mein Quelltext:
leider habe ich mich schon lange nicht mehr mit PHP beschäftigt. Aus
diesem Grund bin ich auch sehr aus der Materie heraus und ich hoffe
jemand vom Board kann mir helfen mein Script auf den neuesten
Stand zu bringen und anzupassen.
Bisher lief es immer einwandfrei, doch bei einem anderen Provider
funktionierte es nicht, wenn man dem Formular keine Mail-Adresse
mitgegeben hat. Dort hat es dann einen 404-Fehler gegeben.
Wenn ich hier ein anderes Posting und die Antwort des Providers richtig
interpretiere hat es mit der E-Mailinjection zu tun.
Antwort Provider:
In der Datei /.htaccess legen Sie eine Fehlerseite für den
HTTP-Errorcode 500 fest auf
http://www.testurl.de/500.html -
diese Datei existiert jedoch nicht und bringt folglich 404.
(Desweiteren beachten Sie bitte, dass die für 401
hier festgelegte URL so nicht gültig ist - vgl. Link )
Der Statuscode 500 wird generiert,
wenn die "From:" Angabe innerhalb der E-Mail keinen gültigen Wert
(eine E-Mailadresse)
enthält und deshalb das E-Mailsubsystem die so übergebene E-Mail ablehnt.
Dieser Check ist Teil eines von uns entwickelten Mechanismuses,
um unsere Kunden vor den Auswirkungen und Folgen
von E-Mailinjection-Angriffen
(vgl. Link )
zu schützen, gegen welches Ihr Script auch anfällig ist.
Sorgen Sie im ersten Schritt dafür dass sämtliche steuernden
E-Mail-Headerfelder (To, From, Reply-To etc.) korrekt beschickt werden.
Verwenden Sie beispielsweise als Absender,
wenn der Besucher keine E-Mailadresse angibt,
eine eigene wie z.B. no-reply@.....
In einem weiteren Schritt sollten sie
Plausibilitäts-Prüfungen aller im E-Mail-Header verwendeten Variblen
(name, vorname etc.) implementieren,
um somit Einfalltore für E-Mailinjection-Angriffe zu schließen.
HTTP-Errorcode 500 fest auf
http://www.testurl.de/500.html -
diese Datei existiert jedoch nicht und bringt folglich 404.
(Desweiteren beachten Sie bitte, dass die für 401
hier festgelegte URL so nicht gültig ist - vgl. Link )
Der Statuscode 500 wird generiert,
wenn die "From:" Angabe innerhalb der E-Mail keinen gültigen Wert
(eine E-Mailadresse)
enthält und deshalb das E-Mailsubsystem die so übergebene E-Mail ablehnt.
Dieser Check ist Teil eines von uns entwickelten Mechanismuses,
um unsere Kunden vor den Auswirkungen und Folgen
von E-Mailinjection-Angriffen
(vgl. Link )
zu schützen, gegen welches Ihr Script auch anfällig ist.
Sorgen Sie im ersten Schritt dafür dass sämtliche steuernden
E-Mail-Headerfelder (To, From, Reply-To etc.) korrekt beschickt werden.
Verwenden Sie beispielsweise als Absender,
wenn der Besucher keine E-Mailadresse angibt,
eine eigene wie z.B. no-reply@.....
In einem weiteren Schritt sollten sie
Plausibilitäts-Prüfungen aller im E-Mail-Header verwendeten Variblen
(name, vorname etc.) implementieren,
um somit Einfalltore für E-Mailinjection-Angriffe zu schließen.
Ich hoffe jemand von euch kann mir weiter helfen...
Mein Quelltext:
PHP-Code:
<?
// Angaben anpassen
$to_email='mail@testurl.de'; //Die Zieladresse
$mail_success='./versendet.html'; // Pfad zu einer Bestätigungsseite,
wenn die Mail erfolgreich versendet wurde.
$error=false;
// Hier werden alle Pflichtfelder festgelegt.
Diese Felder dürfen nicht leer bleiben.
$pflicht[]='name';
$pflicht[]='telefon';
$pflicht[]='nachricht';
$absendezeit = date('h-i-s, j-m-y');
if($_POST)
{
// prüfen, ob eines der Pflichtfelder leer ist
foreach($pflicht AS $key => $result)
{
if(!$_POST[$result])
{
${$pflicht[$key].'_error'}='Bitte ausfüllen';
$error=true;
}
}
// Prüfung der PLZ
$pattern_plz="/^[0-9]{5}$/";
if(!preg_match($pattern_plz,$_POST['plz']) && $_POST['plz']!='')
{
$plz_error='falsches Plz Format';
$error=true;
}
// Prüfung der Telefonnummer
$pattern_tel="/^[0-9-()\/+.]*$/";
if(!preg_match($pattern_tel,$_POST['telefon']) && $_POST
['telefon']!='')
{
$telefon_error='falsches Format';
$error=true;
}
// Prüfung der Faxnummer
$pattern_fax="/^[0-9-()\/+.]*$/";
if(!preg_match($pattern_fax,$_POST['telefax']) && $_POST
['telefax']!='')
{
$telefax_error=' falsches
Format';
$error=true;
}
// Prüfung der E-Mail
if($_POST['email']!='')
{
function checkmail($email)
{
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]
([-.]?[0-9a-z])*\\.[a-z]{2,4}$", $email, $check))
{
if(getmxrr(substr(strstr($check
[0], '@'), 1), $validate_email_temp))
{
return true;
}
if(checkdnsrr(substr(strstr($check
[0], '@'), 1),"ANY"))
{
return true;
}
}
return false;
}
if(!checkmail($_POST['email']))
{
$email_error=' falsches Format';
$error=true;
}
}
// Wenn keine Fehler vorhanden, dann kann die Mail versendet
werden
if(!$error)
{
$from_name="{$_POST['vorname']} {$_POST
['name']}";
$from_email=$_POST['email'];
$headers = "X-Sender: $from_name<$from_email>\n";
$headers .= "X-Mailer: $from_name powered by
SPMan\n";
$headers .= "Return-Path: <$from_email>\n";
$headers .= "Date: ". date('r'). "\n";
$headers .= "From: $from_email \n";
$headers .= "Sender: $from_email\n";
$headers .= "Reply-To: $from_email\n";
$headers .= "Organization: testurl.de\n";
$headers .= "X-MSMail-Priority: Normal\n";
$headers .= "Content-Type: text/plain\n";
$comment = $from_name.' aus '.$_POST
['plz'].' '.$_POST['ort'].' hat folgende Anfrage gesendet:'."\n\n";
$comment .= "Absendezeit: ".$absendezeit. "\n\n";
$comment .= "Anrede: ";
$comment .= $_POST['anrede']."\n";
$comment .= "Vorname: ";
$comment .= $_POST['vorname']."\n";
$comment .= "Name: ";
$comment .= $_POST['name']."\n";
$comment .= "Straße: ";
$comment .= $_POST['straße']."\n";
$comment .= "Plz: ";
$comment .= $_POST['plz']." ";
$comment .= "Ort: ";
$comment .= $_POST['ort']."\n";
$comment .= "Telefon: ";
$comment .= $_POST['telefon']."\n";
$comment .= "Telefax: ";
$comment .= $_POST['telefax']."\n";
$comment .= "E-Mail: ";
$comment .= $_POST['email']."\n";
$comment .= "Betreff: ";
$comment .= $_POST['betreff']."\n\n";
$comment .= "Nachricht:\n";
$comment .= $_POST['nachricht'];
// Inhalte für den Besucher
$comment2 = "Herzlichen Dank für Ihr Interesse an
TestURL.\n\nDie nachfolgende Nachricht wurde erfolgreich an uns
zugestellt.\n\nIhre Nachricht:\n";
$comment2 .= $_POST['nachricht']."\n\n";
$comment2 .= "Wir werden uns schnellstmöglich mit Ihnen in
Verbindung setzen.\n";
$comment2 .= "Ihr TestURL Team\n\n";
$comment2 .= "==========================================
=============\n\n";
$comment2 .= "Manfred Mustermann\n";
$comment2 .= "Muetserstr. 1\n";
$comment2 .= "00815 Musterhausen\n\n";
$comment2 .= "Telefon: xxxx - xxxxxx\n";
$comment2 .= "Telefax: xxxx - xxxxxx\n";
$comment2 .= "Mobil: xxxx - xxxxxx\n";
$comment2 .= "E-Mail: mail@testurl.de\n";
$comment2 .= "Internet: www.testurl.de";
if(mail($to_email,$_POST
['betreff'],$comment,$headers))
{
@mail($from_email,$_POST
['betreff'],$comment2,$headers);
header("LOCATION: $mail_success");
}
}
}
?>
Kommentar