Hallo Klaus-Peter,
zunächst musst du die E-mail-Adresse in spitze Klammern stellen:
Code: Select all
@mail($empfaenger,$betreff,$nachricht,'From: '.$name.' <'.$absender.'>')
Dieser Code ist allerdings in dieser Form gefährlich, da er Spam über BCC und CC-Header ermöglicht.
Angenommen ein Abender gibt als Namen folgendes an:
und als Absender-Adresse "
service@paypal.com"
Dann wird daraus dieser Mail-Header:
Also eine Mail, die nicht nur an dich, (du stehst in To) sondern auch an
user1@example.com,
user2@example.com und
user3@example.com (im BCC) und
service@paypal.com (im CC) geht und
service@paypal.com als Absender-Adresse hat. So ermöglichst du es, Angreifern über deinen Server Spam bzw. Phishing zu senden.
Du musst also sicher gehen, das $name keine Kontrollzeichen enthält, welche es ermöglichen weitere Header einzuschleusen. Bei Mails bedeutet das, dass der Name keine Zeilenumbrüche enthalten darf, was ein normaler Name auch nicht tut.
Daher reicht es, die Verarbeitung abzubrechen, wenn ein Zeilenumbruch erkannt wird:
Code: Select all
if (strpos($name,"\n")!==false || strpos($from,"\r"!==false)) die("Error");
@mail($empfaenger,$betreff,$nachricht,'From: '.$name.' <'.$absender.'>')
Viele Grüße,
Christopher