Создать ответ 
Немного измененный скрипт автобана
Автор Сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #11
RE: Немного измененный скрипт автобана
Так же не забываем добавлять дату бана в таблицу black_list_ip!

Меняем строчку:
Код:
$result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");
на такую
Код:
$result=mysql_query("INSERT INTO black_list_ip (ip,date) VALUES ('".$ip."','".date("Y-m-d")."')");

Ну и соответственно нужно и считывать эту дату тоже.

Меняем строчку:
Код:
$result=mysql_query("SELECT ip FROM black_list_ip ORDER BY INET_ATON(ip)", $link);
на такую
Код:
$result=mysql_query("SELECT ip,date FROM black_list_ip ORDER BY INET_ATON(ip)", $link);

Попробуйте, должно работать.
12.04.2012 20:13:20
Найти все сообщения Цитировать это сообщение
Domino Не на форуме
Маршал
*

Сообщений: 5
У нас с: Apr 2012
Сообщение: #12
RE: Немного измененный скрипт автобана
Не работает No в файле .htaccess создаётся только пустой
Код:
<Limit GET POST>
order allow,deny
allow from all
</Limit>
и в таблице black_list_ip в поле date отображаться только год месяц и число а время всегда 00:00:00 и ещё я не нашёл строку
Код:
$result=mysql_query("INSERT INTO black_list_ip (ip,date) VALUES ('".$ip."')");
Предполагаю, что имелось в виду строка
Код:
$result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");
12.04.2012 22:27:10
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #13
RE: Немного измененный скрипт автобана
Т.к. код накидал "на глаз", то естественно могли быть ошибки.

По поводу того, что время всегда 00:00:00, то оно нам не нужно совсем (нечего заморачиваться из-за нескольких часов бана, когда мы баним на сутки и более по IP). Для исправления этого "косяка" в таблице black_list_ip нужно изменить тип поля date с datetime на date.

По поводу строчки
Код:
$result=mysql_query("INSERT INTO black_list_ip (ip) VALUES ('".$ip."')");
Вы верно предположили. В сообщениях выше уже подправил данные недочеты.
13.04.2012 17:29:30
Найти все сообщения Цитировать это сообщение
Domino Не на форуме
Маршал
*

Сообщений: 5
У нас с: Apr 2012
Сообщение: #14
RE: Немного измененный скрипт автобана
Сделал Smile
Изменил
PHP код:
$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"
на
PHP код:
$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"
и всё заработало, заметил что файл .htaccess создаётся во всех папках где частое обновление страницы происходит так должно быть или только основной файл .htaccess должен изменяться. И ещё
Код:
<Limit GET POST>
order allow,deny
deny from 127.0.0.1
deny from 127.0.0.1
deny from 127.0.0.1
и так по 750 строчек
allow from all
</Limit>
Так должно быть что так много одинаковых строчек создаётся в файле?
14.04.2012 08:35:41
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #15
RE: Немного измененный скрипт автобана
На IP 127.0.0.1 не обращайте внимания, т.к. это локальный адрес Вашей машины и когда он забанен в .htaccess, то все равно имеет доступ к локальной версии сайта. Другие же IP адреса после бана через .htaccess уже не получат доступ к сайту и следовательно скрипт не сработает.
Так что из MySQL смело удаляйте все IP 127.0.0.1.

Если файл .htaccess создается в других папках, то попробуйте прописать путь к нему целиком (например _http://Ваш_сайт.ru/.htaccess). Главную роль играет только .htaccess расположенный в корневой папке сайта.
14.04.2012 14:28:08
Найти все сообщения Цитировать это сообщение
Domino Не на форуме
Маршал
*

Сообщений: 5
У нас с: Apr 2012
Сообщение: #16
RE: Немного измененный скрипт автобана
Всё сделал может кому то пригодиться, сделал так:
PHP код:
if(strstr($_SERVER['SCRIPT_NAME'], 'папка где находятся чат гостевая загруз центр и так далее'))
 {
  
$dob_url '../..';
 }
  else
 {
  
$dob_url '.';
 }
$file_htaccess="$dob_url/.htaccess"
Теперь только главный .htaccess перезаписывается.
Спасибо за помощь.
14.04.2012 21:15:43
Найти все сообщения Цитировать это сообщение
Domino Не на форуме
Маршал
*

Сообщений: 5
У нас с: Apr 2012
Сообщение: #17
RE: Немного измененный скрипт автобана
Ещё вопрос в таблице all_visits в поле date стоит тип INT надо ли его изменить, а то в поле date время имеет такой вид 1334431953 так должно быть?
14.04.2012 22:53:30
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #18
RE: Немного измененный скрипт автобана
(14.04.2012 22:53:30)Domino писал(а):  Ещё вопрос в таблице all_visits в поле date стоит тип INT надо ли его изменить, а то в поле date время имеет такой вид 1334431953 так должно быть?

Так и должно быть, т.к. в данном поле содержится дата и время визита пользователя в формате Unix Time.
15.04.2012 13:33:23
Найти все сообщения Цитировать это сообщение
dimamd Не на форуме
Рядовой
*

Сообщений: 2
У нас с: Aug 2012
Сообщение: #19
RE: Немного измененный скрипт автобана
Все сделал, как написано в статье и внес изменения, описанные на форуме. На локальной машине работает, переношу на сервер - "Could not connect: " Sad
Таблица all_visits.
[Изображение: avtoban.png]
Таблица black_list_ip.
[Изображение: avtoban2.png]
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,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);
 }
}
?>
10.08.2012 21:38:05
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #20
RE: Немного измененный скрипт автобана
(10.08.2012 21:38:05)dimamd писал(а):  Все сделал как написано в статье и внес изменения описанные на форуме. На локальной машине работает, переношу на сервер - "Could not connect: " Sad

Скрипт тут не причем. Проблема в соединении с базой данных.
Проверьте строчки
PHP код:
$link=mysql_connect(Хост,Логин,Пароль) or die("Could not connect: ".mysql_error());
mysql_select_db("Имя базы"$link); 
ошибка именно в них!
10.08.2012 21:47:47
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


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


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru