Борьба со спамерами
Как с этим бороться? Бан по IP адресу не может дать надёжной защиты, так как его можно сменить, например, у меня при каждом подключении разные IP. Можно блокировать подсеть, но при этом можете потерять много посетителей. Тем более, что спамер может воспользоваться услугами другого провайдера.
Блок по кукисам тоже не даст желаемого результата, так как Куки можно отключить. Не отчаивайтесь, выход есть. При добавлении сообщения можно его предварительно обработать и, если всё ок, добавить сообщение.
Итак, как мы видим, сообщения не очень информативные, теперь мы можем составить список таких ненужных слов. Давайте для начала создадим таблицу.
CREATE TABLE die_spamer (max_url int(2) DEFAULT '1' NOT NULL, spam_text text)
Коротко о главном
Спамера мы будем вычислять по количеству гиперссылок в сообщении и по количеству подозрительных слов.
Делаем запрос на добавление.
INSERT INTO die_spamer (max_url,spam_text) VALUES ('2','hi, hello, nice, site, good, well, job, viagra, buy, get, free, sex, website, cool, сайт, заходите, cialis, homepage ,online, welcome, generic, href')
Список слов вводим через запятую. Как это будет работать?
Очень просто, скрипт проверки сообщения, выберет все ненужные слова и кол-во ссылок на сообщение, после чего по соответствующим правилам будет проверять добавляемые сообщения, ну а после делайте с такими сообщениями что хотите.
Пример скрипта:
<?php
mysql_connect("localhost","root","password") or die (mysql_error()); // соединяемся с БД.
mysql_select_db("spamer") or die (mysql_error()); // Выбираем нашу БД.
//Ваш код
...
...
...
//начало обработки сообщения
//выбираем данные из таблы
$query=mysql_query("SELECT * FROM die_spamer") or die (mysql_error());
$config=mysql_fetch_array($query);
$antispam_array=explode(",",$config['spam_text']); // Обрабатываем массив слов.
$spam_total=count($antispam_array); // Узнаём количество слов в базе
//Обрабатываем сообщение
for ($i=1; $i<$spam_total; $i++)
{
$spam_search=substr_count($_POST['Post'], $antispam_array[$i]);
if ($spam_search != "0")
{
define (SPAMER_DETECTED,1);//Попался родной
}
}
$text_post = preg_match_all("#(^|s)((http|https|news|ftp|www)://w+[^s[]]+)#ie", $_POST['Post'], $matches);//Обрабатываем месагу.
$spam_url = count($matches[0]);//подсчитываем количество совпадений
if (defined("SPAMER_DETECTED") OR $config['max_url'] < $spam_url) {
print "Спамер??? Хе-хе!!!";
// Делаете с эти сообщением что хотите
}
//Ваш код
...
...
...
?>
Немного о функции.
$_POST['Post'] – это ваше сообщение.
Для текста. Если в сообщении попадается одно слово, которое есть в нашей базе, это ничего, два тоже, три и более- СПАМЕР ОДНОЗНАЧНО.
С УРЛ ситуация проще, в базу заносим количество допустимых УРЛ в сообщении, обрабатываем сообщение функцией preg_match_all, ищем все, что похоже на гиперссылку.
Подсчитываем количество совпадений и проверяем с максимально допустимым значением УРЛов в сообщении, если это значение больше допустимого - вы знаете, что это может означать.
Условие
if (defined("SPAMER_DETECTED") OR $config['max_url'] < $spam_url) {
print "Спамер??? Хе-хе!!!";
// Делаете с эти сообщением что хотите
}
Поможет вам расправиться со спамером.