Hallo!
Bin als Laie zum "Webmaster" meiner Schule "ernannt" worden und habe eigentlich soweit alles gut gemeistert.
Bis dato funktionierte auch das Kontaktformular ohne Probleme; gestern sprach mich mein Vorgesetzer darauf an, dass keine Mails mehr die Schule via dem Formular auf der HP erreichen.
Da ich das ganze Script aber auch nur aus anderen Scripten zusammen"gebaut" habe, bitte ich euch um Durchsicht und vielleicht Ver- bzw. Ausbesserungen im Code, so dass es dann auch wieder funktioniert!
Danke und LG
Bin als Laie zum "Webmaster" meiner Schule "ernannt" worden und habe eigentlich soweit alles gut gemeistert.
Bis dato funktionierte auch das Kontaktformular ohne Probleme; gestern sprach mich mein Vorgesetzer darauf an, dass keine Mails mehr die Schule via dem Formular auf der HP erreichen.
Da ich das ganze Script aber auch nur aus anderen Scripten zusammen"gebaut" habe, bitte ich euch um Durchsicht und vielleicht Ver- bzw. Ausbesserungen im Code, so dass es dann auch wieder funktioniert!
Danke und LG
PHP:
<?php
header( 'Content-Type: text/html; charset=utf-8' );
// Empfänger Email
$empfaenger = '[email protected]';
// Prüfen ob das Formular abgeschickt wurde
if (isset($_POST['senden']))
{
// Funktionen einbinden
include( 'funktionen.inc.php' );
// Benutzereingaben bereinigen und auf Injection prüfen
cleanInput();
// Name prüfen
$name = checkName( $_POST['name'] );
// Email prüfen
$email = checkEmail( $_POST['email'] );
// Betreff und Nachricht prüfen
if ((strlen( $_POST['betreff'] ) < 5) || (strlen( $_POST['nachricht'] ) < 5))
{
die( 'Bitte füllen Sie alle Felder aus!' );
}
else
{
$betreff = $_POST['betreff'];
$nachricht = $_POST['nachricht'];
}
// --------------------------------------------------------------------------------
// Wurde das Script bisher nicht abgebrochen, wurde das Formular korrekt ausgefüllt
// --------------------------------------------------------------------------------
// Template mit dem Mailbody laden und für den Versand vorbereiten
$mailbody = file_get_contents( 'mailbody.txt' );
// Platzhalter mit den Benutzereingaben ersetzen
$mailbody = str_replace( '###NAME###', htmlspecialchars( $name ), $mailbody );
$mailbody = str_replace( '###EMAIL###', $email, $mailbody );
$mailbody = str_replace( '###NACHRICHT###', nl2br( htmlspecialchars( $nachricht ) ), $mailbody );
// Mail Header erstellen
$mailheader = "From: HP Kontaktformuar<noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "Reply-To: " .$name. "<" .$email. ">\r\n";
$mailheader .= "Return-Path: noreply@" .$_SERVER['SERVER_NAME']. "\r\n";
$mailheader .= "MIME-Version: 1.0\r\n";
$mailheader .= "Content-Type: text/html; charset=UTF-8\r\n";
$mailheader .= "Content-Transfer-Encoding: 8bit\r\n";
$mailheader .= "Message-ID: <" .time(). " noreply@" .$_SERVER['SERVER_NAME']. ">\r\n";
$mailheader .= "X-Mailer: PHP v" .phpversion(). "\r\n\r\n";
// Email versenden
if (@mail( $empfaenger , htmlspecialchars( $betreff ), $mailbody, $mailheader ))
{
// Bei erfolgreichem Versand Danke-Seite anzeigen
echo Danke, Ihre Nachricht wurde verschickt!rn Die Administration der ...;
}
}
?>
PHP:
<?php
header( 'Content-Type: text/html; charset=utf-8' );
// Benutzereingabe bereinigen (trimmen, Slashes entfernen)
function cleanInput()
{
checkInjection();
if (get_magic_quotes_gpc()) $_POST = array_map( 'stripslashes', $_POST );
$_POST = array_map( 'trim', $_POST );
}
// Name auf Gültigkeit prüfen
function checkName( $name )
{
$muster_name = '/^([a-zA-ZäÄöÖüÜß\xc0-\xc2\xc8-\xcf\xd2-\xd4\xd9-\xdb\xe0-\xe2\xe8-\xef\xf2-\xf4\xf9-\xfb\x9f\xff\.\'\-_]?(\s)?)+$/';
if (preg_match( $muster_name, $name ))
{
return $name;
}
else
{
die( 'Der eingegebene Name enthält nicht erlaubte Zeichen!' );
}
}
// Email auf korrektes Format prüfen
function checkEmail( $email )
{
$nonascii = "\x80-\xff";
$nqtext = "[^\\\\$nonascii\015\012\"]";
$qchar = "\\\\[^$nonascii]";
$normuser = '[a-zA-Z0-9][a-zA-Z0-9_.-]*';
$quotedstring = "\"(?:$nqtext|$qchar)+\"";
$user_part = "(?:$normuser|$quotedstring)";
$dom_mainpart = '[a-zA-Z0-9][a-zA-Z0-9._-]*\\.';
$dom_subpart = '(?:[a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*';
$dom_tldpart = '[a-zA-Z]{2,5}';
$domain_part = "$dom_subpart$dom_mainpart$dom_tldpart";
$pattern = "$user_part\@$domain_part";
$muster_email = "/^{$pattern}$/";
if (preg_match( $muster_email, $email ))
{
return $email;
}
else
{
die( 'Die eingegebene Email-Adresse hat kein gültiges Format!' );
}
}
// Benutzereingaben auf mögliche Injection prüfen
function checkInjection()
{
$email_injection = array( 'bcc:', 'boundary', 'cc:', 'content-transfer-encoding:', 'content-type:', 'mime-version:', 'subject:' );
// Auf potentielle Email Injections prüfen
foreach ($email_injection as $injection)
{
foreach ($_POST as $feld => $inhalt)
{
if (preg_match( "/{$injection}/i", $inhalt ))
{
header( 'location: http://www.google.com/search?hl=en&q=how+to+become+a+better+hacker' );
exit;
}
}
}
return true;
}
?>