Stefans Wiki



DokuWiki Discussion

Ziel

Mit Plugin Discussion können Besucher des Wikis auf einfache Art und Weise Kommentare hinterlassen. Leider hat meine Erfahrung gezeigt das das Plugin sehr oft für Spam missbraucht wird. Das Plugin soll keine Eingaben mit möglichem Spam mehr abspeichern.

Lösung

Da der Spam (zumindest der bei mir aufgelaufen ist) fast immer aus HTML-Code oder BB-Code in Verbindung mit Links bestand, soll das Plugin Discussion so abgeändert werden das diese Art von Eingaben nicht mehr entgegengenommen werden.

Dazu wird die Datei discussion.php aus dem Plugin entsprechend abgeändert. In dieser Datei wird der Anfang bis zur ersten Funktion (ist die Funktion tpl_discussion()) durch den folgenden Code ersetzt:

 1: <?php
 2:
 3: /**
 4:  * Allows to add comments to a wiki page
 5:  * The discussion is stored in a separate file discussion:ns:wikipage
 6:  *
 7:  * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
 8:  * @author  Esther Brunner <esther@kaffeehaus.ch>
 9:  * @author  Dave Lawson <dlawson@masterytech.com>
10:  * @author  Pavel Vitis <pavel [dot] vitis [at] seznam [dot] cz>
11:  */
12:
13: global $ID;
14: global $REV;
15: global $ACT;
16:
17: $spam = @$_GET['spam'];
18: if ($spam == 1) {
19:     msg('Kommentar wegen möglichem SPAM nicht abgespeichert!', -1);
20: }
21:
22: if (isDiscussionID($ID) && file_exists(wikiFN($ID))) {
23:   session_write_close();
24:
25:   // Comment was submitted, let's save it
26:   $sendComment = (int)$_POST['sendcomment'];
27:   if ($sendComment == 1) {
28:     $fullname = $_REQUEST['fullname'];
29:     $email = $_REQUEST['email'];
30:     $comment = $_REQUEST['wikitext'];
31:     $spam = 0;
32:
33:     $lowercomment = strtolower($comment);
34:     $links = substr_count($lowercomment, '[url=');
35:     $links+= substr_count($lowercomment, '[url]');
36:     $links+= substr_count($lowercomment, 'href=');
37:
38:     if ($links != 0) $spam = 1;
39:
40:     // Save only if comment is not empty
41:     if (trim($comment, " \t\n") != '' and $spam == 0) saveComment($ID, $fullname, $email, $comment);
42:   }
43:
44:   // don't show discussion files, show main files instead
45:   if ($ACT == 'show') {
46:     if ($spam == 1) {
47:         header("Location: ".wl(stripDiscussionNS($ID), '', true).'?spam=1');
48:     } else {
49:         header("Location: ".wl(stripDiscussionNS($ID), '', true).'#discussion');
50:     }
51:
52:     exit();
53:   }
54: }

Funktion

Wie man sehen kann sucht nun das Plugin nach den Textstellen [url=, [url] und href= und zählt diese. Findet das Plugin nur eine von diesen Textstellen, so wird der Eintrag mit einer entsprechenden Fehlermeldung abgewiesen. Will man weitere Texte als Spam erkennen lassen, so erweitert man den Code um folgende Zeile:

$links+= substr_count($lowercomment, '[zu suchender Text]');
php/dokuwiki/discussion.txt · Zuletzt geändert: 24.03.2011 22:06 (Externe Bearbeitung)
Quelle: http://stefanjahn.de/php:dokuwiki:discussion
Webseite: http://stefanjahn.de