Главная страница статей --> Советы по фотошопу, графике и хитрости в построении php кода

Ловушка для спам-бота

Источник: realcoding.net

Многие спам-боты, чтобы скрыть свои реальные имена (названия), которые легко отследить по записи user_agent, изменяют эту запись, меняя её на записи разных браузеров (например: mozilla/4.0 (compatible; msie 5.5; windows nt 5.0) и так далее). Также эти боты игнорируют стандарты записей для файла robots.txt (описание стандарта Вы можете прочесть здесь http://www.robotstxt.org/wc/exclusion.html robots.txt standard).

Можно, конечно, пойти путём записи нужных инструкций в файл robots.txt, а можно и предпринять другой способ, который мы опишем ниже.

Метод №1

Используем специальную директорию /bot-trap:
1. создайте поддиректорию /bot-trap (можете использовать любое другое имя)
2. сделайте такую запись в файле robots.txt:

user-agent: *
disallow: /bot-trap/

3. вставьте невидимую ссылку (это пиксел размера 1х1) в самом начале входной страницы сайта:

width=1

Теперь можно ждать и просматривать лог сервера, чтобы посмотреть кто перешёл по этой ссылке.
Человек не увидит этой ссылки, поэтому не сможет по ней перейти, а поисковые системы управляются директивами, записанными в фале robots.txt , поэтому никогда не посетят директорию /bot-trap.

4. В созданную нами директорию мы поместим /bot-trap/index.php. С помощью этого скрипта мы будем автоматически сохранять все ip адреса в файл blacklist.dat.
Для начала создайте пустой файл ../blacklist.dat и сделайте его доступным для чтения и записи на сервере.

* В тексте скрипта измените некоторые значения

<?php
if(phpversion() >= 4.2.0) {
extract($_server);
}
?>
<html>
<head><title> </title></head>
<body>
<p>Здесь нечего смотреть. Так что же Вы здесь делаете?</p>
<p><a href=http://your.domain.ru/>вернуться назад</a></p>
<?php
$badbot
= 0;
/* перебираем все записи файла blacklist.dat, чтобы не допустить задвоенности данных */
$filename = ../blacklist.dat;
$fp = fopen($filename, r) or die (Ошибка открытия файла ... <br>n);
while (
$line = fgets($fp,255)) {
$u = explode( ,$line);
if (
ereg($u[0],$remote_addr)) {$badbot++;}
}
fclose($fp);
if (
$badbot == 0) {
/* отсылаем информацию веб-мастеру */
$tmestamp = time();
$datum = date(y-m-d (d) h:i:s,$tmestamp);
$from = badbot-watch@domain.ru;
$to = hostmaster@domain.ru;
$subject = Внимание! На сайт заходил спам-бот!;
$msg = Бот пришёл с $request_uri $datum n;
$msg .= адрес $remote_addr, агент $http_user_agentn;
mail($to, $subject, $msg, from: $from);
/* добавляем запись в лог-файл blacklist.dat */
$fp = fopen($filename,a+);
fwrite($fp,$remote_addr - - [$datum] $request_method $request_uri $server_protocol $http_referer $http_user_agentn);
fclose($fp);
}
?>
</body>
</html>

5. Чтобы исключить повторный заход спам-бота на страницвы сайта, перед выводом любой страница сайта нужно проверять содержимое файла blacklist.dat:

<?php include($_server[document_root] . /blacklist.php); ?>

Это текст скрипта blacklist.php , который нужно подключать ко всем страницам Вашего сайта:

<?php
if(phpversion() >= 4.2.0) {
extract($_server);
}
$badbot = 0;
/* перебираем все записи файла blacklist.dat */
$filename = ../blacklist.dat;
$fp = fopen($filename, r) or die (Ошибка открытия файла ... <br>n);
while (
$line = fgets($fp,255)) {
$u = explode( ,$line);
if (
ereg($u[0],$remote_addr)) {$badbot++;}
}
fclose($fp);
if (
$badbot > 0) { /* это спам-бот, запрещаем вход на сайт */
sleep(12);
print (
<html><head>n);
print (
<title>Сайт недоступен.</title>n);
print (
</head><body>n);
print (
<center><h1>Добро пожаловать!</h1></center>n);
print (
<p><center>Этот сайт временно недоступен ...</center></p>n);
print (
<p><center>Если Вы считаете, что это ошибка, отправьте письмо владельцу сайта.</center></p>n);
print (
</body></html>n);
exit;
}
?>

Метод №2

Другой метод не использует php и также запрещает доступ спам-ботов к Вашему сайту. Он заключается в использовании файла .htaccess.

Пример записи:

setenvifnocase user-agent indy library bad_bot
setenvifnocase user-agent internet explore 5.x bad_bot
setenvif remote_addr 195.154.174.[0-9]+ bad_bot
setenvif remote_addr 211.101.[45].[0-9]+ bad_bot
order allow,deny
allow from all
deny from env=bad_bot

Надеемся, что это поможет Вам избавиться (хотя бы частично) от воровства адресов электронной почты со страниц Вашего сайта.



Похожие статьи:
- Мягкое повышение ИЦ и PR
- Php блокировка
- Что такое PageRank Googleа и как получить его по максимуму
- Бизнес на подкастах - уже реальность
- Дата на русском языке
- DDOS-атаки и методы борьбы с ними
- PHP пример парсинга URL для «User Friendly URLs»
- Неоправданное использование ООП
- Рисуем Елку


Оглавление | Обсудить на форуме | Главная страница сайта | Карта сайта |

Контакты
Редакция:
[0.001]