Защита от спам-роботов (Рейтинг: +12)

Печать / RSS
Спам-роботы, на сегодняшний день, по уровню технологий достигают высоких вершин. Спам-роботы, каждый день усовершенствуются и засоряют сайты различной информацией. Целью спам-робота является размещение на сайте ссылки на некоторый ресурс или тематической информации. Однако, встречаются и просто добавление наборов символов (не имеющих смысла) и ссылок на несуществующие хосты. В любом случае, со спам-роботами нужно бороться.
Принцып их работы приблизительно такой: сначала они анализируют всемирную паутину на поиск сайтов, подходящих им по определенным критериям. Потом, индексируют страницы сайта с формами (формы коментариев/сообщений). Далее следует анализ формы и ее защиты. Если спам-программа успешно добавляет данные в форму и они размещаются на странице, то такая страница попадает в общую базу данных для дальнейшего систематического добавление спама (от 1-3 раз в день).
Защитить свой сайт полностью от проникновения нежелательной информации стало практически почти невозможным. И эффективно бороться со спамом можно, лишь используя комплекс эффективных мер.
К, таким мерам можно отнести:
1. использование капчи (капча - графический рисунок с изображением цифр/символов). Этот метод очень популярный и почти на каждом сайте вы можете найти различные формы для заполнения их посетителями использующие защитный код с помощью капчи. Вы, наверное, уже замечали насколько трудно иногда угадать посетителям, что же там изображено, настолько веб-мастера изощренно искажают цифробуквенный код. Это потому, что спам-роботы научились распознавать капчи. Если вы используете простую капчу, то шанс взлома формы возрастает.
Пример написания простой капчи на php:

<?php
$nomer = rand("1000","9999");/* выбираем случайное число от 1000 до 9999*/
$imge = imagecreate("50", "15"); /*создаем рисунок в ширину 50 пикселей и высоту 15*/
$background_color = imagecolorallocate ($imge, 255, 255, 255);/*задаем рисунку цвет фона*/
$green = imagecolorallocate($imge,10,110,190);/* устанавливаем цвет текста для нашего рисунка*/
imagestring($imge,4,4,0,$nomer,$green);/*рисуем текст с такими параметрами: $imge(наш рисунок),4 (размер шрифта (от 1 до 5)),4 (отступ на 4 пикселя слева),0 (отступ в пикселях сверху),$nomer (текст),$green (цвет текста)*/
header("Content-type: image/jpeg");/* посылаем заголовок серверу про то, что мы передаем ему рисунок формата jpeg*/
imagejpeg($imge); /*выводим рисунок*/
imagedestroy($imge);/* освобождаем память*/
?>

Путем добавления различных image-функций php, Вы можете значительно видоизменить свою капчу и повысить уровень безопасности своей формы.
Очень хорошим способом защиты будет создание капчи с простым вопросом, понятным посетителю и не подающийся анализу спам роботу. Например, указать количество фигур, простая логическая задача и т.п.
2. блокирование спамеров по ip-адресу. Этот способ может пригодится, если можно определить ip-адрес спамера, но, как правило, спам-роботы используют прокси-серверы и определить реальный ip не предоставляется возможным.
Для определения ip-адреса можно использовать следующую функцию:

<?php
$ip = $_SERVER["REMOTE_ADDR"];
//однако если бот использует анонимные прокси-сервера, а так оно скорее и есть, то пределить реальный ip-адрес Вам поможет эта функция
function getip()
{
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"),"unknown")) $ip = getenv("HTTP_CLIENT_IP");
elseif (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR");
elseif (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR");
elseif (!empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR'];
else $ip = "unknown";
return($ip);
}
$ip = getip();
?>

3. блокирование спам-роботов с помощью параметра REFERER (адрес предыдущей страницы-источника откуда выполнен переход). Если этот параметр пустой значит робот-спам напрямую выполняет запрос к Вашей форме. Ведь большинство спам-роботов так и делают, они читают страницу лишь один раз, все остальные попытки добавления спама идет с помощью прямого обращения робота к серверу. Другими словами с прокси-сервера происходит отправка уже готового запроса к серверу и передаются уже наперед известные данные.
Пример получения значения поля REFERER на php:

<?php
$referer = getenv("HTTP_REFERER"); //или
$referer = $_SERVER["HTTP_REFERER"];
?>

4. блокировка/удаление спама с помощью фильтра текста на спам-слова.
Данный вид защиты является самым эффективным. Весь переданный/полученный текст фильтруется на наличие спама по словосочетаниям и словам.
Слабым местом спам-роботов является их ограниченный по смыслу спам-текст, в котором почти всегда повторяются одинаковые ключевые слова.
Стоп-слова Вы можете занести в базу данных и проверять каждое сообщение/коментарий на их наличие используя функцию stristr (регистро-независимый вариант strstr).
Пример проверки текста комментария на наличие спам-слова "casino":
<?php
if (stristr(html_entity_decode("Это текст комментария, здесь спам-робот может пригласить Вас сыграть в казиноcasino"),"casino") == true) {
echo "Найдены элементы спама!"
} else {
echo "Комментарий успешно добавлен!"
}
?>

Как видно в примере, мы делаем проверку текста комментария/сообщения на наличие спама до того как добавляем в базу данных. Но, также, желательно делать проверку и после того как информация попала в базу данных, потому что спам-роботы могут изменять символьное представление текста через функции, чтобы Ваш фильтр не сработал и в тоже время, учитывая дальнейшую обработку текста сервером, в базу данных будет занесено слово/словосочетание аналогичное Вашему слову-спаму.
Спам-роботы, также, могут передавать форме слова/словосочетания которые состоят из вариаций символов и кода символов html. Для того, чтобы перевести html код в символы используем функцию html_entity_decode.
Вот пожалуй и все, надеюсь перечисленные выше способы защиты ваших страниц от спама помогут Вам
Автор: Гость (08.05.10 / 17:37)
Анти-Спам, боты, капча, роботы
Рейтинг: +12
Просмотры: 1924
Комментарии (2) »