Czarne listy
Internet nie jest już tym samym miejscem, co kiedyś. Wszystko co dobre zostało zepsute i tak też stało się z systemami Wiki. WikiSpam, jak Spam na blogach i w mailach ciągle rośnie. Jeśli używasz DokuWiki w intranecie, to nie jest twój problem. Jednak jeśli masz zamiar wykorzystać ją w otwartym internecie możesz chcieć dodać do listy blokowanych pewne znane słowa Spamu.
Aby korzystać z czarnej listy w DokuWiki włącz opcję $conf['usewordblock'] = 1;
w conf/local.php
(domyślnie jest ona ustawiona na 1) i zmień plik conf/wordblock.local.conf
. Możesz przejrzeć zawartość pliku conf/wordblock.conf
by sprawdzić istniejącą listę blokowanych słów. Plik zawiera wyrażenia regularne (zgodne z Perl), jeśli dopasowane zostaje któreś z nich zapis jest zabroniony.
Blokowanie bazujące na IP może być wprowadzone przy użyciu dyrektyw Apache deny from lub wtyczki ipban.
By zrozumieć, dlaczego pewne treści są banowane za spam, możesz skorzystać z wtyczki whyspam by zanalizować tekst.
Źródła czarnych list
Zalecana jest aktualizacja czarnych list ze źródeł publicznych poprzez codzienne zadanie cron. Oto lista źródeł, których możesz użyć w tym celu.
Chongqed
Czarna lista utrzymywana przez ludzi na chongqed.org wydaje się być już niedostępna
$> wget http://blacklist.chongqed.org/ -O conf/wordblock.conf
Wikipedia
Dobrzy ludzie z Wikipedii utrzymują podobną czarną listę. Możesz użyć następującego polecenia by zaktualizować swoją czarną listę z tego źródła:
$> curl http://meta.wikimedia.org/wiki/Spam_blacklist?action=raw |grep -v '<pre>' > conf/wordblock.conf
Logowanie zablokowanych ataków
Ta mała zmiana umożliwi logowanie blokowanych ataków w \DATA\meta\wordblock.log i może również służyć do kontrolowania listy blokad.
Wymaga jednak modyfikacji oryginalnego pliku DokuWiki.
Plik: \inc\common.php
Poszukiwana linia:
if(preg_match('#('.join('|',$re).')#si',$text, $match=array())) { return true; }
Zmiana:
if(preg_match('#('.join('|',$re).')#si',$text, $match=array())) { preg_match('#('.join('|',$re).')#si',$text, $match); io_saveFile($conf['metadir'].'/wordblock.log', date($conf['dformat'])."\t".$match[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); return true; }