PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sicherheit in PHP-Formularen u. Reguläre Ausdrücke



doobienodoubt
11-10-2007, 17:16
Hallo zusammen,

seit einiger Zeit darf ich mich nun intensiver mit php beschäftigen. Für unsere Homepage habe ich ein Kontaktformular erstellt, das auch soweit ganz gut funktioniert.
Ich würde jetzt nur gerne wissen, welche Sicherheitsvorkehrungen ich beachten sollte.
Ich habe mir gedacht, dass ich mittels Regulären Ausdrücken nur bestimmte Zeichen im Namens-, Email- und Textfeld zulassen und somit verhindern könnte, dass irgendwelcher Code o.ä. über dieses Formular verschickt wird.
Irgendwie funktioniert das bei meiner Lösung aber noch nicht. Ich kann z.B. trotzdem noch ein ! im Namensfeld eingeben und die Email wird verschickt.
Wie mache ich es richtig?
Und ist es zwingend notwendig bei einer kleinen Homepage ein Captcha einzubauen?

Hier mal der Code:


<?php

if(isset($_POST['Submit'])){



//HTML- und PHP-Tags aus den Eingabefeldern entfernen

$name=strip_tags($_POST['name']);

$email=strip_tags($_POST['email']);

$anfrage=strip_tags($_POST['anfrage']);



if(!ereg("[a-zA-Z]+[a-zA-Z]",$name)){

$error_msg="Bitte geben Sie Ihren Namen an.<br>";

}

if(!ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$email)){

$error_msg.="Bitte geben Sie eine gültige eMail-Adresse an.<br>";

}

if(strlen($anfrage)<3){

$error_msg.="Bitte geben Sie an, welche Anfrage Sie an uns richten möchten.<br>";

}

if(isset($error_msg)){

//Eines der Felder wurde nicht korrekt ausgefüllt

echo "Ihre Anfrage konnte aus folgenden Gründen leider nicht bearbeitet werden:<br><br>";

echo $error_msg;

echo "<br>Bitte klicken Sie auf <a href=javascript:history.back(1)>zurück</a> und füllen Sie alle Felder aus.";

}else{

//Alle Felder ausgefüllt - eMail generieren

$recipient="xxx@xxx.xx";

$subject="Eine Anfrage aus dem Internet";

$header="From: " . $email . "\r\n";

$mail_body ="Das Anfrage-Formular wurde am " . date("d.m.Y") . " um " . date("H:i") . "h ausgeführt.\n";

$mail_body.="Folgende Werte wurden eingetragen:\n\n";

$mail_body.="Name: " . $name . "\n";

$mail_body.="eMail: " . $email . "\n\n";

$mail_body.="Anfrage:\n";

$mail_body.=$anfrage . "\n\n ---- Ende der automatisch generierten eMail ----";



mail($recipient,$subject,$mail_body,$header);



//Formular ausgeführt - Meldung ausgeben

echo "Vielen Dank für Ihre Anfrage.<p>";

}

}else{

//Formular noch nicht ausgeführt - Formular anzeigen

?>

jan61
11-10-2007, 21:34
Moin,

Du prüfst im Namen nicht - wie in der E-Mail-Adresse - ob $name vom Anfang bis zum Ende Deiner regex entspricht (es fehlen "^...$"). Damit genügt ein Name, der z. B. "jan!" lautet, der regex - es sind ja mindestens 2 Buchstaben enthalten. Du solltest die regex dann allerdings auch noch ein wenig erweitern, die Zeichen "-" und " " und (wenn jemand Wert auf seinen Titel legt) "." gehören mit in die Liste. Und was ist mit Umlauten?

Jan

Pingu
12-10-2007, 05:40
.museum geht bei Deiner email-Adresse nicht.

doobienodoubt
12-10-2007, 08:57
Vielen Dank, das hilft mir auf jeden Fall weiter!

@Pingu: Ich glaube die Anzahl an E-Mail-Adressen mit dieser o.ä. Endung, die sich dann auch noch eine Anfrage an mich senden wollen, ist so gering, dass ich die gerne ausgrenze. :)

msi
12-10-2007, 09:38
bau nochn captcha ein, wenn du nciht vollgespammt werden willst ;)

BLUESCREEN3D
12-10-2007, 09:55
.museum geht bei Deiner email-Adresse nicht.

Ich glaube die Anzahl an E-Mail-Adressen mit dieser o.ä. Endung, die sich dann auch noch eine Anfrage an mich senden wollen, ist so gering, dass ich die gerne ausgrenze. :)
Tolle Einstellung ...