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.
Hallo Horst,
ich habe das bei mir jetzt auch installiert. Mal sehen, ob es Beschwerden gibt, weil keine URL mehr eingetragen wird. Viele kommentieren wahrscheinlich nur deshalb, damit sie die hinterlassen können. Kommentierst du hier, kommentier ich dort. So läuft es doch – oder? 🙂
Vorschlag: ein weiteres Kommentarfeld anlegen, das dann statt der URL versteckt wird. Aber auch hierfür fehlen mir die PHP-Kenntnisse.
Das ist auch das übliche Vorgehen. Mein Snippet ist nun mal anders.
Ja, so ist das eigentlich. Es gibt Menschen denen ist das Hinterlassen der URL wichtig. Hier im Blog ist das anders. Ich habe nur einige wenige treue Leser. Der Großteil der Menschen, die hier Kommentare hinterlassen, kommen über Google hierher. Die vermissen das Feld URL nicht.
Auch ein guter Ansatz, habe ich gleich mal übernommen. Danke.
Bei deiner vorigen Lösung hat mir gefallen, dass die Anzahl der geblockten Kommentare im Dashboard angezeigt wurden. Lässt sich deine neue Lösung so abändern, dass die Zahl der Kommentare im Papierkorb im Dashboard angezeigt werden? Vermutlich ja, aber leider kann ich dafür nicht genügen PHP.
Grüße vom Bodensee
Dieter