Sicherheitslücken im Mailscript

Ich hab das nochmal probiert. Und es funktioniert mit doppelten Anführungszeichen nicht, jedoch mit einzelnen:

PHP:
if (strpos($from,'\n') || strpos($from,'\r'))    die();

Was mich verwundert, aber nun gut..es scheint halt so zu sein. Kann mir das jemand erklären?

Hier genau das gleiche:

PHP:
if (eregi('\r',$from) || eregi('\n',$from))     die();


Und hier die Quelle wo ich mich mal zu dem Thema informierte, in dem Beispiel werden doppelte Anführungszeichen genutzt, mache ich das, funktioniert es nicht:

http://www.securephpwiki.com/index.php/Email_Injection
 
Zuletzt bearbeitet:
Gumbo hat gesagt.:
Mit doppelten Anführungszeichen ausgezeichnete Zeichenketten werden von PHP zusätzlich verarbeitet, sodass etwa Steuerzeichen die durch „\foobar“ dargestellt werden durch die tatsächlichen Zeichen sowie Variablendeklarationen durch ihren Wert ersetzt werden. Bei einfachen Anführungszeichen wird die Zeichenkette einfach übernommen und ein „\n“ bleibt ein „\n“ und wird nicht durch ein Zeilenvorschubzeichen ersetzt.


Danke. Aber das war mir schon bewußt, deshalb dachte ich ja auch dass die doppelten Anführungszeichen hier richtig sind. Aber wie ist es nun richtig. Oder, wie kann es das mal testen. Ich habe einfach getestet, indem ich über ein input Feld z.B. test@test.de\ntest@test.de übergeben habe. Wenn ich dann mit einfachen Anführungszeichen teste:
PHP:
if (strpos($from,'\n') || strpos($from,'\r'))    die();
wird das Script abgebrochen, andernfalls (mit doppelten Anführungszeichen) nicht. Aber kann ich das so überhaupt testen? Wie ist es nun richtig?

Danke.. Gruß
 
Ich habe das ganze jetzt auch mal ausprobiert aber ohne Erfolg! Wo ist mein Fehler?

PHP:
 $email = urldecode($email);
 if (strpos($email,"\n") || strpos($email,"\r")){ die( "Fehlermeldung: ... zu viele Mailadressen!" ); }
 mail("$emailadresse","$betreff", "Betreff:\t $betreff\nVorname:\t $fname\nNachname:\t $lname\n\nStrasse:\t $strasse\nOrt:\t\t $plz $ort\n\nTelefon:\t $telefon\nE-Mail:\t $email\nKommentar:\t $kommentar\n\n\n$REMOTE_ADDR\n$REMOTE_HOST\n$HTTP_USER_AGENT","From: $email");

Er scheint die ganze sache völlig zu ignorieren. Und sendet trotzdem alles!
 
Probier mal Folgendes:
PHP:
if( !preg_match("<^(?:[a-zA-Z\d$\-_.+!*'(),;/?:@&=]|(?:%[a-fA-F\d]{2}))+$>s", trim($email)) ) {
	die('Fehlermeldung: Nicht erlaubte Zeichen innerhalb der E-Mail-Adresse!');
}
mail($emailadresse, $betreff, "Betreff:\t".$betreff."\nVorname:\t".$fname."\nNachname:\t".$lname."\n\nStrasse:\t".$strasse."\nOrt:\t\t".$plz." ".$ort."\n\nTelefon:\t".$telefon."\nE-Mail:\t".$email."\nKommentar:\t".$kommentar."\n\n\n".$_SERVER['REMOTE_ADDR']."\n".$_SERVER['REMOTE_HOST']."\n".$_SERVER['HTTP_USER_AGENT'], 'From: <'.trim($email).'>');
 
Zurück