Содержание
Чёрный список
Интернет теперь не такой, как раньше, всё хорошее портится, это касается и разных вики. Реклама в вики, как и в блогах и электронной почте, набирает обороты. Если «Докувики» используется в интранете, у вас нет такой проблемы, но если вы намереваетесь использовать её на просторах интернета, то возможно захотите добавить в чёрный список известные вам спам-слова.
Для использования чёрного списка в «Докувики» необходимо:
- включить опцию конфигурации usewordblock, либо прописать в файле
conf/local.php
строку$conf['usewordblock'] = 1;
, - отредактировать файл
conf/wordblock.local.conf
. В файлеconf/wordblock.conf
можно посмотреть существующий список блокируемых слов, в том числе с Perl-совместимыми регулярными выражениями и если вводимый текст будет соответствовать какому-либо из них, то в сохранении изменённой страницы будет отказано, однако без указания причины. Чтобы засечь совпадения в тексте по текущему списку, воспользуйтесь плагином WhySpam для анализа текста.
Блокировку по IP можно сделать, воспользовавшись запрещающим указанием (директивой) серверу Apache deny или плагином IP Banning.
Добавление и удаление блокируемых слов из списка
Вы можете добавить свои собственные блокируемые слова, создав файл conf/wordblock.local.conf
и поместив свои сокращения.
(long|loud) shouting
Отключите блокируемые слова по умолчанию, добавив в начале восклицательный знак (!
):
!woww gold
Источники чёрного списка
Рекомендуется ежедневно обновлять чёрный список из общественных ресурсов. Вот эти ресурсы:
Википедия
Хорошие люди в Википедии поддерживают подобный чёрный список. Используйте следующую команду для обновления своего чёрного списка из этого источника:
$> 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']; [...]