Captcha Formularelement

Das Captcha Formularelement dient zum Schutz gegen Angriffe der öffentlichen Formulare gegen Scripte die automatisiert und massenhaft Eintragungen vornehmen. Es gibt verschiedene Arten von Bildern, die nur für Menschen lesbar sind und somit einen guten Schutz gegen die automatische Eintragung bieten.

Die RedSparkCore App kommt von Haus aus mit einem Captcha welches ein Bild mit einer einfachen Rechenaufgabe generiert. Das Ergebnis dieser Aufgabe muss in das daneben stehende Eingabefeld eingegeben werden.


Einbau in ein XML Formular

Der Einbau in ein rein als XML definiertes Formular ist denkbar einfach. Der Form-Type im XML muss für das entsprechende Feld lediglich auf "captcha" umgestellt werden.

<!-- captcha -->
  
  <field>
  <db_field>captcha</db_field>
  <ausgabe_name>Captcha</ausgabe_name>
  <eingabe_name>Captcha</eingabe_name>
  <db_definition>varchar(255) default NULL</db_definition>
  <required>FALSE</required>
  <form_type>captcha</form_type></field>

Das System rendert daraufhin ein Captcha Form Element, welches wie gewohnt durch überschreiben der "tpl" Datei im Template unterhalb von /modules/forms/div/captcha.tpl angepasst werden kann.

Zudem ist es nötig, das captcha_bg.png Bild aus dem kb_redspark Template in das eigene Template zu kopieren.


Einbau in ein ZEND Formular

Der Einbau in ein ZEND Form, bzw. in ein als HTML angegebenes Formular ist ähnlich einfach. Nötig ist lediglich das Bild welches über die CreateLink Funktion generiert wird:

<image 
  src="{createlink module='Image' action='Captcha' params="width=100&height=50&action_name=`$Broker-
>
request->action`"}" 
  width="100" 
  height="50">

Zudem ist es nötig, das captcha_bg.png Bild aus dem kb_redspark Template in das eigene Template zu kopieren.

Individuelles Captcha Bild

Zur Nutzung eines individuellen Captcha Bildes bietet es sich an, die Captcha Action aus dem Image Modul unterhalb von RedSparkCore in die eigene App zu klonen. Es können dann Typ (Rechenaufgabe -> Text) und weitere Parameter individualisiert werden.


Auswertung der Antwort

Neben der Anzeige des Bildes ist die Validierung der Captcha-Antwort im Speicherprozess nötig. Das Kommentar-Formular im RedSparkBlog bietet hier eine Referenzimplementierung.

<?php
 
// if captcha image has set the validation code in session, and equals code in request
    
$captcha_return_value false;
    if (isset(
$_SESSION["formcreator_validation_code-action-".Broker::getRequest()->getActionName()])) {
    if (isset(
$_SESSION["formcreator_validation_code-action-".Broker::getRequest()->getActionName()]) 
    && isset(
$dataobject->captcha
    && (string)
$dataobject->captcha === (string)$_SESSION["formcreator_validation_code-action-".Broker::getRequest()->getActionName()]
    ) { 
    
$captcha_return_value true;
    } else {
    
// validation code set but not right
    
Broker::getErrorstack()->add(Broker::getRequest()->getActionName(),$this->_('Wrong validation code'),"warning",'',FALSE,'captcha');
    
$captcha_return_value false;
    }
    } elseif (!isset(
$_SESSION["formcreator_validation_code-action-".Broker::getRequest()->getActionName()]) && isset($dataobject->vcode)) {
    
Broker::getErrorstack()->add(Broker::getRequest()->getActionName(),$this->_('No validation code found'),"warning",'',FALSE,'captcha');
    
$captcha_return_value false;
    
    
// always valid if no session AND no request of captcha 
    
} else {
    
$captcha_return_value true// strict: set this to false
    
}
    
    
/*
    * Validate the rest
    */
    
if ($captcha_return_value) {
    
$result parent::validate($dataobject$mode);
    }
?>

Kuborgh GmbH

Hamburg 040 819 773 770 Köln 0221 276 66 96 info@kuborgh.de www.kuborgh.de

RedSpark Community

RedSpark Community

Community Website
RedSpark Apps

RedSpark Apps

Zur Übersicht
RedSpark Download

RedSpark Basispaket

Zum Download
Key facts