Entstanden ist es durch apicalart und xmurrix.
Was tut es ?
Statt des schon häufig geknackten normalen Captchas muss man hier eine Rechenaufgabe lösen um eine Email zu versenden.
Was müsst Ihr tun !
1. Kopiert den nachfolgenden Code in eine neue Datei.
2. Speichert diese Datei ab als rechen-captcha.php
3. Ladet diese Datei auf Euren Server in den Ordner /cms
Code: Alles auswählen
<?php
if (stristr($_SERVER["PHP_SELF"], basename(__FILE__)) !== false) {
include_once ("config.php");
include_once ($contenido_path."includes/startup.php");
cInclude("includes", "functions.con.php");
cInclude("includes", "functions.con2.php");
cInclude("includes", "functions.api.php");
cInclude("includes", "functions.pathresolver.php");
page_open(array ('sess' => 'Contenido_Frontend_Session', 'auth' => 'Contenido_Frontend_Challenge_Crypt_Auth', 'perm' => 'Contenido_Perm'));
$db = new DB_Contenido;
$sess->register("rechen_captcha_spam");
$zahl1 = rand(10,20); //Erste Zahl 10-20
$zahl2 = rand(1,10); //Zweite Zahl 1-10
$operator = rand(1,2); // + oder -
if($operator == "1"){
$operatorzeichen = " + ";
$ergebnis = $zahl1 + $zahl2;
}else{
$operatorzeichen = " - ";
$ergebnis = $zahl1 - $zahl2;
}
$rechen_captcha_spam = encrypt((string) $ergebnis); //Key
$rechen_captcha_spam = str_replace("=", "", $rechen_captcha_spam);
page_close();
$rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
$img = imagecreatetruecolor(80,15);
$schriftfarbe = imagecolorallocate($img,13,28,91);
$hintergrund = imagecolorallocate($img,255,255,255);
imagefill($img,0,0,$hintergrund);
imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
} else {
// donut
}
function encrypt($string, $key=null) {
if ($key == null) {
$key = "29jfkd921";
}
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result .= $char;
}
return base64_encode($result);
}
?>
Das muss, wie nachfolgend gezeigt, geändert werden
( Will sagen es kommen zwei neue Zeilen hinzu )
Code: Alles auswählen
<table cellspacing="1" cellpadding="1" border="0">
<tr><td colspan="3"><span class="small"><sup>(*)</sup></span> {PFLICHTFELDER}</tr>
<tr>
<td>{ANREDE}</td><td width="20"> </td>
<td>
<input type="radio" name="Anrede" value="{ANREDE_OPTION1}" checked> {ANREDE_OPTION1}<br/>
<input type="radio" name="Anrede" value="{ANREDE_OPTION2}"/> {ANREDE_OPTION2}
</td>
</tr>
<tr><td>{VORNAME}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input type="text" name="Vorname" id="Vorname" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{NACHNAME}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input type="text" name="Nachname" id="Nachname" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{FIRMA}</td><td width="20"> </td><td><input type="text" name="Firma" id="Firma" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{STRASSE}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input type="text" name="Strasse" id="Strasse" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{PLZORT}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input type="text" name="PLZOrt" id="PLZOrt" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{TELEFON}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input type="text" name="Telefon" id="Telefon" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{EMAIL}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input type="text" name="Email" id="Email" maxlength="100" style="width:240px;"/></td></tr>
<tr><td>{CAPTCHA_JOB}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><img id="Aufgabe" src="rechen-captcha.php" alt="{CAPTCHA_JOB_MSG}" /></td></tr>
<tr><td>{CAPTCHA_JOB_RESULT}<span class="small"><sup>(*)</sup></span></td><td width="20"> </td><td><input id="Sicherheitscode" title="{CAPTCHA_JOB_RESULT_MSG}" name="Sicherheitscode" type="text" value="" size="48" maxlength="160" /></td></tr>
<tr><td colspan="3"> </tr>
<tr><td valign="top">{ANLIEGEN}</td><td width="20"> </td><td><textarea name="Anliegen" id="Anliegen" style="width:240px;height:170px;font-family:Verdana,Tahoma,Arial,Helvetica,Sans-serif,sans-serif;font-size:11px;"></textarea></td></tr>
<tr><td colspan="3"> </tr>
<tr><td><input type="submit" value="{ABSCHICKEN}"/></td><td width="20"> </td><td align="right"><input type="reset" value="{LOESCHEN}"/></td></tr>
</table>
Hierzu lasst Ihr den INPUT so wie er ist und tauscht den OUTPUT aus gegen nachfolgenden Code.
Code: Alles auswählen
CONTENIDO MODUL - INPUT unverändert wie beim Original Kontakt Modul
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Contact form mit Rechen Captcha
* Author(s) : Andreas Lindner, Patrick Dohmen
* Credits : xmurrix
* Copyright : Contenido - four for business
* Created : 20.05.2007
* Erweiterung : apical art webdesign
************************************************/
#Includes
cInclude("classes", "class.phpmailer.php");
if (!isset ($_POST['send'])) {
#Form has not been sent yet
cInclude('classes', 'class.article.php');
cInclude('classes', 'class.template.php');
#Create contact form
echo '<form id="kontaktform" method="post" action="'.$sess->url("front_content.php?idcat=$idcat").'">';
echo '<div id="hidden"><input type="hidden" name="send" value="1" /></div>';
if (!is_object($tpl)) {
$tpl = new Template;
}
$tpl->set("s", "ANREDE", mi18n("Anrede"));
$tpl->set("s", "ANREDE_OPTION1", mi18n("Herr"));
$tpl->set("s", "ANREDE_OPTION2", mi18n("Frau"));
$tpl->set("s", "NACHNAME", mi18n("Name"));
$tpl->set("s", "VORNAME", mi18n("Vorname"));
$tpl->set("s", "FIRMA", mi18n("Firma"));
$tpl->set("s", "STRASSE", mi18n("Straße/Nr."));
$tpl->set("s", "PLZORT", mi18n("PlzOrt"));
$tpl->set("s", "TELEFON", mi18n("Telefon"));
$tpl->set("s", "EMAIL", mi18n("Email"));
$tpl->set("s", "CAPTCHA_JOB", mi18n("Unsere Aufgabe"));
$tpl->set("s", "CAPTCHA_JOB_MSG", mi18n("Bitte teilen Sie uns im nachfolgenden Feld die Lösung mit"));
$tpl->set("s", "CAPTCHA_JOB_RESULT", mi18n("Ihr Ergebnis"));
$tpl->set("s", "CAPTCHA_JOB_RESULT_MSG", mi18n("Eingabefeld, geben Sie hier Ihr Ergebnis ein"));
$tpl->set("s", "ANLIEGEN", mi18n("Nachricht"));
$tpl->set("s", "PFLICHTFELDER", mi18n("Pflichtfelder"));
$tpl->set("s", "ABSCHICKEN", mi18n("Abschicken"));
$tpl->set("s", "LOESCHEN", mi18n("Löschen"));
$tpl->generate($cfgClient[$client]["path"]["frontend"]."templates/kontaktformular.html");
echo '</form>';
} elseif ($_POST['send'] == 1) {
#Form has been sent
#Check user input
$noerrors = true;
$msg = '';
cInclude("frontend","rechen-captcha.php");
$sicherheits_eingabe = encrypt($_POST["Sicherheitscode"]);
$sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
if(isset($rechen_captcha_spam)&&$sicherheits_eingabe == $rechen_captcha_spam){
$sess->unregister("rechen_captcha_spam");
unset($rechen_captcha_spam);
unset($_POST["Sicherheitscode"]);
}
else {
$noerrors = false;
$msg .= mi18n("Rechenaufgabe wurde falsch gelöst")."<br/>";
}
if ($_POST['Nachname'] == '') {
$noerrors = false;
$msg .= mi18n("Bitte geben Sie Ihren Namen ein!")."'<br/>";
}
if ($_POST['Email'] == '') {
$noerrors = false;
$msg .= mi18n("Bitte geben Sie Ihre EMail-Adresse ein!")."<br/>";
}
if ($noerrors == false) {
#Errors have been found
echo mi18n("<p>Beim Versenden sind folgende Fehler aufgetreten:")."<br/>";
echo $msg.'<br/>';
echo '<a href="javascript:history.back();">'.mi18n("Zurück").'</a></p>';
} else {
#No errors, create and send mail
$mail = new phpmailer;
$mail_body = '<html><head></head><body bgcolor="#ffffff"><table cellspacing="0" cellpadding="2" border="0">';
if (is_array($_POST)) {
foreach ($_POST as $key => $value) {
if ($key != 'send') {
$mail_body .= "<tr><td>$key</td><td>$value</td></tr>";
}
}
}
$mail_body .= '</table></bo'.'dy></html>';
$mail->Host = "localhost";
$mail->IsHTML(true);
#Get mailer from settings
switch (strtolower("CMS_VALUE[4]")) {
case "smtp" :
$mail->IsSMTP();
$host = "CMS_VALUE[5]";
$user = "CMS_VALUE[6]";
$password = "CMS_VALUE[7]";
if (($host != '') && ($user != '') && ($password != '')) {
$mail-> $SMTPAuth = true;
$mail->Host = $host;
$mail->Username = $user;
$mail->Password = $password;
}
break;
case "mail" :
$mail->IsMail();
break;
case "sendmail" :
$mail->IsSendmail();
break;
case "qmail" :
$mail->IsQmail();
break;
default :
}
$mail->From = "CMS_VALUE[0]";
$mail->FromName = "CMS_VALUE[2]";
$mail->AddAddress("CMS_VALUE[1]", "");
$mail->Subject = "CMS_VALUE[3]";
$mail->Body = $mail_body;
$mail->WordWrap = 50;
$mail->Send();
#Display message after mail is sent
echo mi18n("<p>"."Ihr Anliegen wurde uns übermittelt. Vielen Dank!")."<br/></p>";
}
}
?>
Im Einsatz sieht das dann so aus: http://www.apicalart.de/cms/front_content.php?idcat=29
Wichtiger Hinweis :
Die nachfolgenden 7 Threads braucht ihr nicht zu berücksichtigen. Die sind beim Enstehen des Moduls entstanden ! Die fertige Lösung ist diese hier.