Спам от анонимов

Главные вкладки

Аватар пользователя sadad sadad 8 января 2013 в 14:04

Может кому-то пригодится
На моих сайтах разрешены комментарии без регистрации. Капчу не пользую - ибо ненавижу.
Комплекс мероприятий по борьбе со спамом выглядит так:

1. Из толковых стандартных антиспам модулей - самый действенный - honeypot, процентов 70 отсекает.
2. Дополнительно: самодельный модуль в котором:
- проверяется отсутствие русских букв. если нет - в очередь на модерацию. (не всем подходит, но на моих сайтах иностранцы почти не появляются)
- проверка IP по базе http://www.stopforumspam.com. Чтобы каждый раз не обращаться к базе онлайн, по крону ежедневно скачиваю обновление здесь http://www.stopforumspam.com/downloads/listed_ip_365.zip

для 6 друпал примерно так:

<?php
function mymodule_comment($comment, $op) {
$spam=false;
$comment = (object)$comment;
if ($op == 'insert') {                            
// проверка на наличие русских букв
        if(!preg_match( '/[а-яё]/ui',$comment->subject))
                {
                        $spam=true;
                        //drupal_set_message ('нет русских букв');
                }
       
//проверка на присутствие ip в спам базе, listed_ip_365.txt - предварительно скачанный список спамерских ip, ссылка есть выше
        $file = file_get_contents("listed_ip_365.txt");
        if(strstr($file,ip_address())){
            $spam=true;
            // докучи занести ip негодяя в BL сайта, хотя и не обязательно
            db_query("INSERT INTO {access} (mask, type, status) VALUES ('%s', '%s', %d)", ip_address(), 'host', 0);
            }
            else{ // если нет в файле, то на всякий случай онлайн проверка
                $xml_string = file_get_contents('http://www.stopforumspam.com/api?ip='.ip_address().'&email='.$comment->mail);
                if (strstr ($xml_string,'yes')) {
                                $spam=true;
                                db_query("INSERT INTO {access} (mask, type, status) VALUES ('%s', '%s', %d)", ip_address(), 'host', 0);
                                }
                    }

        if ($spam)
                {
                $operation = comment_operations('unpublish');
                $query = $operation['unpublish'][1];
                db_query($query, $comment->cid);
                drupal_set_message(t('Your comment has been queued for moderation by site administrators and will be published after approval.'));
                watchdog('StopSPAM', ip_address().' - Comment unpublished for DNSBL: %subject.', array('%subject' => $comment->subject), WATCHDOG_INFO, l(t('view'), 'node/'. $comment->nid, array('fragment' => 'comment-'. $comment->cid)));
                } else {
                drupal_set_message(t('Your comment was published. '));
                }
       
        }
return;
}

Для 7 друпал все то же самое с минимальными переделками

8 января 2013, Елена Сунгатова