• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mail() Sicherheit

AzRaIL

Mitglied
Hallo

habe eine Frage bzgl. der Sicherheit beim übermitteln von Daten mittels der php Funktion "mail".
Auf meiner Seite gibts es ein Feld in das man seine Telefonnummer eintragen kann. Das wird dann übermittelt an eine php datei die den Wert ausliest und mir damit dann direkt ne Mail zuschickt.

Inhalt der Datei sieht so aus:

PHP:
<?php

$nachricht = $_REQUEST['rueckruf'];
$email = '[email protected]';
$betreff = 'Rückruf';

mail($email, $betreff, $nachricht);

header("Location: http://Startseite/");
exit();

?>

Inhalt wird über method="post" übertragen

<form method="post" action="rueckruf.php"><input type="text" name="rueckruf" id="rueckruf"><input type="submit" id="senden" value="senden"></form>

Das Formular tut was es soll aber leider kenne ich mich in punkto Sicherheit nicht so wirklich aus. Habe im Internet gelesen dass es möglich wäre irgendwie da was reinzuschreiben? (Header injection?).
Würde das über die Eingabe im Formular geschehen oder wie läuft es ab?

Da es sich hierbei nur um eine Nummer, also einen Integerwert handelt wäre es nicht das einfachste das Feld auf Zeichen zu prüfen und nur Zahlen zuzulassen? Oder muss ich noch zusätzliche Maßnahmen was die Sicherheit angeht treffen?

lg
 
Moin,
filtern solltest du das auf jeden Fall.

PHP:
$nachrichtl = filter_input(INPUT_POST, 'rueckruf', FILTER_SANITIZE_NUMBER_INT);

Filtert alles außer Zahlen, + und - aus dem String.

MfG
 
Danke aber das klappt irgendwie nicht...
wenn ich $nachricht1 in mail schreibe kriege ich nichts als Nachricht!? und mit $nachricht in mail weiterhin das was man eintippt auch buchstaben etc.
Was mache ich falsch? Bin nicht so gut in PHP =/
 
Tip: Um zu vermeiden, dass eMails aufgrund unvollständiger/falscher Header vom Empfängerserver zurückgewiesen werden, solltest du den Einsatz einer Mailerklasse (z.B. PHPMailer, SwiftMailer) überdenken.
 
Tip: Um zu vermeiden, dass eMails aufgrund unvollständiger/falscher Header vom Empfängerserver zurückgewiesen werden, solltest du den Einsatz einer Mailerklasse (z.B. PHPMailer, SwiftMailer) überdenken.

Verstehe ich nicht ganz, meinst du wenn nichts eingetragen wird und das Formular trotzdem abgeschickt wird?

Eine andere Sache noch. Zu dem Formular ist jetzt noch ein Textfeld hinzu gekommen in das man eine Nachricht schreiben kann.
Was ist bei so einem Fall das standardmäßige was man an Schutz einbaut? Weil alles andere außer Zahlen rausfiltern geht ja jetzt nicht mehr. Also theoretisch könnte man in das Textfeld ganze php Befehle reinschreiben und so das Formular abschicken. Wie kann ich das vermeiden?

lg
 
Kommt sich immer darauf an was du mit deiner Benutzereingabe vor hast.

PHP-Code kann man nicht einfach so mitschicken und der wird dann ausgeführt, oder wie immer du dir das auch vorstellst. Alles wird einfach als String übermittelt (egal ob die Telefonnummer oder ein Text).
Ob da nun PHP-/ Java- oder HTML-Quellcode drin steht, ist PHP erstmal völlig egal. Solange du die Benutzereingabe nicht ausführst (eval) oder sie als *.php Datei speicherst kann serverseitig nichts passieren. Aber um sowas zu machen muss man schon fast als geistig unzurechnungsfähig eingestuft werden.

Da eine Mail für gewöhnlich nur durch HTML-Code infiziert werden könnte, musst du nur HTML-Code filtern, da dies in einer Mail die einzige Gefahr darstellt:
$nachricht = strip_tags($_POST['input]);
Da du aber keine HTML-Mail hast, sondern eine text/plain, ist noch nicht mal HTML gefährlich.

Was @CPCoder meinte, ist eigentlich völlig unrelevant für das eigentliche Thema und eher ein kleiner Tip bevor du das nächste mal wieder die mail()-Funktion nimmst. Unter Umständen werden E-Mails mit falschen Header-Infos vom Server abgewiesen, da sie als Spam eingestuft werden. Eine Mailerklasse wie PHPMailer macht das weitestgehend automatisch, bei mail() muss man das selber machen (http://www.php.net/manual/de/function.mail.php: 4. parameter).
 
Zurück
Oben