Это старая версия документа!
Чёрный список
Интернет теперь не такой, как раньше, всё хорошее портится, это касается и разных вики. Реклама в вики, как и в блогах и электронной почте, набирает обороты. Если «ДокуВики» используется в интранете, у вас нет такой проблемы, но если вы намереваетесь использовать её на просторах интернета, то возможно захотите добавить в чёрный список известные вам спам-слова.
Для использования чёрного списка в «ДокуВики» необходимо:
- включить опцию конфигурации «usewordblock», либо прописать в файле
conf/local.php
строку «$conf['usewordblock'] = 1;
», - отредактировать файл
conf/wordblock.local.conf
. В файлеconf/wordblock.conf
можно посмотреть существующий список блокируемых слов, в том числе с Perl-совместимыми регулярными выражениями и если вводимый текст будет соответствовать какому-либо из них, то в сохранении изменённой страницы будет отказано, однако без указания причины. Чтобы засечь совпадения в тексте по текущему списку, воспользуйтесь плагином «whyspam» для анализа текста.
Блокировку по IP можно сделать, воспользовавшись запрещающим указанием (директивой) серверу «Апач» «deny» или плагином «IP Banning».
Источники чёрного списка
Рекомендуется ежедневно обновлять чёрный список из общественных ресурсов. Вот эти ресурсы:
Википедия
Хорошие люди в Википедии поддерживают подобный чёрный список. Используйте следующую команду для обновления своего чёрного списка из этого источника:
$> curl http://meta.wikimedia.org/wiki/Spam_blacklist?action=raw |grep -v '<pre>' > conf/wordblock.conf
Ведение журнала блокируемых атак
Небольшое изменение файла inc/common.php позволит регистрировать заблокированные атаки в файле /data/meta/wordblock.log
и может быть использовано для корректировки чёрного списка.
Найдите строку:
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']; [...]
Замените на:
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']; [...]