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("<", "<", $emailroh);
$emailroh = str_replace("\n", "", $emailroh);
$emailroh = str_replace("\r", "", $emailroh);
$emailroh = str_replace(">", ">", $emailroh);
$emailroh = str_replace(chr(34), """, $emailroh);
$emailroh = str_replace("or", "-oder-;", $emailroh);
$emailroh = str_replace(chr(39), """, $emailroh);
$nameroh = str_replace("<", "<", $nameroh);
$nameroh = str_replace("\n", "", $nameroh);
$nameroh = str_replace("\r", "", $nameroh);
$nameroh = str_replace(">", ">", $nameroh);
$nameroh = str_replace(chr(34), """, $nameroh);
$nameroh = str_replace("or", "-oder-;", $nameroh);
$nameroh = str_replace(chr(39), """, $nameroh);
$nachrichtroh = str_replace("<", "<", $nachrichtroh);
$nachrichtroh = str_replace(">", ">", $nachrichtroh);
$nachrichtroh = str_replace(chr(34), """, $nachrichtroh);
$nachrichtroh = str_replace("or", "-oder-;", $nachrichtroh);
$nachrichtroh = str_replace(chr(39), """, $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> <br>die folgende Nachricht wurde am *Datum* um *Zeit* mit dem Kontaktformular verfasst. Der Verfasser hat folgende IP: <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