Sicherheitsabfrage bei Kontaktformular

c4er

Grünschnabel
Hallo liebe Gemeinde,

Ich habe in letzter Zeit vermehrt mit Probleme mit Spam zu tun und würde deswegen gerne eine Sicherheitsabfrage im Kontaktformular einbauen. Leider habe ich von der Programierung überhaupt keine Ahnung und wende mich deswegen an euch.

Könnte mir jemand folgenden Code so umschreiben dass dieser eine Sicherheitsabfrage enthält?

Lg Mario

Code:
<?php

##### FILE WITH INCLUDES AND REQUIRES
include("./include/required_files.php");
########################################

ob_start();

###### CONTENT ###################### 

$t = new Template("./templates/blank/contents/request.tpl");

$s_errors = "";
$show_form = true;

$fields = array ("vorname","nachname","email","nachricht","tel");

$errors = array ( 
                  "vorname"  => "Vorname",
                  "nachname" => "Nachname",
				  "email"    => "E-Mail",
				  "nachricht" => "Nachricht",
				  "tel"      => "Bitte geben sie eine Telefonnummer ein"
                );
                
$regex  = array(
                "vorname"  => "required",
                "nachname" => "required",
                "email"    => "",
                "nachricht" => "required",
                "tel"      => "required"
               );

if(!isset($_POST['send'])) {
  $t->emptyTpl();
} else {
  foreach($_POST as $key=>$val) {
  	  if(!in_array($key,$fields))
  	   continue;
  	  if(!checkField($regex[$key],$val)) {
  	  	 $s_errors .= $errors[$key]."<br/>\n"; 
  	  }
  }
  
  if(strlen($s_errors) <= 0) {
    $show_form = false;
    $tEmail = new Template("./emails/admin/new_message.tpl");
    $tEmail->fillTpl($_POST);
    
    if(sendAdminEmail("Kontakt-Formular", &$tEmail)) {	
       $tSuccess = new Template("./templates/blank/contents/request/email_success.tpl");
       echo $tSuccess->getFileContent();
       weiterleiten("index.php");
    } else {
       $tFailure = new Template("./templates/blank/contents/request/email_failure.tpl");
       echo $tFailure->getFileContent();
       weiterleiten("index.php",5);
    }
  } else {
  	  $s_errors = "<b>Bitte kontrollieren sie folgende Felder:</b> <br/> <br/>\n". $s_errors;
  	  $t->fillTpl($_POST);
  }
}

if($show_form) {
   $t->define("{PHP_SELF}",$_SERVER['PHP_SELF']);
   $t->define("{errors}",$s_errors);
   echo $t->getParsedFileContent();
}

###### END OF CONTENT ###############
$content = ob_get_contents();
ob_end_clean();


#################### include output-file ##############
require_once("./containers/c_blank.php");
################################
?>
 
Das Script zum generieren des Sicherheitscodes habe ich selbst mal auf www.phpclasses.org mir besorgt (Author: Dmitry Sheiko) und ein wenig angepasst für meine Bedürfnisse.
Einbinden der Abfrage ins Formular:
HTML:
<img src="code_pic.php">;
<br>
<input name="code" id="contact_subject" size="5" class="inputbox" value="" type="text">

Überprüfung in deinem Script:
PHP:
  ...

  foreach($_POST as $key=>$val) {
  	  if(!in_array($key,$fields))
  	   continue;
  	  if(!checkField($regex[$key],$val)) {
  	  	 $s_errors .= $errors[$key]."<br/>\n"; 
  	  }
  }
  if($_SESSION['Md5OfGenCode'] != md5($_POST['code'])){
  	  	$s_errors .= "Sicherheitsabfrage<br/>\n"; 
  }
  ...

Im Anhang findes du die entsprechende code_pic.php und das Hintergrundbild.
 

Anhänge

Danke euch für die schnelle Antwort ich werde mal probieren und euch sagen ob ich Herr der Name geworden bin :)

lg Mario

Also habe gerade probiert aber bei mir passiert nichts hatte den Code phpoben bei mir eingefügt oder war das falsch? Wie gesagt ich habe leider keine Ahnung in solchen Sachen...

Die anderen Dateien hatte ich einfach in denselben Ordner geladen.
 
Zuletzt bearbeitet:
Das PHP - Script das du eingefügt hast, übernimmt das Versenden des Mails. D.h. dort wird auch die Überprüfung stattfinden müssen.
PHP:
  if($_SESSION['Md5OfGenCode'] != md5($_POST['code'])){
            $s_errors .= "Sicherheitsabfrage<br/>\n"; 
  }
Das Formular selbst allerdings wird wo anders erzeugt. Dort musst du dann die Sicherheitsabfrage einfügen:
HTML:
<img src="code_pic.php">
<br>
<input name="code" size="5" type="text">
oder
PHP:
echo "<img src=\"code_pic.php\">\n";
echo "<br>\n";
echo "<input name=\"code\" size=\"5\" value="" type=\"text\">";
Achte darauf, dass es zwischen <form ...> und </form> ist.

mfg.
 
Ich merke schon ich bin einfach zu dämlich dazu kannst du zufällig aus den Daten erkennen wo ich den Code einfügen muss? :(:(
 
Aus dieser Angabe alleine nicht. Das Formular wird vermutlich in der Datei:
./templates/blank/contents/request.tpl
erzeugt.
 
Danke dir bin insoweit fündig gewordener zeigt auch die Sicherheitsabfrage an aber gebe ich einen falschen Code ein wird die Nachricht trotzdem verschickt. Habe ich noch irgendetwas etwas vergessen?!

Lg Mario
 
Vor der if - Bedingung ( if(strlen($s_errors) <= 0) { gehört noch die Abfrage:
Code:
  if($_SESSION != md5($_POST)){
            $s_errors .= "Sicherheitsabfrage<br/>\n"; 
  }
rein.
Es könnte allerdings sein das dein CMS die $_SESSION löscht. Testen kannst du dies am Besten durch:

Code:
echo "Code: ".$_SESSION." - ".md5($_POST."<br />";

vor der if - Bedingung. Mit diesem Befehl sollte nach einem Senden einer Mail etwas auf deiner Seite angezeigt werden ähnlich:
Code:
Code:
aslkdfjöalskdfjw52345asf34 - aslkdfjöalskdfjw52345asf34
 
Zurück