Rubrikauswahl:

Die Verweise zu einzelnen Seiten der aktuell ausgewählten Rubrik finden Sie unterhalb des folgenden Textes.


Werkzeuge für Selbermacher

Thema PHP ScriptSchutz vor Formularspam

Sie betreiben ein Forum oder Gästebuch auf Ihren Webseiten? Sie bieten Besuchern Ihres Weblogs eine Kommentarfunktion an? – Haben Sie schon die Bekanntschaft von Formularspambots gemacht, die Ihre Besucherschnittstelle mit Werbemüll verstopfen?

Sichern Sie Ihre Formulare zuverlässig und dauerhaft mit den PHP-Funktionen des Formspam Guards. Wie das funktioniert, können Sie sich hier im Beispiel ansehen:

Formspam Guard ausprobieren

Bitte geben Sie in das unten stehende Formularfeld die drei angegebenen Großbuchstaben oder Ziffern ein und schicken sie zum Testen ab:

 = 

Na und, sagen Sie? Was daran so bedeutend sei, fragen Sie? – Die Sicherheit gegen Spambots entsteht bei Formspam Guard durch eine Kombination verschiedener Verfahren, die auf dem Ersetzen von Zeichen durch Pseudografik, sowie dem dynamischen Generieren von Daten auf Basis des Zufallsprinzip beruhen. Nur Menschen ist es möglich, die Zeichen zu interpretieren und in das Formular einzugeben. Mehr dazu finden Neugierige im Quelltext dieser Seite, Lesewillige weiter unten in der Detailinformation.

Download Formspam Guard V1.2 (17 KByte)

Die aktuelle Version der Funktionsbibliothek können Sie sich kostenfrei und zur freien Verwendung auf Ihren Rechner laden: Formspam Guard V1.2 — Bitte beachten Sie in diesem Zusammenhang meine Anmerkungen zum Urheberrecht.

Detailinformation

Die Funktionen von Formspam Guard kann man auf einfache Weise in jedes bestehende Eingabeformular integrieren, das vor Spambots geschützt werden soll. Ob Gästebücher, Foren, oder sonstige Kommentarformulare, Formspam Guard ist universell einsetzbar.

Nach dem Einbinden einer PHP-Datei verwendet man zwei Funktionen, mit denen zunächst das Formular erweitert wird:

fsg_formcode() liefert in einer Liste drei HTML-Sequenzen, die man an geeigneter Stelle in jedes beliebige Formular einbauen kann. Die erste Sequenz enthält ein verstecktes Formularfeld, das einen periodisch wechselnden Prüfcode an die verarbeitende Seite weiterreicht. Die zweite Sequenz enthält in einer Tabelle das Herzstück von Formspam Guard: die Darstellung einer Zeichenkette, deren Länge konfigurierbar ist und die der Ausfüllende in ein zusätzliches Textfeld des Formulars abtippen muss. Die dritte HTML-Sequenz enthält den Kode für genau dieses zusätzliche Formularfeld für die Zeichenkopie.

fsg_checkmatch() wird auf der verarbeitenden Webseite aufgerufen. Anhand der übergebenen Werte prüft die Funktion, ob die angezeigte Zeichenkette mit der abgetippten übereinstimmt.

Die Darstellung der Zeichen erfolgt mit Hilfe von HTML-Tabellen und den Hintergrundfarben der einzelnen Zellen. Zeichen- und Hintergrundfarbe kann man frei konfigurieren, so dass über den Kontrast von jeder Installation von Formspam Guard zur nächsten Unterschiede bestehen können. Ein maschinelles Erkennen der Buchstaben und Ziffern ist de facto ausgeschlossen.

Der Prüfcode, der in dem versteckten Formularfeld übergeben wird, ist für gleiche Zeichenketten nicht etwa immer gleich. Er wechselt periodisch seine Zusammensetzung. Dadurch wäre selbst für Spambots, die speziell auf die Programmlogik von Formspam Guard programmiert wurden, kaum ein Durchkommen möglich.

Wer darüber hinaus noch weitere Sicherheit erzeugen will, kann eine eigene Tabelle für die Pseudografiken erzeugen, die auf einem beliebigen Font beruhen und nochmals für abweichende Darstellung sorgen kann.

^

Einbinden in PHP-Quelltext

(1) Öffnen Sie die Datei formspamguard.inc, die Sie in der Archivdatei finden, mit einem Texteditor. In Zeile 57 der Datei muss die Definition der Konstanten FSG_DIRPATH ergänzt werden:

define( FSG_DIRPATH, "" );

Zwischen den beiden Anführungszeichen muss der Name des Verzeichnisses auf dem Server eingetragen werden, in dem die Datei danach abgelegt werden soll. Dies kann ein relativer Pfadname sein, der sich auf das Verzeichnis bezieht, in dem die Datei liegt, von der aus die Funktionen aufgerufen werden. Man kann auch einen absoluten Pfad angeben, der den gesamten Verzeichnispfad auf dem Server – nicht etwa den URL! – enthalten muss.
Achtung: Bleibt die Konstante nicht leer, so muss sie auf das Zeichen "/" enden.

^

(2) Unterhalb der Zeile 57 gibt es weitere Einstellungsmöglichkeiten, die verwendet werden können, jedoch nicht müssen:

define( FSG_LETTER_COUNT, 3 );

Die Anzahl der Pseudografikzeichen ist über diesen Wert auf drei voreingestellt.

define( FSG_LETTER_COLOR, "#444" );

Die Farbe der Buchstaben in den Pseudografiken ist mit Anthrazit vorbelegt. Verwenden Sie hier beliebig entweder hexadezimale Farbcodes oder auch Farbnamen.

define( FSG_BACKGR_COLOR, "#feb" );

Die Farbe des Zeichenhintergrundes in den Pseudografiken ist auf mittelgelb eingestellt. Auch hier sind Hexadezimalwerte oder Farbnamen möglich.

define( FSG_CODEFORM_PAR, "" );

Das Formularfeld, in das die Zeichen kopiert werden müssen, ist nur mit den wichtigsten Parametern versehen. Über diese Einstellung kann man weitere Parameter hinzufügen.
Beispiele: "size='5'", oder "style='width: 50px;'", oder "class='bob'", oder Kombinationen aus solchen Parametern.

define( FSG_UPDATE_MINS, 180 );

Die Prüfcodes zu den Pseudografiken werden standardmäßig alle drei Stunden neu generiert. Setzt man die Anzahl der Minuten herab, erfolgt das Ersetzen häufiger. Man sollte stets einen Wert wählen, der sicherstellt, dass Besucher genug Zeit haben, ihr Formular auszufüllen und abzuschicken, bevor diese Zeitspanne abgelaufen ist. Sonst führt auch korrektes Abtippen unter Umständen zu Fehlermeldungen.

^

(3) Nach dem Ändern der Einstellungen laden Sie die Datei formspamguard.inc in das Serververzeichnis, das Sie unter FSG_DIRPATH angegeben haben. Achten Sie darauf, dass die meisten Installationen von Webservern Zugriffe über FTP und über HTTP verschiedenen Benutzern zuordnen. Allerdings gehören der »FTP-User« und der »WWW-User« in der weit überwiegenden Mehrheit der Installationen immerhin der gleichen Arbeitsgruppe an. Ihre Besucher benötigen über ihre Browser Schreibrecht im Verzeichnis, in dem formspamguard.inc abgelegt wurde.

Danach binden Sie die Datei wie üblich in Ihren Quelltext ein:

<?php include( "...formspamguard.inc" ); ?>

Die drei Pünktchen stehen dabei für eventuell notwendige Pfadangaben.

^

(4) Unterhalb des Includes stehen Ihnen die beiden Funktionen zum Prüfen der Übereinstimmung fsg_checkmatch() und zum Erzeugen der HTML-Fragmente für Ihr Formular fsg_formcode() zur Verfügung:

fsg_checkmatch() gibt 1 zurück bei Übereinstimmung, -1 bei Fehlern und 0, falls die POST-Variablen gar nicht besetzt sind, also das Formular noch nicht abgeschickt wurde.

fsg_formcode() gibt einen Array (Liste) von HTML-Fragmenten zurück. Im Element [0] des Array steht das versteckte Formularfeld mit dem Prüfcode. Im zweiten Element [1] die Pseudografik, beginnend mit <table> und endend mit </table>. Im dritten Element [2] befindet sich das Formularfeld, in das die Texteingabe erfolgen soll.

Sie können sich ein Beispiel für den Einsatz der Funktionen in der dem Archiv aus dem Download beiliegenden Datei example.php ansehen.

^

(5) Die Version 1.2 des Formspam Guard wurde nochmals stark in Bezug auf den Speicherverbrauch optimiert. Bei einer Länge von drei Zeichen erzeugt jede Pseudografik nur mehr zwischen drei und zehn Kilobyte Datentransfervolumen, je nach Zusammensetzung der Einzelzeichen. In V1.0 waren dies noch über 60 KB pro Grafik.
Diese Transferkosten sinken anteilmäßig, wenn man die Grafiken auf zwei oder gar nur ein Zufallszeichen reduziert; siehe dazu Punkt (2).

Interessanter Nebeneffekt der Optimierung ist, dass durch das Komprimieren des Kodes für die Pseudografiken die Sicherheit gegen Versuche, Zeichen durch Bots automatisch rekonstruieren zu lassen, nochmals gesteigert wurde. Die Grafiktabellen variieren nun so stark, dass sie sich jeder Analyse vollkommen verschließen.

Wer darüber hinaus den Datendurchsatz weiter senken möchte, kann in den Zeile 724 und 725 der Datei formspamguard.inc Änderungen vornehmen. Die Standardversion benötigt umfangreiche CSS-Definitionen; wer sich auskennt und diese in eine externe CSS-Datei auslagert, spart nochmals ein paar Kilobyte Durchsatz pro Seitenaufruf ein.

^