Hallo,
ich habe ein Kontaktformular erstellt, welches Spam sicher sein soll.
Ich werde noch ein Ip-Filter einbauen, damit man nur alle 3min eine Nachricht schreiben kann.
Vielleicht kann mal jemand drüber schauen und sagen wo Sicherheitslücken sind.
Jetzt hab ich das Problem, dass durch das preg_replace
die Zeilenumbrüche im Textfeld auch gefiltert werden, irgendwie bekomme ich es nicht hin, dass es läuft?
Danke
ich habe ein Kontaktformular erstellt, welches Spam sicher sein soll.
Ich werde noch ein Ip-Filter einbauen, damit man nur alle 3min eine Nachricht schreiben kann.
Vielleicht kann mal jemand drüber schauen und sagen wo Sicherheitslücken sind.
PHP:
<?php
session_start();
$firma = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['firma']);
$name = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['name']);
$strasse = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['strasse']);
$ort = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['ort']);
$plz = preg_replace("/[^A-Z a-z0-9]/", "", $_POST['plz']);
$email = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_POST['email'] ); /* Filter alles auser Zeichen die in einer Email vorkommen können */
$email = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $email ); /* Filter alles, was zum versenden an Spam verwendet werden könnte */
$text = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_POST['text'] );
$Msg = "";
// Captcha start in 5 Schritten
$captcha = preg_replace("/[^0-9]/", "", $_POST['captcha']); // Captcha eingabe vom Formular
$captcha2 = rand(1, 10); // Erste Zahl zwischen 1 und 10 Würfeln
$captcha3 = rand(1, 10); // Zweite Zahl zwischen 1 und 10 Würfeln
$captcha4 = $captcha2 + $captcha3; // Zahlen addieren
$captcha5 = preg_replace("/[^0-9]/", "", $_POST['captcha5']); // $Captcha4 wird aus der Variable Post geholt
if ( $name != "" && $email != "" && $captcha != "" && $text != "") // Prüfen ob alle Pflichtfelder ausgefüllt sind, wenn nicht Nachricht ausgeben
{
if ($captcha5 == $captcha) // Prüfen ob das Captcha mit dem eingebenen Captcha identisch ist
{ // Email versenden:
$mail_adresse = "deine-email.de";
$EndNachricht = "
Folgende Nachricht wurde über das Kontaktformular übermittelt:\n\n
Name: $name \n
Firma: $firma \n
Name: $strasse \n
Name: $ort \n
Name: $plz \n
eMail: $email \n\n
Nachricht:\n $text \n \n";
$txt = preg_replace( "/(content-type:|bcc:|cc:|to:|from:)/im", "", $EndNachricht );
mail("$mail_adresse", "web-Kontaktformular",$txt, "From: $email\n");
$Msg = '<p>Vielen Dank, wir werden die Nachricht baldmöglichst bearbeiten!</p> ';
}
else $Msg = '<p>Die Sicherheitsabfrage (Spamschutz) war falsch, bitte versuche es erneut!</p>';
}
else $Msg = '<p>Bitte fülle alle Pflichtfelder aus!</p>';
?>
HTML:
<form action="kontakt.php" method="post" enctype="multipart/form-data">
<table width="400" border="1">
<tr>
<td colspan="2"><?php echo "$Msg"; ?></td>
</tr>
<tr>
<td><div align="right">Firma:</div></td>
<td><input name="firma" type="text" value="<?php echo "$firma"; ?>" /></td>
</tr>
<tr>
<td><div align="right">Name*:</div></td>
<td><input name="name" type="text" value="<?php echo "$name"; ?>" / ></td>
</tr>
<tr>
<td><div align="right">Straße:</div></td>
<td><input name="strasse" type="text" value="<?php echo "$strasse"; ?>" / ></td>
</tr>
<tr>
<td><div align="right">Ort:</div></td>
<td><input name="ort" type="text" value="<?php echo "$ort"; ?>" / ></td>
</tr>
<tr>
<td><div align="right">PLZ:</div></td>
<td><input name="plz" type="text" value="<?php echo "$plz"; ?>" / ></td>
</tr>
<tr>
<td><div align="right">Email*:</div></td>
<td><input name="email" type="text" value="<?php echo "$email"; ?>" / ></td>
</tr>
<tr>
<td><div align="right">Sicherheitsfrage*: <br /> <?php echo "$captcha2 + $captcha3 ="; ?></div></td>
<td><input name="captcha" type="text" value="<?php echo "$captcha"; ?>" / >
</td>
</tr>
<tr>
<td><div align="right">Nachricht:*</div></td>
<td><textarea name="text" rows="6" cols="40"><?php echo "$text"; ?></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Absenden" name="senden">
</td>
<td><input type="reset" value="Löschen" name="reset"></td>
</tr>
</table>
<input name="captcha5" type="hidden" value="<?php echo "$captcha4"; ?>" / >
</form>
Jetzt hab ich das Problem, dass durch das preg_replace
PHP:
$text = preg_replace( "/[^a-z0-9 !?:;,.\/_\-=+@#$&\*\(\)]/im", "", $_POST['text'] );
die Zeilenumbrüche im Textfeld auch gefiltert werden, irgendwie bekomme ich es nicht hin, dass es läuft?
Danke

Zuletzt bearbeitet: