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

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #101
RE: Немного измененный скрипт автобана
Можно еще более явно:

PHP код:
<?php
 $cron_time
=filemtime("http://www.mysite.ru/cron_time"); 
 if (
time()-$cron_time>=600) { 
 
file_put_contents("http://www.mysite.ru/cron_time",""); 
 include 
"http://www.mysite.ru/cron.php"
 }
?>
17.12.2014 21:22:28
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #102
RE: Немного измененный скрипт автобана
Доброе время суток,
Пробовал, как и вы указали в предыдущем сообщении с абсолютными ссылками.
У меня к вам просьба проверить на локальном сервере mysite.ru, который я добавил на сайт, где вы можете наглядно посмотреть, что происходит.
Имеется корневая и вложенная страницы, база данных ban_id.sql, где имеются 2 таблицы, ban.php и cron.php находятся в корне, т.е. есть остается вставить в папку локального сервера и посмотреть, где ошибка.
В данном примере в папке, где вложенная страница (page.html) создается cron_time и htaccess, как я и писал в предыдущих сообщениях.
Заранее благодарен.
Архив mysite.ru

.rar  mysite.ru.rar (Размер: 3.91 Кб / Загрузок: 1)
18.12.2014 16:42:37
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #103
RE: Немного измененный скрипт автобана
Пока со свободным временем напряг, посмотрю позже.
20.12.2014 18:08:39
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #104
RE: Немного измененный скрипт автобана
Спасибо, будем ожидать.
В данный момент пробовал все исходя их знаний, что есть, но пока не выходит.
21.12.2014 16:36:39
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

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

Посмотрев предоставленный код, понял, где "накосячил" в объяснениях.

Итак, подключаете файл ban.php Вы правильно, а вот в самом файле ban.php нужно внести пару изменений, чтобы работало и для вложенных папок.

Строчку:
PHP код:
$fh=fopen(".htaccess""a+"); 

Замените на:
PHP код:
$fh=fopen($_SERVER["DOCUMENT_ROOT"]."/.htaccess""a+"); 

А строки:
PHP код:
$cron_time=filemtime("cron_time");    
if (
time()-$cron_time>=600) {       
    
file_put_contents("cron_time","");    
    include 
"cron.php";                


На такие:
PHP код:
$cron_time=filemtime($_SERVER["DOCUMENT_ROOT"]."/cron_time");
if (
time()-$cron_time>=600) {
    
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/cron_time","");
    include 
$_SERVER["DOCUMENT_ROOT"]."/cron.php";


Таким образом, скрипт будет работать только с файлами в корневой папке сайта ($_SERVER["DOCUMENT_ROOT"]).
28.12.2014 15:10:06
Найти все сообщения Цитировать это сообщение
ale10ey Не на форуме
Генерал-лейтенант
*

Сообщений: 352
У нас с: Nov 2014
Сообщение: #106
RE: Немного измененный скрипт автобана
Работает. Прописывал абсолютный адрес для аналога крона, а для htaccess не догадался. Спасибо!!!
10.02.2015 16:24:26
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #107
RE: Немного измененный скрипт автобана
Комментарий из-за своих размеров был перенесен из основной темы сюда:

(06.04.2016 19:43:50)PHPSID писал(а):
PHP код:
function getRealIP() {
  
$result false;
  
$proxy_headers = array(
    
'CLIENT_IP'
    
'FORWARDED'
    
'FORWARDED_FOR'
    
'FORWARDED_FOR_IP'
    
'HTTP_CLIENT_IP'
    
'HTTP_FORWARDED'
    
'HTTP_FORWARDED_FOR'
    
'HTTP_FORWARDED_FOR_IP'
    
'HTTP_PC_REMOTE_ADDR'
    
'HTTP_PROXY_CONNECTION',
    
'HTTP_VIA'
    
'HTTP_X_FORWARDED'
    
'HTTP_X_FORWARDED_FOR'
    
'HTTP_X_FORWARDED_FOR_IP'
    
'HTTP_X_IMFORWARDS'
    
'HTTP_XROXY_CONNECTION'
    
'VIA'
    
'X_FORWARDED'
    
'X_FORWARDED_FOR'
  
);

  foreach(
$proxy_headers as $proxy_header) {
    if (
$result !== false) continue;
      if(isset(
$_SERVER[$proxy_header])) {
    
preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/"$_SERVER[$proxy_header],$matches);
    if (isset(
$matches[0])) {
      
$result $matches[0];
      continue;
    }
    }
    else if(
stristr(','$_SERVER[$proxy_header]) !== FALSE) {
      
$proxy_header_temp trim(array_shift(explode(','$_SERVER[$proxy_header]))); 
      if((
$pos_temp stripos($proxy_header_temp':')) !== FALSE$proxy_header_temp substr($proxy_header_temp0$pos_temp); 
      if(
preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/"$proxy_header_temp)){
        
$result $_SERVER[$proxy_header];
        continue;            
      }   
    }
  }
  
  if (
$result === false){
    
$result $_SERVER['REMOTE_ADDR'];
  }
  if (
preg_match("#([0-9]+\.).*#"$result$m)){
    if (
$m[1] == "10." || $m[1] == "100."){
      
$result $_SERVER['REMOTE_ADDR'];
    }
  }
  if (
preg_match("#([0-9]+\.[0-9]+\.).*#"$result$m)){
    if (
$m[1] == "192.168."){
      
$result $_SERVER['REMOTE_ADDR'];
    }
  }
  return 
$result;
}; 

Использовать: echo getRealIP();
06.04.2016 20:01:09
Найти все сообщения Цитировать это сообщение
Andrey Не на форуме
Рядовой
*

Сообщений: 7
У нас с: Nov 2017
Сообщение: #108
RE: Немного измененный скрипт автобана
Здравствуйте! Вопрос по этому скрипту: http://usefulscript.ru/temporary_avtoban.php
Всё сделал по инструкции, объединив код с кодом из сообщения выше, в итоге получился такой код:

<?php
function getRealIP() {
$result = false;
$proxy_headers = array(
'CLIENT_IP',
'FORWARDED',
'FORWARDED_FOR',
'FORWARDED_FOR_IP',
'HTTP_CLIENT_IP',
'HTTP_FORWARDED',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED_FOR_IP',
'HTTP_PC_REMOTE_ADDR',
'HTTP_PROXY_CONNECTION',
'HTTP_VIA',
'HTTP_X_FORWARDED',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED_FOR_IP',
'HTTP_X_IMFORWARDS',
'HTTP_XROXY_CONNECTION',
'VIA',
'X_FORWARDED',
'X_FORWARDED_FOR'
);

foreach($proxy_headers as $proxy_header) {
if ($result !== false) continue;
if(isset($_SERVER[$proxy_header])) {
preg_match("/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/", $_SERVER[$proxy_header],$matches);
if (isset($matches[0])) {
$result = $matches[0];
continue;
}
}
else if(stristr(',', $_SERVER[$proxy_header]) !== FALSE) {
$proxy_header_temp = trim(array_shift(explode(',', $_SERVER[$proxy_header])));
if(($pos_temp = stripos($proxy_header_temp, ':')) !== FALSE) $proxy_header_temp = substr($proxy_header_temp, 0, $pos_temp);
if(preg_match("/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$/", $proxy_header_temp)){
$result = $_SERVER[$proxy_header];
continue;
}
}
}

if ($result === false){
$result = $_SERVER['REMOTE_ADDR'];
}
if (preg_match("#([0-9]+\.).*#", $result, $m)){
if ($m[1] == "10." || $m[1] == "100."){
$result = $_SERVER['REMOTE_ADDR'];
}
}
if (preg_match("#([0-9]+\.[0-9]+\.).*#", $result, $m)){
if ($m[1] == "192.168."){
$result = $_SERVER['REMOTE_ADDR'];
}
}
return $result;
};

$bot='';
$ip=getRealIP();

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';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot')) $bot='Googlebot';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot-News')) $bot='Googlebot-News';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot-Image')) $bot='Googlebot-Image';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot-Video')) $bot='Googlebot-Video';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mediapartners-Google')) $bot='Mediapartners-Google';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'AdsBot-Google')) $bot='AdsBot-Google';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'AdsBot-Google-Mobile-Apps')) $bot='AdsBot-Google-Mobile-Apps';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexBot')) $bot='YandexBot';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexImages')) $bot='YandexImages';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexVideo')) $bot='YandexVideo';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexMedia')) $bot='YandexMedia';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexBlogs')) $bot='YandexBlogs';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexAddurl')) $bot='YandexAddurl';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexFavicons')) $bot='YandexFavicons';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexDirect')) $bot='YandexDirect';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexMetrika')) $bot='YandexMetrika';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexCatalog')) $bot='YandexCatalog';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexNews')) $bot='YandexNews';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexImageResizer')) $bot='YandexImageResizer';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Bingbot')) $bot='Bingbot';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Slurp')) $bot='Slurp';
elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Mail.Ru')) $bot='Mail.Ru';

if ($bot=='') {
$db=mysqli_connect("localhost","логин","пароль","имя_бд");

$res=mysqli_query($db,"INSERT INTO all_visits (ip,date) VALUES
(INET_ATON('".$ip."'),'".time()."')");
$res=mysqli_query($db,"SELECT count(id) FROM all_visits WHERE
(ip=INET_ATON('".$ip."') and date>'".(time()-10)."') LIMIT 1");
$count_visit=mysqli_fetch_array($res);

if ($count_visit[0]>10) {
$res=mysqli_query($db,"INSERT INTO black_list_ip (ip,date) VALUES
(INET_ATON('".$ip."'),'".time()."')");

$start_line=0;
$lines='';
$ln_hta='';

$fh=fopen(".htaccess", "a+");
flock($fh, LOCK_EX);
fseek($fh, 0);
while (!feof($fh)) $lines.=fread($fh,2048);
$lines=explode("\n", $lines);

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++) $ln_hta[]=$lines[$n];
else $ln_hta=$lines;

$ln_hta[]="Order Allow,Deny";
$ln_hta[]="Allow from all";

$res=mysqli_query($db,"SELECT INET_NTOA(ip) AS ip,date FROM black_list_ip
ORDER BY INET_ATON(ip)");
while ($bad_ip=mysqli_fetch_array($res)) {
if (time()<($bad_ip[date]+900))$ln_hta[]=" deny from ".$bad_ip[ip];
}

$ln_hta=implode("\n",$ln_hta);
ftruncate($fh, 0);
fwrite($fh, $ln_hta);
flock($fh, LOCK_UN);
fclose($fh);
}
}
?>

В таблицу all_visits визиты записываются, в этой части вроде как всё работает.
Но похоже не работает самая главная функция - запись в таблицу black_list_ip и блокирование ip.
Я решил это проверить, попробовав "забанить себя". Открывал ссылки на сайте с бешеной скоростью, за 10 секунд открыл наверно 20 страничек, но ничего не произошло. Мой ip не забанился, в таблице black_list_ip и .htaccess не появился.
Что может быть не так?
19.11.2017 14:56:27
Найти все сообщения Цитировать это сообщение
Andrey Не на форуме
Рядовой
*

Сообщений: 7
У нас с: Nov 2017
Сообщение: #109
RE: Немного измененный скрипт автобана
Здравствуйте ещё раз!
Недавно удалось убедиться в работоспособности скрипта, после того как попался один бот, он записался в таблицу black_list_ip и в .htaccess
НО!
Тут выяснилась одна загвоздка: файл .htaccess, который перезаписывается скриптом создался не в корневой папке сайта (public_html), а ДО неё, то есть в одной директории с public_html.
Но файл .htaccess, созданный ДО корневой папки сайта не работает и в принципе никак не влияет на сайт. Это мне подтвердил хостер и я сам в этом убедился, добавив свой ip в него и смог зайти на сайт. После этого добавил свой ip в файл .htaccess, расположенный именно в корне сайта и тогда действительно не смог зайти на сайт.
В связи с этим вопрос:
Как нужно подкорректировать код, чтобы скрипт записывал ip именно в файл .htaccess, расположенный в корне сайта, а не создавал .htaccess ДО главной папки?
Может быть в этой строке:
$fh=fopen(".htaccess", "a+");
перед .htaccess поставить слэш?
Чтобы получилось вот так:
$fh=fopen("/.htaccess", "a+");
или может быть так:
$fh=fopen("../.htaccess", "a+");
Подскажите пожалуйста
23.11.2017 16:33:14
Найти все сообщения Цитировать это сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #110
RE: Немного измененный скрипт автобана
Попробуйте так:
PHP код:
$hta_file=$_SERVER['DOCUMENT_ROOT'].'.htaccess';
$fh=fopen($hta_file"a+"); 
24.11.2017 22:45:14
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


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


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru