Blacklisting
Het internet is niet beter dan iets anders. Al het goede raakt bedorven en zo is het ook met Wiki's. WikiSpam, zoals Spam in blogs en email nemen toe. Als je DokuWiki in je Intranet gebruikt is dit geen probleem voor jou, maar als je van plan bent het op het open internet te plaatsen wil je sommige bekende Spamwoorden blacklisten.
Om een blacklist in DokuWiki te gebruiken moet je de configuratieoptie usewordblock inschakelen (standaard aan) en bewerk het conf/wordblock.local.conf
-bestand. Je kunt een blik werpen in het bestand conf/wordblock.conf
voor een lijst met bestaande geblokkeerde woorden. Het bestand bevat Regular Expressions (Perl compatibel) als een van deze overeenkomt is opslaan niet mogelijk.
IP gebaseerd blokkeren kan worden gedaan met Apache's deny from directives of met de ipban plugin.
Om te begrijpen waarom een bepaalde tekst geblokkeerd wordt als spam, kun je de plugin whyspam gebruiken om de tekst te analyseren.
Blacklist bronnen
Het wordt aanbevolen om de blacklist dagelijks met een cronjob te updaten vanuit publieke bronnen. Hier is een lijst van bronnen die gebruikt kunnen worden.
Chongqed
De blacklist wordt onderhouden door mensen van chongqed.org en lijkt niet langer beschikbaar
$> wget http://blacklist.chongqed.org/ -O conf/wordblock.conf
Wikipedia
De aardige mensen van Wikipedia onderhouden een vergelijkbare blacklist. Je kunt het volgende commando gebruiken om je blacklist vanuit deze bron te updaten:
$> curl http://meta.wikimedia.org/wiki/Spam_blacklist?action=raw |grep -v '<pre>' > conf/wordblock.conf
Het loggen van geblokkeerde aanvallen
Deze kleine wijziging maakt het mogelijk geblokkeerde aanvallen te loggen in \DATA\meta\wordblock.log en kan worden gebruikt om de blokkeerlijst te debugging.
Het is nodig om een originele DokuWiki bestand aan te passen.
Bestand: \inc\common.php
Zoek regel:
function checkwordblock($text=''){ [...] if(count($re) && preg_match('#('.join('|',$re).')#si',$text,$matches)) { // prepare event data $data['matches'] = $matches; $data['userinfo']['ip'] = $_SERVER['REMOTE_ADDR']; [...]
Verander het in:
function checkwordblock($text=''){ [...] if(count($re) && preg_match('#('.join('|',$re).')#si',$text,$matches)) { // prepare event data io_saveFile($conf['metadir'].'/wordblock.log', strftime($conf['dformat'])."\t".$matches[0]."\t".$ID.$_SERVER['REMOTE_USER']."\t".$_SERVER['REMOTE_ADDR'].":".$_SERVER['SERVER_PORT']."\t".gethostbyaddr($_SERVER['REMOTE_ADDR'])."\t".$_SERVER['HTTP_USER_AGENT']."\n", true); $data['matches'] = $matches; $data['userinfo']['ip'] = $_SERVER['REMOTE_ADDR']; [...]