Dr. Web-Kontaktformularbausatz 1.5: Spam erkennungsdienstlich behandelt

Werbung

Websitebetreiber befinden sich in einem fortwährenden Kampf gegen Spammer und Kontaktformular-Missbraucher. Die neue Version des Dr. Web-Kontaktformular-Baukastens beherrscht Spam-Erkennung mittels Akismet und hilft so, eine weitere Schlacht erfolgreich zu schlagen.

Akismet wird den Nutzern von WordPress bekannt sein, denn ein Akismet-Plugin gehört zum Standardumfang der Blogsoftware. Der Dienst funktioniert wie eine Black-Box. Akismet beantwortet die Benutzereingabe mit einem “Spam” oder “Nicht Spam”. Die Nutzung ist also sehr einfach und daher kann die Funktion ohne Schwierigkeiten auch in unseren Baukasten eingebaut werden.

Akismet eingebaut in fünf Schritten
Die Kommunikation mit Akismet erledigt die simple Akismet-Klasse von Bret Kuhn. Sie ist im Archiv der neuen Baukasten-Version (der Artikel dazu) enthalten. Die folgenden fünf Schritte beschreiben den Einbau von Akismet. Alternativ können Sie auch die fertigen Dateien aus dem Archiv mit der neuen Version des Baukastens verwenden.

Schritt 1: Konfiguration

 define( 'AKISMET_KEY', '');
define( 'AKISMET_MARK', true);
define( 'HOME_PAGE', ""); 

Um den Akismet-Dienst nutzen zu können, benötigen Sie einen Akismet-Schlüssel. Diesen erhalten Sie kostenlos nach einer Registrierung auf wordpress.com. Dabei ist es unerheblich, ob Sie WordPress einsetzen oder nicht. Den Schlüssel schreiben Sie in einfache Anführungszeichen, also zum Beispiel so:

      define( 'AKISMET_KEY', 'schluessel'); 

Die Akismet-Prüfung ist aktiviert, sobald dort ein Schlüssel eingetragen ist. Wollen Sie die Prüfung vorübergehend abschalten, weisen Sie der Konstante ‘AKISMET_KEY’ eine leere Zeichenkette zu.

Mit der Konstanten ‘AKISMET_MARK’ steuern Sie, was im Falle einer positiven Spam-Erkennung passieren soll. Hat die Konstante den Wert ‘true’ (ohne Anführungszeichen!), wird die Nachricht nur im Betreff markiert. Falls der Nutzer ein Häkchen bei “Kopie an mich senden” gesetzt hat, würde in diesem Fall allerdings keine Kopie gesendet werden. So wird das Missbrauchspotenzial des Formulars gesenkt, wenn beispielsweise ein Spammer die E-Mail-Adresse seines Spam-Opfers als vermeintlichen Urheber der Nachricht eingibt. Hat die Konstante den Wert ‘false’ und wird die Nachricht als Spam erkannt, bricht das Skript die Bearbeitung mit einer Fehlermeldung ab.

Die Adresse Ihrer Homepage geben Sie als Wert für die Konstante ‘HOME_PAGE’ ein. Dies ist in der Akismet-API so vorgesehen. Geben Sie die volle URL an, inklusive “http://” am Anfang.

Schritt 2: Akismet-Klasse einbinden
Die Akismet-Klasse muss jetzt eingebunden werden. Der Block ‘Includes einbinden’ sieht danach so aus:

      // Includes einbinden
YDInclude( 'YDForm.php' );
YDInclude( 'YDRequest.php' );
YDInclude( 'YDTemplate.php' );
YDInclude( 'YDEmail.php' );
YDInclude( 'YDDrWebPersistent.php' );
YDInclude( 'akismet.class.php' ); 

Schritt 3: Akismet-Schnittstelle
In Zeile 200 folgt der wesentliche Teil der Erweiterung. Die neue Funktion checkAkismet() steuert die Akismet-Klasse an und dient als Schnittstelle des Skriptes.

        function checkAkismet($eingabe) {
    if( AKISMET_KEY === '' )
      return false;

    $comment = array(  'author'    => $eingabe['lesername'],
                      'email'     => $eingabe['lesermail'],
                      'website'   => HOME_PAGE,
                      'body'      => $eingabe['lesernachricht'],
    );

    $akismet = new Akismet(HOME_PAGE, AKISMET_KEY, $comment);

    if($akismet->errorsExist())
       trigger_error("Konnte keine korrekte Verbindung zum
Akismet-Server erhalten! Prüfen Sie bitte den
Akismet-Schlüssel.", E_USER_ERROR);

    return $akismet->isSpam();
  } 

Der Rückgabewert der Funktion ist das Ergebnis der Spam-Prüfung.

Schritt 4: Was tun bei Spam?
In Zeile 213 wird zukünftig entschieden, was mit Spam passieren soll: die Verarbeitung abbrechen oder die Nachricht nur als Spam markieren?

          $isSpam = $this->checkAkismet($eingaben);
    if($isSpam === true && AKISMET_MARK === false)
      trigger_error("Spam", E_USER_ERROR);

Schritt 5: Die letzten Änderungen
Die Zeile 246 enthielt bislang diese Zeile:

        $eml->setSubject( sprintf( MAIL_SUBJECT, $betreff[ $eingaben['betreff']['value'] ] ) );

Diese ändern Sie bitte wie folgt, so dass der Betreff bei Bedarf tatsächlich markiert wird:

          $betreffvorlage = $isSpam === true ? '[SPAM] ' . MAIL_SUBJECT : MAIL_SUBJECT;
    $eml->setSubject( sprintf( $betreffvorlage, $betreff[ $eingaben['betreff']['value'] ] ) );

Die Zeile 255 mit diesem Inhalt

        if($eingaben['kopie']['value'] === 0) 

wird durch diese Zeile ersetzt:

        if($isSpam === true || $eingaben['kopie']['value'] === 0)

Die neue If-Anweisung bewirkt, dass keine E-Mail-Kopien gesendet werden, wenn der Inhalt der Nachricht als Spam erkannt wurde.

Artikel zum Thema:

  • Dr. Web-Kontaktformular-Bausatz
  • Tipps zum Dr. Web Kontaktformular-Bausatz
  • Unsichere Kontaktformulare

Erstveröffentlichung am 08.03.2007

Weitere Beiträge:

, ,

Noch keine Kommentare vorhanden!

Hinterlasse eine Antwort

Bitte bei weiteren Kommentaren per Email benarichtigen! Auch möglich: Abo ohne Kommentar.

Spam protection by WP Captcha-Free