Sidebar
ein-/ausblenden

WP - simpler Spamschutz bei Kommentaren

Plugin für WordPress SEO

Anzeige

SPAM
Mit Hilfe einer Checkbox frage ich in meinem Kommentarformular die "willigen Schreiber" ob sie menschlicher Natur sind. Ich filtere somit die vielen Spammails, die ansonsten bisher ereilt haben. Ich denke, dass es für die Leser nicht sonderlich mehr Aufwand ist, diese kleine Checkbox zu setzen. Außerdem sollte damit das Formular barrierefrei bleiben, hoffe ich, da ich mich in dieser Materie nicht so gut auskenne.

Mich würde interessieren, wie sinnvoll so eine Möglichkeit ist. Vielleicht liest das hier einer der Spam-Profis und kann mir etwas dazu sagen?

Für diejenigen unter euch, die es auf die gleiche Art bewerkstelligen möchten erläutere ich kurz die notwendigen Änderungen.

Achtung:

Für diese Anwendung ist ein Eingriff in die Core-Dateien notwendig und somit ist ein Update weiterhin möglich, man muss nur dann diese Änderung wieder einbauen, insofern diese Dateien vom Update betroffen sind.

Implementierung:

Zu erst bauen wir das zusätzliche Feld in das Kommentarformular. Dazu muss das Template eures Themes bearbeitet werden, in dem Fall meist die comments.php im Theme Ordner ( bei default: /wp-content/themes/default_de/comments.php ).
Zusätzlich integrieren wir noch eine kleine Abfrage, damit wir als eingeloggte User den Haken nicht setzen müssen, sondern der ist schon für uns gesetzt, insofern wir eingeloggt sind.


<p>
<input class="subscribe" type="checkbox" name="spam" id="spam" value="spam" &lt;?php if($comment_author != $user_identity) { echo "checked='checked'";  } ?&gt; />
<label class="subscribe" for="spam">SPAMSCHUTZ, ich bin menschlich? (*)</label>
</p>

Setzt die obigen Zeilen an die Stelle im Formular, also innerhalb von


<form action="... >
...
</form>

, wo die Checkbox erscheinen soll.

Nun müssen wir die wp-comments-post.php in Rootverzeichnis von WP bearbeiten.
Hier hinterlegen wir die Abfrage, ob die Checkbox auch gesetzt ist.


...
$comment_author       = trim($_POST['author']);
$comment_author_email = trim($_POST['email']);
$comment_author_url   = trim($_POST['url']);
// SPAMSCHUTZ, ich bin menschlich?
$comment_author_spam   = trim($_POST['spam']);
$comment_content      = trim($_POST['comment']);

...

if ( '' == $comment_content )
	die( __('Error: please type a comment.') );

// SPAMSCHUTZ, ich bin menschlich?
if ( '' == $comment_author_spam )
	die( __('Fehler: Wenn du menschlich bist, dann setze die Checkbox (Spamschutz).') );

...

setcookie('comment_author_url_' . COOKIEHASH, stripslashes($comment_author_url), time() + 30000000, COOKIEPATH);
// Wenn der Haken vergessen wurde, so soll der Text nach dem Zurueck-Klicken gespeichert bleiben
setcookie('comment_author_spam_' . COOKIEHASH, stripslashes($comment_author_spam), time() + 30000000, COOKIEPATH);

Die Datei wieder hoch laden und der kleine Spamschutz ist fertig.

Im Fall einer WordPress-Installation 2.0.4 sieht der Code der wp-comments-post.php folgendermaßen aus.


<?php
require( dirname(__FILE__) . '/wp-config.php' );

nocache_headers();

$comment_post_ID = (int) $_POST['comment_post_ID'];

$status = $wpdb->get_row("SELECT post_status, comment_status FROM $wpdb->posts WHERE ID = '$comment_post_ID'");

if ( empty($status->comment_status) ) {
	do_action('comment_id_not_found', $comment_post_ID);
	exit;
} elseif ( 'closed' ==  $status->comment_status ) {
	do_action('comment_closed', $comment_post_ID);
	die( __('Sorry, comments are closed for this item.') );
} elseif ( 'draft' == $status-post_status ) {
	do_action('comment_on_draft', $comment_post_ID);
	exit;
}

$comment_author       = trim($_POST['author']);
$comment_author_email = trim($_POST['email']);
$comment_author_url   = trim($_POST['url']);
// SPAMSCHUTZ, ich bin menschlich?
$comment_author_spam  = trim($_POST['spam']);
$comment_content      = trim($_POST['comment']);

// If the user is logged in
$user = wp_get_current_user();
if ( $user->ID ) :
	$comment_author       = $wpdb->escape($user->display_name);
	$comment_author_email = $wpdb->escape($user->user_email);
	$comment_author_url   = $wpdb->escape($user->user_url);
else :
	if ( get_option('comment_registration') )
		die( __('Sorry, you must be logged in to post a comment.') );
endif;

$comment_type = '';

if ( get_settings('require_name_email') && !$user->ID ) {
	if ( 6 > strlen($comment_author_email) || '' == $comment_author )
		die( __('Error: please fill the required fields (name, email).') );
	elseif ( !is_email($comment_author_email))
		die( __('Error: please enter a valid email address.') );
}

if ( '' == $comment_content )
	die( __('Error: please type a comment.') );

// SPAMSCHUTZ, ich bin menschlich?
if ( '' == $comment_author_spam )
	die( __('Fehler: Wenn du menschlich bist, dann setze die Checkbox (Spamschutz).') );

$commentdata = compact('comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content', 'comment_type', 'user_ID');

$comment_id = wp_new_comment( $commentdata );

if ( !$user->ID ) :
	$comment = get_comment($comment_id);
	setcookie('comment_author_' . COOKIEHASH, $comment->comment_author, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
	setcookie('comment_author_email_' . COOKIEHASH, $comment->comment_author_email, time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
	setcookie('comment_author_url_' . COOKIEHASH, clean_url($comment->comment_author_url), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
	setcookie('comment_author_spam_' . COOKIEHASH, clean_url($comment->comment_author_spam), time() + 30000000, COOKIEPATH, COOKIE_DOMAIN);
endif;

$location = ( empty( $_POST['redirect_to'] ) ) ? get_permalink( $comment_post_ID ) : $_POST['redirect_to']; 

wp_redirect( $location );

?>

5 Kommentare und 9 Trackbacks zu „WP - simpler Spamschutz bei Kommentaren“

  1. 1
    Pingback von | Spam zum 2.
  2. 2
    Kommentar von Edlef

    Hallo!
    Ich teste gerade diesen Spamschutz, mal sehen, wie es klappt ;.) Was mir auffiel: Man kann den Code, den Du oben angegeben hast leider nicht per "Copy-and-Paste" uebernehmen, da die (Hoch)Kommata nicht korrekt in den Code uebernommen werden (bei mir zumindest). Aber sonst eine gute Idee, mal sehen, wie sie sich bewaehrt. Wir haben im Schnitt im Moment 400 Kommentarpams pro Tag.
    Ich halte Dich auf dem Laufenden :-)

  3. 3
    Pingback von F!XMBR » Fight against SPAMEin Zwischenfazit
  4. 4
    Pingback von Insomniaonline » Blog Archive » Weiterer Spamschutz aktiv
  5. 5
    Kommentar von Pepino

    So eine Checkbox is ein bißchen suboptimal, da ein Spammskript gerne mal alle verfügbaren Checkboxen ankreuzt und somit wäre das ausgehebelt.
    Ich empfehle deshalb 2-x Radio-Buttons, so wie im Pepilog ;-)

  6. 6
    Kommentar von Torsten

    Mal testen!

  7. 7
    Pingback von Unter der Motorhaube #2 auf F!XMBR
  8. 8
    Pingback von just madchiq! » Links fuer Januar
  9. 9
    Trackback von Reflexionsschicht
  10. 10
    Pingback von Ein paar Punkte gegen Blogspam » Missis Notizblock
  11. 11
    Pingback von Fight against SPAM - The next Generation auf F!XMBR
  12. 12
    Pingback von celedyr.net » Spam
  13. 13
    Kommentar von fritzi

    Leider finde ich weder Erscheinungsdatum noch WP version, auf die sich
    dieser - sonst tolle - Artikel bezieht.
    Kann ich das nun in WP 2.5 einbauen oder nicht ??
    L.G.

  14. 14
    Kommentar von Frank Bültge

    @fritzi: ja, kannst du, weil es quasi unabhängig der Version ist, es findet vorrangig im Theme statt. Allerdings sollte nicht verschwiegen werden, dass es mittlerweile eine Reihe von Spamern gibt, die dieses Lösung kennen und austricksen. Besser ist da die Plugin-Variante via JavaScript.

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.