CAPTCHA-Taglib (für Formulare)

Mit dem Modul captcha ist es dem Entwickler möglich, auf einfache Weise ein Formular mit einem (Bild-)CAPTCHA zu schützen. Hierzu muss die im Modul enthaltene TagLib lediglich in ein Formular eingefügt und eine FrontController-Konfiguration für die Auslieferung des Bildes erstellt werden. Die Implementierung zeigt zudem, wie die bestehenden Formular-TagLibs mit Hilfe des <form:addtaglib />-Tags einfach erweitert werden können.

Die folgenden Kapitel beschreiben, welche Vorarbeiten für den Einsatz der TagLib notwendig sind.

Seit dem Release 1.16 steht eine weitere Implementierung für den Schutz von Formularen zur Verfügung. Details lesen Sie unter ReCaptcha. Diese setzt das von Google angebotene CAPTCHA-Konzept ein und schützt damit nicht nur vor automatisierten Aufrufen Ihrer Seiten, sondern hilft dabei auch noch die OCR-Software zur Digitalisierung von Büchern zu verbessern.

1. Konfiguration der FrontController-Action

Da die Auslieferung des CAPTCHA-Bildes über eine FrontController-Action stattfindet, ist es beim eingesetzten Projekt notwendig, die Auslieferung der Seite über den FrontController zu steuern. Sollte die Generierung bisher nur mit Hilfe des Page-Controllers passiert sein, so muss zunächst die Bootstrapdatei angepasst werden. Beinhaltet die index.php die Zeilen

PHP-Code
include_once('./apps/core/pagecontroller/pagecontroller.php'); $page = new Page(); $page->loadDesign('sites::demosite::pres::templates','website'); echo $page->transform();

so müssen diese zu

PHP-Code
include_once('./apps/core/pagecontroller/pagecontroller.php'); import('core::frontcontroller','Frontcontroller'); $fC = &Singleton::getInstance('Frontcontroller'); $fC->setContext('sites::demosite'); echo $fC->start('sites::demosite::pres::templates','website');

angepasst werden. Die Werte für den Context der Applikation, den Pfad und Namen des initialen Templates müssen entsprechend den Werten des jeweiligen Projektes angepasst werden.

Die hier angezeigte Anpassung ist nur für Versionen <=1.13 notwendig. Ab Version 1.14 wird ausschließlich der Front-Controller für die Steuerung der Request-Verarbeitung in der Bootstrap-Datei eingesetzt.

Sobald diese Anpassung wirksam ist, muss die zur Auslieferung des CAPTCHA-Bildes verwendete FrontController-Action konfiguriert werden. Dazu erwartet der FrontController bei Aufruf der URL

Code
/?APF_modules_captcha_biz-action:showCaptcha=name:...
oder im Fall von aktivem URL-Rewriting
Code
/~/APF_modules_captcha_biz-action/showCaptcha/name/...
(Auszug aus dem Quellcode der Implementierung der Taglib) unter dem Namespace
Code
/APF/config/modules/captcha/biz/{CONTEXT}/{ENVIRONMENT}_actionconfig.ini

die Konfiguration der Action. Die Werte {CONTEXT} und {ENVIRONMENT} sind dabei durch die für das Projekt gültigen Werte zu ersetzen. Siehe hierzu auch Konfiguration.

Die Action-Konfigurationsdatei hat folgenden Inhalt:

APF-Konfiguration
[showCaptcha] FC.ActionClass = "APF\modules\captcha\biz\actions\ShowCaptchaImageAction"
Im apf-configpack-*-Releases ist zudem unter /config/modules/captcha/biz/actions eine Vorlage für die Konfigurationsdatei (EXAMPLE_actionconfig.ini) enthalten.


2. Einbindung des Tags

Um den Tag verwenden zu können, muss dieser innerhalb eines Formulares zunächst bekannt gemacht werden. Dies funktioniert mit Hilfe des <form:addtaglib />-Tags, der sich analog zum <core:addtaglib />-Tag verhält. Anschließend ist das Tag innerhalb des gewünschten Formulars verfügbar. Die folgende Code-Box zeigt einen Anwendungsfall, der die wichtigsten Attribute des Tags beinhaltet:
APF-Template
<html:form name="MeinFormular" action="post"> ... <form:addtaglib namespace="modules::captcha::pres::taglib" class="SimpleCaptchaTag" prefix="form" name="captcha" /> <form:captcha name="captcha" /> <form:addvalidator namespace="modules::captcha::pres::validator" class="CaptchaValidator" control="captcha" button="send" /> ... <form:button name="send" /> </html:form>
Bitte beachten Sie, dass es in der Version 1.11 nun notwendig ist, das CAPTCHA-Feld mit einem Validator zu belegen. Hierzu wird der CaptchaValidator mitgeliefert. Soll zur erweiterten Sicherheit das Feld noch mit einem Filter belegt werden, kann der CaptchaFilter aus dem Package modules::captcha::pres::filter genutzt werden.
In der Ausgabe des Formulars erzeugt das Tag ein CAPTCHA-Bild und ein Textfeld, das vom Benutzer zur Eingabe des gezeigten Strings verwendet werden muss. Die folgende Liste gibt eine Übersicht über die verfügbaren Attribute und deren Bedeutung:
  • image_style: CSS-Stil-Angaben zum CAPTCHA-Bild
  • image_class: CSS-Klassen-Angaben zum CAPTCHA-Bild
  • image_id: HTML-ID zum CAPTCHA-Bild
  • text_style: CSS-Stil-Angaben zum generierten Text-Feld
  • text_class: CSS-Klassen-Angaben zum generierten Text-Feld
  • text_id: HTML-ID zum generierten Text-Feld
  • validate: Aktiviert die Validierung
  • button: Name des Buttons, auf dessen Klick die Validierung stattfinden soll
  • clearonerror: Das optionale Attribut definiert, ob das Feld bei falscher Eingabe geleert werden soll. Enthält das Attribut einen anderen Wert als "true" oder ist nicht vorhanden, wird das Feld weiterhin vorausgefüllt.
  • clearonformerror: Das optionale Attribut definiert, ob das Feld bei geleert werden soll, wenn das Formular nicht erfolgreich validiert werden konnte. Enthält das Attribut einen anderen Wert als "true" oder ist nicht vorhanden, wird das Feld weiterhin vorausgefüllt.
  • disable_inline: Ist das optionale Attribut auf true gesetzt, so werden die Inline-CSS-Styles abgeschalten, die für die Formatierung des CAPTCHA-Bildes und dem Text-Feld eingesetzt werden, so dass diese nebeneinander erscheinen. Beinhaltet das Attribut einen anderen Wert oder ist nicht vorhanden, werden die angesprochenen Stile gesetzt.

3. Funktion des Tags

Durch die direkte Integration des CAPTCHA-Tags in das Formular kann der Tag direkten Einfluss auf die Validierung des Formulars nehmen. Wurde das CAPTCHA-Feld richtig ausgefüllt und sind alle übrigen Felder des Formulars valide, wird auch das Formular als valide gekennzeichnet. Ist das CAPTCHA-Feld nicht korrekt ausgefüllt, kann das Formular nicht abgesendet werden. Wichtig dabei ist, dass das Formular im Controller sowohl auf isSent() als auch isValid() geprüft wird. Zur Sicherheit wird bei jedem Aufruf des Formulars das CAPTCHA-Bild neu generiert.


Kommentare

Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
« 1   »
Einträge/Seite: | 5 | 10 | 15 | 20 |