Der Peter: Ein sicherer Formmailer

Beitrag lesen

Hallo zusammen,
ich möchte auf meiner Website ein Kontaktformular anbieten. Daher brauch ich auch ein Mailingskript.
Mein Skript sieht so aus:

<?php  
// Erfassung der übermittelten Variablen in "Rohvatiablen"  
$emailroh = $_GET['eMail'];  
$nameroh =  $_GET['Name'];  
$nachrichtroh = $_GET['Nachricht'];  
  
// "Verbotene" Zeichen werden manuell(!) ausgefiltert  
$emailroh = str_replace("<", "&lt;", $emailroh);  
$emailroh = str_replace("\n", "", $emailroh);  
$emailroh = str_replace("\r", "", $emailroh);  
$emailroh = str_replace(">", "&gt;", $emailroh);  
$emailroh = str_replace(chr(34), "&quot;", $emailroh);  
$emailroh = str_replace("or", "-oder-;", $emailroh);  
$emailroh = str_replace(chr(39), "&quot;", $emailroh);  
$nameroh = str_replace("<", "&lt;", $nameroh);  
$nameroh = str_replace("\n", "", $nameroh);  
$nameroh = str_replace("\r", "", $nameroh);  
$nameroh = str_replace(">", "&gt;", $nameroh);  
$nameroh = str_replace(chr(34), "&quot;", $nameroh);  
$nameroh = str_replace("or", "-oder-;", $nameroh);  
$nameroh = str_replace(chr(39), "&quot;", $nameroh);  
$nachrichtroh = str_replace("<", "&lt;", $nachrichtroh);  
$nachrichtroh = str_replace(">", "&gt;", $nachrichtroh);  
$nachrichtroh = str_replace(chr(34), "&quot;", $nachrichtroh);  
$nachrichtroh = str_replace("or", "-oder-;", $nachrichtroh);  
$nachrichtroh = str_replace(chr(39), "&quot;", $nachrichtroh);  
$nachrichtroh = str_replace("\n", "", $nachrichtroh);  
$nachrichtroh = str_replace("\r", "", $nachrichtroh);  
  
  
// Sperre: Jede IP kann nur 1 Mail pro Tag senden  
  
$host =  $_SERVER["REMOTE_ADDR"];  
$eintragung = $host;  
$eintragung .= "|";  
$eintragung .=   date("j.m.Y");  
$dateiname = "mailsperre24h.txt";  
$securitydatei = file_get_contents($dateiname);  
  
$pos = strpos($securitydatei, $eintragung);  
  
if ($pos === false) {  
// IP hat heute(!) noch keine eMail verschickt!  
  
///////////////////////////////////////////////  
// Begin Mail  
  
// Empfänger definieren  
$empfaenger  = 'mail@example.org';  
  
// Betreff definiert  
$betreff = 'Ein Besucher hat das Kontaktformular auf der Webseite ausgefüllt';  
  
// Nachrichtentemplate definieren  
$nachricht = '  
<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>  
';  
  
// 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@meinedomain.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*", $_GET['eMail'], $nachricht);  
$ende = str_replace("*Name*", $_GET['Name'], $ende);  
$ende = str_replace("*Name*",nl2br( $_GET['Nachricht']), $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  
mail($empfaenger, $betreff,$ende, $header);  
  
// In Sperr-Datei eintragen  
// Datei öffnen,  
// wenn nicht vorhanden dann wird die Datei erstellt  
$handler = fOpen($dateiname , "a+");  
// Dateiinhalt in die Datei schreiben  
fWrite($handler , $eintragung);  
fClose($handler); // Datei schließen  
// '''''''''''''''''''''''''''''''''''''''''''''''  
// Ende eMail-Script  
  
} else {  
  // Heute schon verschickt  
  echo "HACK!";  
}  
  
Header("Location: http://meinedomain.de/danke.html");  
?>

Meine Frage: Funktioniert das so und ist das Skript auch "hacksicher"?

Viele Grüße
Peter