Der peter: Ein sicherer Formmailer

Beitrag lesen

Hallo zusammen,
vielen Dank für die tollen Tipps. Das mit dem Ersetzten der Platzhalter war wirklich blöd von mir... *schäm*.
Aber ich habe den Code geändert und unten wieder angehängt. Ist er in dieser Form nun sicher?

Vielen Dank schon mal im Voraus!
Der Peter

===CODE===

<?php  
// Erfassung der übermittelten Variablen in "Rohvatiablen"  
$emailroh = $_GET['eMail'];  
$nameroh =  $_GET['Name'];  
$nachrichtroh = $_GET['Nachricht'];  
  
// "Verbotene" Zeichen  
$verboten = array("<", ">","\n", "\r",chr(34), chr(39));  
$neuezeichen = array("&lt;", "&gt;", "", "", "&quot;", "&quot;");  
$verbotentext = array("<", ">", chr(34), chr(39));  
$neuezeichentext = arry("&lt;", "&gt;", "&quot;", "&quot;");  
$email = str_replace($verboten, $neuezeichen, $emailroh);  
$name = str_replace($verboten, $neuezeichen, $nameroh);  
$inhalt = str_replace($verbotentext, $neuezeichentext, $nachrichtroh);  
  
// Empfänger definieren  
$empfaenger  = 'mail@example.org';  
  
// Betreff definiert  
$betreff = 'Ein Besucher hat das Kontaktformular auf der Webseite ausgefüllt';  
  
// Nachrichtentemplate definieren  
$nachricht = <<<EOT  
<html>  
<head>  
<title>Ein Besucher hat das Kontaktformular ausgefüllt</title>  
<style type="text/css">  
td { padding: 5px; border-style: solid; border-color: black; width: 250px; }  
th { padding: 5px; border-style: none; text-align: left; }  
table { border-style:none; }  
</style>  
</head>  
<body>  
<p>Sehr geehrter Admin,<br>&nbsp;<br>die folgende Nachricht wurde am *Datum* um *Zeit* mit dem Kontaktformular verfasst. Der Verfasser hat folgende IP:&nbsp;<b>*IP*</b></p>  
<p><i>Die Daten der einzelnen Felder:</i><br>  
<table rules="rows">  
<tr>  
<th>Name:</th>  
<td >*Name*</td>  
</tr>  
<tr>  
<th>eMail:</th>  
<td><a href="mailto:*eMail*">*eMail*</a></td>  
</tr>  
<tr>  
<th>Nachricht:</th>  
<td>*Nachricht*</td>  
</tr>  
</table>  
</p>  
<p><br>Mit freundlichen Grüßen<br><i>Der Formmailer</i></p>  
</body>  
</html>  
EOT;  
  
// für HTML-E-Mails muss der 'Content-type'-Header gesetzt werden  
$header  = 'MIME-Version: 1.0' . "\r\n";  
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";  
  
// zusätzliche Header  
$header .= 'To: Max Mustermann <mail@example.org>' . "\r\n";  
$header .= 'From: Formmailer <noreply@meine-domain.de>' . "\r\n";  
$header .= 'Cc: kollege@kollege.de' . "\r\n";  
  
// Standard-Klauseln aus dem eMail-Template durch geprüfte Nachrichtenelemente ersetzten  
$ende = str_replace("*eMail*", $email, $nachricht);  
$ende = str_replace("*Name*", $name, $ende);  
$ende = str_replace("*Nachricht*", $inhalt, $ende);  
$ende = str_replace("*IP*", $_SERVER["REMOTE_ADDR"], $ende);  
$ende = str_replace("*Datum*", date("j.m.Y"), $ende);  
$ende = str_replace("*Zeit*", date("H:i"), $ende);  
  
// E-Mail senden  
$erfolg = mail($empfaenger, $betreff, $ende, $header);  
  
// Wenn es einen Fehler gibt, wird eine Fehlermeldung angezeigt  
if($erfolg == TRUE)  
{ Header("Location: http://meine-domain.de/danke.html"); }  
else  
{  echo "Fehler beim Versenden der eMail"; }  
?>