Table des matières
Bannissement par liste noire
Internet n'est plus le lieu qu'il a été. Toute bonne chose est corrompue, et il en va de même pour les wikis. Le WikiSpam, comme le spam dans les blogs et courriels est en augmentation. Si vous utilisez DokuWiki sur votre intranet, alors il n'y a aucun problème. Mais si vous voulez l'utiliser sur l'internet ouvert, vous pourriez vouloir bannir certains mots de spam connus.
Ce mécanisme empêche l'enregistrement de pages contenant un mot placé en liste noire.
Pour utiliser une liste noire dans DokuWiki :
- Activez l'option usewordblock
- éditez ensuite le fichier
conf/wordblock.local.conf
. Vous pouvez voir la liste des termes bannis par défaut dans le fichierconf/wordblock.conf
.
Le fichier contient des expressions régulières (compatible perl ou PCRE). Si l'une d'elles correspond, l'enregistrement d'une page est refusé. Pour comprendre la raison de l'inscription d'un certain texte dans la liste noire, vous pouvez utiliser l'extension whyspam pour analyser le texte.
On peut mettre en place un bannissement basé sur des adresses IP soit en utilisant l'extension ipban, soit en agissant sur le serveur web. Par exemple avec la directive deny from d'apache 2.2 ou la directive Require not ip d'Apache 2.4.
Sources de listes noires
Il est recommandé de mettre à jour la liste noire par une tâche planifiée quotidienne à partir d'une source externe de confiance. Ci après, quelques sources externes.
Wikipedia
Les gentilles personnes de Wikipedia maintiennent une telle liste. Vous pouvez utiliser cette commande pour mettre à jour votre liste noire à partir de cette source :
$> curl -sk https://meta.wikimedia.org/wiki/Spam_blacklist?action=raw | egrep -v '<?pre>' > conf/wordblock.local.conf
N'oubliez de créer le fichier conf/wordblock.local.conf.
Journaux des attaques bloquées
Il est possible d'obtenir un journal des attaques bloquées dans le fichier/data/meta/wordblock.log
en modifiant le fichier inc/common.php, utile également pour résoudre le débogage de listes de blocage
Rechercher la section :
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']; [...]
Changez la par:
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']; [...]