• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] CAPTCHA Abfrage in Kontaktformular einbinden

extrachemo

New member
Hallo,
ich habe ein Kontaktformular "kontakt.php" es wird mit dem PHP Formmailer versendet. Es hat folgendem Code:

PHP:
<?php
### Konfiguration ###
# Empfänger des Formulars
$strEmpfaenger = 'info@ihre-domaine.de';
# Absender des Formulars
$strFrom       = '"Formular"' .$_POST["email"];
# Betreff des Formulars
$strSubject    = 'Anfrage Formular';
# Betätigungsseite wenn Formular versendt wurde
$strReturnhtml = 'kontakt_bestaetigung.html';
# Trennzeichen zwischen dem Feldnamen und dem angegebenen Wert
$strDelimiter  = ":\t";
### Ende Konfiguration ###
if($_POST)
{
	if($_POST['vorname'] && $_POST['nachname'] && $_POST['email'] && $_POST['text'])
	{
		$strMailtext = "";
		while(list($strName,$value) = each($_POST))
		{
			if(is_array($value))
			{
				foreach($value as $value_array)
				{
					$strMailtext .= $strName.$strDelimiter.$value_array."\n";
				}
			}
			else
			{
				$strMailtext .= $strName.$strDelimiter.$value."\n";
			}
		}
	}
	else die('Bitte den Zurueck Butten Ihres Browsers betaetigen und alle Pflichtfelder ausfuellen.');
	if(get_magic_quotes_gpc())
	{
		$strMailtext = stripslashes($strMailtext);
	}
		mail($strEmpfaenger, $strSubject, $strMailtext, "Content-Type: text/plain; charset=UTF-8\nFrom: ".$strFrom, "-f info@ihre-domaine.de")
		or die("Die Mail konnte nicht versendet werden. Bitte den Zurueck Butten Ihres Browsers betaetigen.");
		header("Location: $strReturnhtml");
		exit;
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>Kontakt</title>
</head>
<body onload="document.anfrage.vorname.focus();">
                  <div class="inhalt">
                    <h3><span>Ihre Kontaktdaten</span></h3>
                    <p>Die mit * markierten Felder sind Pflichtfelder</p>
                    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post" name="anfrage" onsubmit="return chkFormular()">
                      <p>Anrede: 
                        <label>
                          <input type="radio" name="anrede" value="Frau " id="anrede_0" checked>
                          Frau</label>
                        <label>
                          <input type="radio" name="anrede" value="Herr " id="anrede_1">
                          Herr</label>
                      </p>
                      <p>* Vorname:<br>
                      <input name="vorname" type="text" size="50" maxlength="50"></p>
                      <p>* Nachname:<br>
                      <input name="nachname" type="text" size="50" maxlength="50"></p>
                      <p>Firma / Oganisation:<br>
                      <input name="firma" type="text" size="50" maxlength="50"></p>
                      <p>Straße und Nr.:<br>
                      <input name="strasse" type="text" size="50" maxlength="50"></p>
                      <p>Plz.:<br>
                      <input name="plz" type="text" size="5" maxlength="5"></p>
                      <p>Ort:<br>
                      <input name="ort" type="text" size="50" maxlength="50"></p>
                      <p>* E-Mail Adresse:<br>
                      <input name="email" type="text" size="50" maxlength="50"></p>
                      <p>Telefon:<br>
                      <input name="telefon" type="text" size="50" maxlength="50"></p>
                      <h3><span>Ihre Anfrage</span></h3>
                      <p>Ich / wir haben Interesse an:<br>
                        <label>
                          <input name="interesse[]" type="checkbox" id="interesse_0" value="musikshow" checked>
                          Musikshow</label>
                        <br>
                        <label>
                          <input type="checkbox" name="interesse[]" value="beschallung" id="interesse_1">
                          mit Beschallung</label>
                        <br>
                        <label>
                          <input type="checkbox" name="interesse[]" value="buehnenbeleuchtung" id="interesse_2">
                          mit Bühnenbeleuchtung</label>
                      </p>
                      <p>Meine / unsere Veranstaltung findet statt am:<br>
                      <input name="datum" type="text" size="10" maxlength="10"></p>
                      <p>Meine / unsere Veranstaltung findet statt in:<br>
                      <input name="in" type="text" size="40" maxlength="40"></p>
                      <p>Ich /wir wünschen Antwort:<br>
                        <label>
                          <input type="checkbox" name="antwort_per[]" value="mail" id="antwort_per_0" checked>
                        per e-Mail</label>
                        <br>
                        <label>
                          <input name="antwort_per[]" type="checkbox" id="antwort_per_1" value="rueckruf">
                          per Rückruf</label>
                        <br>
                      </p>
                      <p>* Ihr Anfrage Text:<br>
                        <textarea name="text" cols="50" rows="10"></textarea>
                      </p>
                      <p>Bitte Sicherheitscode eingeben<br>                      
                      <img src="captcha.php" alt="Sicherheitscode" title="Sicherheitscode" width="80" height="25" /> <input name="sicherheitscode" id="sicherheitscode" type="text" size="6" maxlength="6"></p>
                      <p><input name="senden" id="senden" type="submit" value="Anfrage absenden"> <input name="reset" type="reset" value="Anfrage löschen"></p>
                    </form>
                  </div>
</html>



In der 6 Zeile von unten ist eine "captcha.php" zum Einblenden vom Sicherheitscode eingefügt.
Die "captcha.php" hat folgenden Code:

PHP:
<?php
// Session starten
session_start();
// Alten CAPTCHA-Code aus der Session loeschen
unset( $_SESSION['captcha_code'] );

// Das Cachen der Grafik verhindern
header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );
header( "Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT" );
header( "Cache-Control: no-store, no-cache, must-revalidate" );
header( "Cache-Control: post-check=0, pre-check=0", false );
header( "Pragma: no-cache" );

// Dem Browser mitteilen das es sich hierbei um ein JPG handelt.
header( 'Content-type: image/jpeg' );

// Sicherheitscode generieren
$AlphaNumerischerString = "ABCDEFGH2345689";
$ZufallString1 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallString2 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallString3 = substr( str_shuffle( $AlphaNumerischerString ), 0, 2 );
$ZufallStringKomplett = $ZufallString1.$ZufallString2.$ZufallString3;

// Sicherheitscode in der Session speichern
$_SESSION['captcha_code'] = md5( $ZufallStringKomplett );

// Grafik erzeugen und an den Browser senden
$Schriftarten = array( "zachary.ttf", "mtcorsva.ttf", "gilligan.ttf");
$Bilddatei = imagecreatefrompng( "hintergrund.png" );
$TextFarbe1 = imagecolorallocate( $Bilddatei, 0, 125, 0 );
$TextFarbe2 = imagecolorallocate( $Bilddatei, 130, 70, 90 );
$TextFarbe3 = imagecolorallocate( $Bilddatei, 180, 90, 190 );
imagettftext( $Bilddatei, 12, 15, 3, 24, $TextFarbe1, $Schriftarten[0], $ZufallString1 );
imagettftext( $Bilddatei, 16, 0, 26, 15, $TextFarbe2, $Schriftarten[1], $ZufallString2 );
imagettftext( $Bilddatei, 14, -20, 53, 18, $TextFarbe3, $Schriftarten[2], $ZufallString3 );
imagejpeg( $Bilddatei );

// Grafik zerstoeren und Speicher freigeben
imagedestroy( $Bilddatei );
?>


Meine Frage ist:
Wie kann ich die Abfrage des CAPTCHA in meine "kontakt.php" einbauen damit die "kontakt.php" erst versendet wird wenn das CAPTCHA richtig eingegeben wurde?

Für eure Hilfe vorab schon mal vielen Dank!
 
Das Formular musst du immer absenden, da ja nur der Server (und der menschliche Besucher) den Inhalt des Captchas wissen sollte. In der "kontakt.php" musst du dann einfach überprüfen, ob der übergebene Wert auch mit dem in der Session übereinstimmt.

PS: diese Art von Captchas helfen nicht wirklich gegen Bots... OCR und so...
 
ja das captcha ist tatsächlich ein wenig sehr simple^^ kurze Anmerkung noch: nach dem vergleichen nicht vergessen das session feld wieder zu löschen, sonst ist das ein super easy hack ^^

Lg Kasalop
 
Naja - ich hab' das Captcha aus dem Demo mal in den erstbesten online OCR geschmissen und ein perfektes Ergebnis bekommen...
 
Naja - ich hab' das Captcha aus dem Demo mal in den erstbesten online OCR geschmissen und ein perfektes Ergebnis bekommen...

OK das Captcha habe ich auf meiner Seite etwas verändert (Schrift, Größe, Farbe).
Wie sicher ist der php Code selber? Kann man den ruhigen Gewissens verwenden? Geld kostet er ja auch, was aber auch OK ist wenn er gut ist!
 
Ich hab' jetzt mal schnell drübergeschaut. Was wirklich Schlimmes hab' ich jetzt nicht gesehen, aber so richtig der Burner ist der Code jetzt auch nicht... Geld würd' ich dafür nicht ausgeben.
 
Ich hab' jetzt mal schnell drübergeschaut. Was wirklich Schlimmes hab' ich jetzt nicht gesehen, aber so richtig der Burner ist der Code jetzt auch nicht... Geld würd' ich dafür nicht ausgeben.

Danke für die Antwort! Wo kann ich denn was Besseres bekommen. Bin ja auch bereit was zu Zahlen. Im Prinzip brauche ich einen PHP Formular Mailer der sicher ist (gegen Spam, Schadhafer Code usw.). Da ich erst am Anfang meiner PHP Kenntnisse stehe kann ich das nicht selber programmieren.
 
Hm... ich kenn' jetzt nichts; hab' aber auch nicht gesucht. Mit den Tipps von jspit solltest du eigentlich selbst recht weit kommen.
 
Zurück
Oben