Einfache AntiSpam Funktion für WordPress

Ich habe in der Vergangenheit schon einige Versionen einer einfachen AntiSpam-Funktion für WordPress veröffentlicht. Als nützlich hat sich dabei eine abgeänderte Variante des einfachen Honeypots erwiesen.

Diese Funktion besteht aus nur 4 Zeilen und setzt dabei auf einen „Honeypot“. Ein „Honeypot“ ist schnell erklärt. Man nehme ein zusätzliches Kommentarfeld und verstecke es per CSS vor dem Leser. Der Leser, der das Feld nicht sieht, wird es nicht ausfüllen. Der Spambot dagegen schon. Denn der sieht die Seite anders. Fehlt nur noch eine einfache Abfrage die klärt, ob das versteckte Feld ausgefüllt ist und den Kommentar dann als Spam behandelt. Und genau diese Abfrage enthält die nachfolgende Funktion.

/**
 * AntiSpam der Kommentarfunktion
 * ------------------------------
 * Schei... Spammer. Ihr kommt hier nicht rein!!!
 * Formularelement 'Website' dient als Honeypot. Ist es ausgefüllt wird
 * der Kommentar als Spam erkannt und im Papierkorb gespeichert.
 * Funktioniert nur zusammen mit einem Style in der 'styles.css'
 */
 
function check_honeypot( $approved ) {
  return empty( $_POST['url'] ) ? $approved : 'trash';
}
add_filter('pre_comment_approved', 'check_honeypot', 9999, 1);

Ich nutze als das Kommentarfeld „Website“ als Honeypot, das ich mit nachfolgendem CSS ausblende.

/* Honeypot --------------------------------------------------------------------*/
.comment-form-url, 
.comment-form-url label,
.comment-form-url input {
  opacity: 0;
  position: absolute;
  top: 0;
  left: 0;
  height: 0;
  width: 0;
  z-index: -1;
}

Das Besondere dabei ist, dass die Spam-Kommentare bei dieser Funktion in den Papierkorb wandern. Dafür sorgt in der Funktion $approved : 'trash'. Das hat den Vorteil, dass der Spam nach 30Tagen gelöscht wird. Sollte sich aus Versehen ein sinnvoller Kommentar in den Papierkorb verirren, was noch nie vorgekommen ist, dann fische ich ihn wieder raus.

Wichtig: Ich habe dieses Snippets, hier in diesem Blog, getestet. Bei mir läuft es fehlerfrei. Ihr solltet, falls ihr meinen Code nutzt, trotzdem vorsichtig sein. Ich empfehle eine Sicherung der Datei die ihr ändert und auch der gesamten Installation bevor ihr den Code-Schnipsel bei euch einbaut.