php scripte webmailer missbrauch vermeiden ?
Posted: 2004-07-06 23:36
ich frage mich wie ich am besten die scripte die auf meinem server sicher machen könnte Kunden die ein Kontaktformular nutzen geben in der regel in den scripten an das die mails an sie versendt werden aber es soll ja eine möglichkeit geben dieses zu umgen und die scripte für spammails zu gebrauchen.
Jetzt frage ich mich wie ich am besten mich und die kunden davor schütze das die scripte dazu missbraucht werden.
ich will den kunden ja nicht unbeding ein bestimmtes script auf drängen !
weiss jemand rat ?
qmail is am laufen auf dem server.
hier ein beispiel für ein script was mich doch dazu bewegt hat mich damit mal was genauer zu beschäftigen
Jetzt frage ich mich wie ich am besten mich und die kunden davor schütze das die scripte dazu missbraucht werden.
ich will den kunden ja nicht unbeding ein bestimmtes script auf drängen !
weiss jemand rat ?
qmail is am laufen auf dem server.
hier ein beispiel für ein script was mich doch dazu bewegt hat mich damit mal was genauer zu beschäftigen
Code: Select all
<?php
# Adresse, an die die Formulardaten gesendet werden sollen:
$mailto = "deine@emailadresse.de";
# Maximale Größe des Attachments in Bytes:
$max_attach_size = 500000;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<style type="text/css">
<!--
body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; color: #000000; background: #FF9900; margin: 20px; padding: 0px; border: 0px; }
.caution { color: red; font-weight: bold; }
-->
</style>
</head>
<body>
<?php
if (isset($_POST["form_submitted"]))
{
// übergebene Variablen ermitteln:
$name = $_POST['name'];
$email = $_POST['email'];
$subject = $_POST['subject'];
$text = $_POST['text'];
// Ã?berprüfungen der Daten:
unset($errors);
if ($email != "" and !preg_match("/^[^@]+@.+.D{2,5}$/", $email)) $errors[] = "die E-Mail-Adresse sieht nicht richtig aus";
if ($text == "") $errors[] = "es wurde kein Text eingegeben";
if ($_FILES['probe']['size'] > $max_attach_size) $errors[] = "Attachment zu groß (".number_format($_FILES['probe']['size']/1000,0,",","")." KB) - Maximalgröße: ".number_format($max_attach_size/1000,0,",","")." KB";
if (empty($errors))
{
$text = stripslashes($text);
$subject = stripslashes($subject);
if ($name != "") $mail_name=$name; else $mail_name="unbekannt";
if ($subject != "") $mail_subject = $subject; else $mail_subject = "kein Betreff";
if ($email != "") $mail_email = $email; else $mail_email = "email@unknown.xyz";
$ip = $_SERVER["REMOTE_ADDR"];
// Wenn Attachment, dann MIME-Mail erstellen:
if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "")
{
// Datei einlesen und codieren:
$datei_content = fread(fopen($_FILES['probe']['tmp_name'],"r"),filesize($_FILES['probe']['tmp_name']));
$datei_content = chunk_split(base64_encode($datei_content),76,"n");
// Boundary festlegen:
$boundary = md5(uniqid(rand()));
// Mail-Header:
$mail_header = "From: ".$mail_name." <".$mail_email.">n";
$mail_header .= "X-Sender-IP: ".$ip."n";
$mail_header .= "MIME-Version: 1.0n";
$mail_header .= "Content-Type: multipart/mixed; boundary="".$boundary.""n";
$mail_header .= "This is a multi-part message in MIME format.n";
// Mail-Text:
$mail_header .= "--".$boundary;
$mail_header .= "nContent-Type: text/plain";
$mail_header .= "nContent-Transfer-Encoding: 8bit";
$mail_header .= "nn".$text;
// Attachment:
$mail_header .= "n--".$boundary;
$mail_header .= "nContent-Type: ".$_FILES['probe']['type']."; name="".$_FILES['probe']['name'].""";
$mail_header .= "nContent-Transfer-Encoding: base64";
$mail_header .= "nContent-Disposition: attachment; filename="".$_FILES['probe']['name'].""";
$mail_header .= "nn".$datei_content;
// Ende:
$mail_header .= "n--".$boundary."--";
// Sende E-Mail und gebe Fehler bzw. Bestaetigung aus
if (@mail($mailto,$mail_subject,"",$mail_header)) $sent = true; else $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen";
}
// kein Attachment, normale E-Mail:
else
{
$mail_header = "From: ".$mail_name." <".$mail_email.">n";
$mail_header .= "X-Sender-IP: $ipn";
$mail_header .= "Content-Type: text/plain";
if (@mail($mailto,$mail_subject,$text,$mail_header)) $sent = true; else $errors[] = "keine Verbindung zum Mailserver - bitte nochmal versuchen";
}
// Kopie an Absender:
if (isset($sent) && isset($email) && $email != "" && isset($_POST['copy']))
{
if (isset($_FILES['probe']['name']) && trim($_FILES['probe']['name']) != "") $copy_mail_text = "Kopie der versendeten E-Mail:nn".$text."nnAttachment: ".$_FILES['probe']['name']; else $copy_mail_text = "Kopie der versendeten E-Mail:nn".$text;
$header= "From: ".$mailto."n";
$header .= "X-Sender-IP: ".$ip."n";
$header .= "Content-Type: text/plain";
@mail($email, $mail_subject, $copy_mail_text, $header);
}
}
}
if (empty($sent))
{
if(isset($errors))
{
?><p class="caution">Fehler:</p><ul><?php foreach($errors as $f) { ?><li><?php echo $f; ?></li><?php } ?></ul><br /><?php
}
?><form method="post" action="<?php echo basename($_SERVER["PHP_SELF"]); ?>" enctype="multipart/form-data"><div>
<p><b>Name:</b><br /><input type="text" name="name" value="<?php if (isset($name)) echo htmlentities(stripslashes($name)); else echo ""; ?>" size="35" /></p>
<p><b>E-Mail:</b><br /><input type="text" name="email" value="<?php if (isset($email)) echo htmlentities(stripslashes($email)); else echo ""; ?>" size="35" /></p>
<p><b>Betreff:</b><br /><input type="text" name="subject" value="<?php if (isset($subject)) echo htmlentities(stripslashes($subject)); else echo ""; ?>" size="35" /></p>
<p><b>Nachricht:</b><br /><textarea name="text" cols="55" rows="12"><?php if (isset($text)) echo htmlentities(stripslashes($text)); else echo ""; ?></textarea></p>
<b>Attachment:</b><br /><input type="file" name="probe" value="<?php if (isset($_POST['probe'])) echo htmlentities(stripslashes($_POST['probe'])); else echo ""; ?>" size="20"/></p>
<br /><br />
<p><input type="submit" name="form_submitted" value="OK - Absenden" /> <input type="checkbox" name="copy" value="true" /> Kopie an Absender</p>
</div></form><?php
}
else
{
if (empty($email)) { ?><p><b>Danke!</b><br />Nachricht erfolgreich versendet. Allerdings wurde keine E-Mail-Adresse angegeben, ich kann also nicht antworten.</p><?php }
else { ?><p><b>Danke!</b><br />Nachricht erfolgreich versendet.</p><?php }
}