Создать ответ 
Немного измененный скрипт автобана
Автор Сообщение
dimamd Не на форуме
Рядовой
*

Сообщений: 2
У нас с: Aug 2012
Сообщение: #21
RE: Немного измененный скрипт автобана
(10.08.2012 21:47:47)Admin писал(а):  Скрипт тут не причем. Проблема в соединении с базой данных.
Проверьте строчки
PHP код:
$link=mysql_connect(Хост,Логин,Пароль) or die("Could not connect: ".mysql_error());
mysql_select_db("Имя базы"$link); 
ошибка именно в них!
да, действительно, сделал вот так:
PHP код:
$link=mysql_connect('Хост','Логин','Пароль') or die("Could not connect: ".mysql_error());
mysql_select_db("Имя базы"$link); 
и все заработало. Спасибо!!!
10.08.2012 22:32:01
Найти все сообщения Цитировать это сообщение
baltazors Не на форуме
Рядовой
*

Сообщений: 1
У нас с: Oct 2012
Сообщение: #22
RE: Немного измененный скрипт автобана
1. Попробовал установить данный скрипт сделал запрос к БД,
PHP код:
#
# Table structure for table all_visits
#

CREATE TABLE `all_visits` (
  `
idsmallint(6NOT NULL AUTO_INCREMENT,
  `
ipvarchar(15) DEFAULT NULL,
  `
dateint(11) DEFAULT NULL,
  
PRIMARY KEY (`id`)
ENGINE=MyISAM AUTO_INCREMENT=DEFAULT CHARSET=utf8;


#
# Table structure for table black_list_ip
#

CREATE TABLE `black_list_ip` (
  `
idint(11NOT NULL AUTO_INCREMENT,
  `
ipvarchar(15) DEFAULT NULL,
  
PRIMARY KEY (`id`)
ENGINE=MyISAM AUTO_INCREMENT=DEFAULT CHARSET=utf8
Вставил скрипт следующего кода:
PHP код:
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR']))
    
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else 
$ip=$_SERVER['REMOTE_ADDR'];
$bot=$_SERVER['HTTP_USER_AGENT'];

if (
strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Yandex';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Google';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Yahoo';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) {$bot='Mail';}

if (
$bot!='Yandex' and $bot!='Google' and $bot!='Yahoo' and $bot!='Mail') {

$link=mysql_connect("XXX","XXX","XXX") or die("Could not connect: ".mysql_error());
mysql_select_db("XXX"$link);

 
$result=mysql_query("INSERT INTO all_visits (ip,date)
         VALUES ('"
.$ip."','".time(true)."')");
 
$result=mysql_query("SELECT count(id) FROM all_visits
         WHERE (ip='"
.$ip."' and date>'".(time(true)-10)."') LIMIT 1"$link);
 
$count_visit=mysql_fetch_array($result);

 if (
$count_visit[0]>30) {
  
$result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");

  
$file_htaccess=".htaccess";
$start_line=0;

    
$lines=file($file_htaccess);
    for (
$n=0$n<=count($lines); $n++) if ($lines[$n] == "<Limit GET POST> \r\n"$start_line=$n;
    if (
$start_line!=0) for ($n=0$n<$start_line$n++) $lines_htaccess[]=$lines[$n];
        else 
$lines_htaccess=$lines

  
$lines_htaccess[]="<Limit GET POST> \r\n";
  
$lines_htaccess[]=" order allow,deny \r\n";

  
$result=mysql_query("SELECT IP FROM black_list_ip ORDER BY INET_ATON(ip)"$link);
  
$number=mysql_num_rows($result);

  for (
$n=1$n<=$number$n++) {
   
$htaccess_ip=mysql_fetch_array($result);
   
$lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

  
$lines_htaccess[]=" allow from all \r\n";
  
$lines_htaccess[]="</Limit> \r\n\r\n";

  
file_put_contents($file_htaccess$lines_htaccess);
 }

2. Запись в базу идет отлично в плане ID и IP, но в дате вижу следующее
PHP код:
1351434653
1351434654 
и т.д., пробовал вариации со сменой типа поля тоже самое
3. Файл .htaccess записывается только вот так
PHP код:
<Limit GET POST
 
order allow,deny 
 deny from 
 allow from all 
</Limit
Соответственно получаю 500 ошибку
4. Пробовал поступить еще следующим образом, вместо записи .htaccess поставил на запись файл htaccess.txt, но вот что я вижу при открытии файла
PHP код:
<Limit GET POST
 
order allow,deny 
 deny from 
 allow from all 
</Limit

<
Limit GET POST
 
order allow,deny 
 deny from 
 deny from 
 deny from 
 deny from 
 allow from all 
</Limit
То есть IP нет. Помогите пожалуйста, что делаю не так...
28.10.2012 18:03:52
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #23
RE: Немного измененный скрипт автобана
Ошибка проще, чем Вы можете себе представить Wink

В строчке:
PHP код:
$result=mysql_query("SELECT IP FROM black_list_ip ORDER BY INET_ATON(ip)"$link); 

Замените IP на ip и все! Только что у себя проверил и все заработало.

На время не обращайте внимания, так и должно быть. В базу оно пишется в формате Unixtime.
28.10.2012 21:19:25
Найти все сообщения Цитировать это сообщение
Frost Не на форуме
Рядовой
*

Сообщений: 1
У нас с: Nov 2012
Сообщение: #24
RE: Немного измененный скрипт автобана
Огромное спасибо автору за данный скрипт!!! Очень полезная вещь!
Хотел только уточнить, точно ли не возникнет проблем с индексацией? Не будут ли баниться роботы яндекса и гугла? Все-таки они шустро по страницам бегают.
Заранее спасибо.
15.11.2012 00:16:10
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #25
RE: Немного измененный скрипт автобана
Нет, не будут, т.к. в нашем скрипте предусмотрены исключения для указанных ботов.
Всех ботов, которых следует игнорировать, стоит прописать путем добавления строк по аналогии:

Код:
if (strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Yandex';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Google';}
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Yahoo';}

В том случае, если бот представился через HTTP_USER_AGENT как Yandex или Google, то частота их визитов не учитывается, но в лог они попадут.
15.11.2012 19:10:22
Найти все сообщения Цитировать это сообщение
luandd Не на форуме
Рядовой
*

Сообщений: 1
У нас с: Dec 2012
Сообщение: #26
RE: Немного измененный скрипт автобана
Здравствуйте.
Помогите разобраться. установил скрипт - все работает, но возникают две проблемы:
1. в таблице all_visits сохраняются только 32767 записей IP адресов и после ее надо чистить...
2. в файле ".htaccess" создаются несколько блоков:
Код:
<Limit GET POST>
order allow,deny
deny from 1.1.1.1
deny from 2.2.2.2
deny from 3.3.3.3
allow from all
</Limit>

<Limit GET POST>
order allow,deny
deny from 1.1.1.1
deny from 2.2.2.2
deny from 3.3.3.3
deny from 4.4.4.4
deny from 5.5.5.5
allow from all
</Limit>
Решение описаное выше с заменой IP на ip не подходит, потому что строка:
PHP код:
$result=mysql_query("SELECT IP FROM black_list_ip ORDER BY INET_ATON(ip)"$link); 
у меня выглядит так:
PHP код:
$result=mysql_query("SELECT ip,date FROM black_list_ip ORDER BY INET_ATON(ip)"$link); 
весь код:
PHP код:
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR']))
    
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else 
$ip=$_SERVER['REMOTE_ADDR'];
$bot=$_SERVER['HTTP_USER_AGENT'];

if (
strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Yandex';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Google';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Yahoo';}

if (
$bot!='Yandex' and $bot!='Google' and $bot!='Yahoo') {

$link=mysql_connect('XXX','XXX','XXX') or die("Could not connect: ".mysql_error());
mysql_select_db("XXX"$link);

 
$result=mysql_query("INSERT INTO all_visits (ip,date)
         VALUES ('"
.$ip."','".time(true)."')");
 
$result=mysql_query("SELECT count(id) FROM all_visits
         WHERE (ip='"
.$ip."' and date>'".(time(true)-10)."') LIMIT 1"$link);
 
$count_visit=mysql_fetch_array($result);

 if (
$count_visit[0]>10) {
  
$result=mysql_query("INSERT INTO black_list_ip (ip,date) VALUES ('".$ip."','".date("Y-m-d")."')");

  
$file_htaccess=".htaccess";
  
$start_line=0;

    
$lines=file($file_htaccess);
    for (
$n=0$n<=count($lines); $n++) if ($lines[$n] == "<Limit GET POST> \r\n"$start_line=$n;
    if (
$start_line!=0) for ($n=0$n<$start_line$n++) $lines_htaccess[]=$lines[$n];
        else 
$lines_htaccess=$lines;

  
$lines_htaccess[]="<Limit GET POST> \r\n";
  
$lines_htaccess[]=" order allow,deny \r\n";

  
$result=mysql_query("SELECT ip,date FROM black_list_ip ORDER BY INET_ATON(ip)"$link);
  
$number=mysql_num_rows($result);

  for (
$n=1$n<=$number$n++) {
   
$htaccess_ip=mysql_fetch_array($result);
   
$new_date explode('-',$htaccess_ip[date]);
   if (!
date("Y-m-d")<date("Y-m-d"mktime(000$new_date[1], $new_date[2]+$ban_day$new_date[0])))$lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

  
$lines_htaccess[]=" allow from all \r\n";
  
$lines_htaccess[]="</Limit> \r\n\r\n";

  
file_put_contents($file_htaccess$lines_htaccess);
 }

17.12.2012 03:31:54
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #27
RE: Немного измененный скрипт автобана
Как я понимаю, код Вы взяли не со странички сикрипта - http://usefulscript.ru/avtoban.php, а из сообщения чуть выше, отсюда и проблемы.

Рекомендую Вам воспользоваться первоисточником кода, т.к. он проверен и работает.

По Вашим вопросам:
1. В таблице all_visits смените тип поля id c smallint на int, должно помочь.
2. В файле ".htaccess" несколько блоков могут появляться, например, из-за неверного определения строчки "<Limit GET POST> \r\n" (скорее всего это связано с кодировкой файла .htaccess). Как вариант, попробуйте заменить строчку
for ($n=0; $n<=count($lines); $n++) if ($lines[$n] == "<Limit GET POST> \r\n") $start_line=$n;
на такую:
for ($n=0; $n<=count($lines); $n++) if ($lines[$n] == "<Limit GET POST>") $start_line=$n;
17.12.2012 19:13:31
Найти все сообщения Цитировать это сообщение
A67809R Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Feb 2013
Сообщение: #28
RE: Немного измененный скрипт автобана
Здравствуйте Уважаемый администратор форума. Дело в том, что у меня есть свой сайт. И некоторые из посетителей просто не могут выполнить простые требования. И в поисках защиты от этого я наткнулся на этот прекрасный скрипт. И прочитав, понял, что мне очень подошел бы такой скрипт автоматического бана нежелательных польз-й. Я пробовал установить к себе его на сайт. Сайт у меня на движке DLE. Успешно Создал (добавил) две таблицы к базе данных своего сайта, как было описано выше, и вставил код в файл index.php:

PHP код:
<?php
if (!empty($_SERVER['HTTP_CLIENT_IP']))
    
$ip=$_SERVER['HTTP_CLIENT_IP'];
elseif (!empty(
$_SERVER['HTTP_X_FORWARDED_FOR']))
    
$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
else 
$ip=$_SERVER['REMOTE_ADDR'];
$bot=$_SERVER['HTTP_USER_AGENT'];

if (
strstr($_SERVER['HTTP_USER_AGENT'], 'Yandex')) {$bot='Yandex';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Google')) {$bot='Google';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Yahoo')) {$bot='Yahoo';}
elseif (
strstr($_SERVER['HTTP_USER_AGENT'], 'Mail')) {$bot='Mail';}

if (
$bot!='Yandex' and $bot!='Google' and $bot!='Yahoo' and $bot!='Mail') {

$link=mysql_connect(Хост,Логин,Пароль) or die("Could not connect: ".mysql_error());
mysql_select_db("Имя базы"$link);

 
$result=mysql_query("INSERT INTO all_visits (ip,date)
         VALUES ('"
.$ip."','".time(true)."')");
 
$result=mysql_query("SELECT count(id) FROM all_visits
         WHERE (ip='"
.$ip."' and date>'".(time(true)-10)."') LIMIT 1"$link);
 
$count_visit=mysql_fetch_array($result);

 if (
$count_visit[0]>10) {
  
$result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");

  
$file_htaccess=".htaccess";

  
$lines_htaccess[]="<Limit GET POST> \r\n";
  
$lines_htaccess[]=" order allow,deny \r\n";

  
$result=mysql_query("SELECT ip FROM black_list_ip ORDER BY INET_ATON(ip)"$link);
  
$number=mysql_num_rows($result);

  for (
$n=1$n<=$number$n++) {
   
$htaccess_ip=mysql_fetch_array($result);
   
$lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

  
$lines_htaccess[]=" allow from all \r\n";
  
$lines_htaccess[]="</Limit> \r\n\r\n";

  
file_put_contents($file_htaccess$lines_htaccess);
 }
}
?>

А теперь не знаю, что я не так или так вообще сделал?
Потому что к сожалению пишет ошибку. Либо я что-то не правильно сделал либо не знаю, куда вставить код...??? Подскажите, пожалуйста, почему у меня не работает скрипт. Буду очень признателен за Вашу помощь.
Прошу меня извинить за то, что не выделил код просто у меня не получилось.
06.02.2013 15:20:52
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #29
RE: Немного измененный скрипт автобана
Напишите что за ошибка, а то так естественно я ничем не смогу помочь.
06.02.2013 20:11:48
Найти все сообщения Цитировать это сообщение
A67809R Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Feb 2013
Сообщение: #30
RE: Немного измененный скрипт автобана
Уже не надо. Все у меня получилось. Спасибо большое. Но только подскажите пожалуйста, можна ли и если да то как так дописать в коде в скрипте, что бы например работа скрипта не распостранялась бы например на мой ip? или что бы в файл htaccess дописывались разрешения на мой ip
например
order allow deny
deny from all
allow from <мой ip>
(Последний раз сообщение было отредактировано 07.02.2013 в 01:12:43, отредактировал пользователь A67809R.)
06.02.2013 21:57:17
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru