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

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #61
RE: Немного измененный скрипт автобана
В обе таблицы ничего не пишется или только в black_list_ip?

Немного поправил Ваш скрипт, т.к. там имеются неточности.

У себя проверил, все работает как положено.
Проверьте еще раз поля таблиц. Таблица black_list_ip должна быть точно такая же, как all_visits.

Вот итоговый рабочий вариант:

PHP код:
$ip=$_SERVER['REMOTE_ADDR'];

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("localhost","***","***") 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."','".time(true)."')");

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

    
$lines=file($file_htaccess);
    for (
$n=0$n<=count($lines); $n++) if (strstr($lines[$n],"Order Allow,Deny")) $start_line=$n;
    if (
$start_line!=0) for ($n=0$n<$start_line$n++) $lines_htaccess[]=$lines[$n];
        else 
$lines_htaccess=$lines;

  
$lines_htaccess[]="Order Allow,Deny\r\n";
  
$lines_htaccess[]="Allow from all\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);
   if (
time(true)<($htaccess_ip[date]+900))$lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
  }

  
file_put_contents($file_htaccess$lines_htaccess);
 }

18.10.2013 17:48:19
Найти все сообщения Цитировать это сообщение
romaxx Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Oct 2013
Сообщение: #62
RE: Немного измененный скрипт автобана
Добрый вечер. Напишите пожалуйста что нужно внести в скрипт cron.php что бы автоматически чистились таблицы all_visits и black_list_ip. И htaccess тоже так как я установил последнее изменение с баном на 15 минут, а то у меня в таблице all_visits по 100 000 записей в сутки. Bad Приходиться в ручную чистить. Smile
20.10.2013 19:57:13
Найти все сообщения Цитировать это сообщение
romaxx Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Oct 2013
Сообщение: #63
RE: Немного измененный скрипт автобана
Ещё бы хотел знать: допустим, я при бане по айпи сделал редирект на страницу 403.html у себя, где описано, что вы попали в блок айпи, если хотите выйти, то обратитесь туда-то туда-то. А вот хочу сделать или просто подождите 15 минут! И что бы были часы, которые начали в онлайн режиме отсчитывать эти 15 минут.
20.10.2013 21:19:44
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #64
RE: Немного измененный скрипт автобана
(20.10.2013 19:57:13)romaxx писал(а):  Добрый вечер. Напишите пожалуйста что нужно внести в скрипт cron.php что бы автоматически чистились таблицы all_visits и black_list_ip. И htaccess тоже так как я установил последнее изменение с баном на 15 минут, а то у меня в таблице all_visits по 100 000 записей в сутки. Bad Приходиться в ручную чистить. Smile

Просто обычный MySQL запрос на удаление "устаревших" записей + перезапись .htaccess:
PHP код:
<?php
$link
=mysql_connect("localhost","***","***") or die("Could not connect: ".mysql_error());
mysql_select_db("***"$link);

$result=mysql_query("DELETE FROM black_list_ip WHERE date<".(time(true)-900)."");
$result=mysql_query("DELETE FROM all_visits WHERE date<".(time(true)-900)."");

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

$lines=file($file_htaccess);
for (
$n=0$n<=count($lines); $n++) if (strstr($lines[$n],"Order Allow,Deny")) $start_line=$n;
if (
$start_line!=0) for ($n=0$n<$start_line$n++) $lines_htaccess[]=$lines[$n];
    else 
$lines_htaccess=$lines;

$lines_htaccess[]="Order Allow,Deny\r\n";
$lines_htaccess[]="Allow from all\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);
 if (
time(true)<($htaccess_ip[date]+900))$lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
}
file_put_contents($file_htaccess$lines_htaccess);
?>

P.S. Если у Вас такая высокая нагрузка (100 000 хитов в сутки), то обязательно используйте Блокировка файлов от записи на PHP как при чтении, так и при записи .htaccess чтобы не "положить" сайт криво записавшимся .htaccess.
В приведенном выше коде данной блокировки нет!
20.10.2013 21:26:19
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #65
RE: Немного измененный скрипт автобана
(20.10.2013 21:19:44)romaxx писал(а):  Ещё бы хотел знать: допустим, я при бане по айпи сделал редирект на страницу 403.html у себя, где описано, что вы попали в блок айпи, если хотите выйти, то обратитесь туда-то туда-то. А вот хочу сделать или просто подождите 15 минут! И что бы были часы, которые начали в онлайн режиме отсчитывать эти 15 минут.

Так, а что тут сложного... Делаете свою страничку 403, где простым SELECT-ом получаете время бана для данного IP, и далее на JavaScript делаете обратный отсчет.

P.S. И где Вы раньше были, а то уже поздно, и в будние дни не так много времени сайтом заниматься... Если надо, то только в конце следующей недели сделаю.
20.10.2013 21:35:07
Найти все сообщения Цитировать это сообщение
romaxx Не на форуме
Рядовой
*

Сообщений: 4
У нас с: Oct 2013
Сообщение: #66
RE: Немного измененный скрипт автобана
(20.10.2013 21:35:07)Admin писал(а):  Так, а что тут сложного... Делаете свою страничку 403, где простым SELECT-ом получаете время бана для данного IP, и далее на JavaScript делаете обратный отсчет.

P.S. И где Вы раньше были, а то уже поздно, и в будние дни не так много времени сайтом заниматься... Если надо, то только в конце следующей недели сделаю.

Спасибо! Буду благодарен за помощь и извините что так поздно.

(20.10.2013 21:26:19)Admin писал(а):  Просто обычный MySQL запрос на удаление "устаревших" записей + перезапись .htaccess:
PHP код:
<?php
$link
=mysql_connect("localhost","***","***") or die("Could not connect: ".mysql_error());
mysql_select_db("***"$link);

$result=mysql_query("DELETE FROM black_list_ip WHERE date<".(time(true)-900)."");
$result=mysql_query("DELETE FROM all_visits WHERE date<".(time(true)-900)."");

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

$lines=file($file_htaccess);
for (
$n=0$n<=count($lines); $n++) if (strstr($lines[$n],"Order Allow,Deny")) $start_line=$n;
if (
$start_line!=0) for ($n=0$n<$start_line$n++) $lines_htaccess[]=$lines[$n];
    else 
$lines_htaccess=$lines;

$lines_htaccess[]="Order Allow,Deny\r\n";
$lines_htaccess[]="Allow from all\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);
 if (
time(true)<($htaccess_ip[date]+900))$lines_htaccess[]=" deny from ".$htaccess_ip[ip]."\r\n";
}
file_put_contents($file_htaccess$lines_htaccess);
?>

P.S. Если у Вас такая высокая нагрузка (100 000 хитов в сутки), то обязательно используйте Блокировка файлов от записи на PHP как при чтении, так и при записи .htaccess чтобы не "положить" сайт криво записавшимся .htaccess.
В приведенном выше коде данной блокировки нет!
Спасибо вам. И еще вы писали про Блокировку файлов. Его нужно вставлять в .htaccess? Или куда-нибудь в другое место на сайте? Заранее Спасибо за ответ.
(Последний раз сообщение было отредактировано 20.10.2013 в 22:34:32, отредактировал пользователь romaxx.)
20.10.2013 22:30:10
Найти все сообщения Цитировать это сообщение
sanitarn Не на форуме
Ефрейтор
*

Сообщений: 12
У нас с: Oct 2013
Сообщение: #67
RE: Немного измененный скрипт автобана
Не блокирует и не записывает в хтаксес
Order Allow,Deny
Allow from all
Order Allow,Deny
Allow from all

База black_list_ip пустая

Все заработало, проблема была в кодировке. Спасибо!
(Последний раз сообщение было отредактировано 21.10.2013 в 14:30:17, отредактировал пользователь sanitarn.)
21.10.2013 13:39:54
Найти все сообщения Цитировать это сообщение
sanitarn Не на форуме
Ефрейтор
*

Сообщений: 12
У нас с: Oct 2013
Сообщение: #68
RE: Немного измененный скрипт автобана
Осталась проблема, при запуске по крону, выдает ошибку 500, и пока запись в хтаксесе не потру, так и выдает ошибку.
21.10.2013 21:40:08
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #69
RE: Немного измененный скрипт автобана
Вы пробовали не по крону, а самостоятельно запустить файл с кодом из 64 сообщения данной темы? Удаляются ли "старые" записи из БД и что пишется в .htaccess?
21.10.2013 21:57:16
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #70
RE: Немного измененный скрипт автобана
(20.10.2013 22:30:10)romaxx писал(а):  Спасибо вам. И еще вы писали про Блокировку файлов. Его нужно вставлять в .htaccess? Или куда-нибудь в другое место на сайте? Заранее Спасибо за ответ.

Блокировку следует вставлять в код, который считывает/записывает данные в .htaccess.

Позже, думаю, напишу весь получившийся скрипт в виде отдельной темы.
21.10.2013 22:04:50
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


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


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru