Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: автоблокировка ip в htaccess

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
valkiriy
Отправлено: 08 Декабря, 2013 - 23:58:47
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)

[+]


Доброй ночи,

имеется файрволл на php который ведет логи:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. 8-12-2013 23:44:26 | Bots attack | IP: 176.106.208.4 ] | DNS: 176-106-208-4.point.lviv.ua | Agent: Mozilla/2.0 (compatible; MSIE 3.02; Update a; AK; Windows NT) | URL: / | Referer: 5853bm203s.ru
  3.  

но файрволл достаточно слабый и хостинг замораживает аккаунт во избежания нагрузки.
решил перехитрить написанием скрипта который будет автоматом читать логи и вносить ip с опр флагами в htaccess на блокировку:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $log = file("logs.txt");
  4. for($i = 0; $i < count($log); $i++)
  5. {
  6. if(preg_match('|'.preg_quote('Bots attack | IP: ', '/').'(.*?)'.preg_quote(' ', '/').'|is', $log[$i], $atkstr))
  7. {
  8. $atkstrout = preg_replace("/Bots attack \| IP: /i","",$atkstr[0]);
  9. $atkstrout = preg_replace("/ /i","",$atkstrout);
  10. $file = file(".htaccess");
  11. $num_stroka = count($file);
  12. $num_stroka = $num_stroka-1;
  13. unset($file[$num_stroka]);
  14. $num_stroka = $num_stroka-1;
  15. unset($file[$num_stroka]);
  16. $fp = fopen(".htaccess", "w");
  17. $endfile="".implode("", $file)." deny from ".$atkstrout."\n allow from all\n</Limit>";
  18. fputs($fp, $endfile);
  19. fclose($fp);
  20. }
  21. }
  22. ?>

и тут встала задача сравнить есть ли в .htaccess ip в черном листе или нет
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $file = file(".htaccess");
  4. $BlackList = array();
  5. for($x = 0; $x < count($file); $x++)
  6. {
  7. if(preg_match('|deny from (.*?)\n deny from|is', $file[$x], $ipblock))
  8. {
  9. $ipblockout = preg_replace("/deny from /i","",$ipblock[0]);
  10. $ipblockout = preg_replace("/ \n deny from/i","",$ipblockout);
  11. array_push($BlackList, $ipblockout);
  12. }
  13. }
  14. }
  15. in_array($atkstrout, $BlackList);
  16. ?>
  17.  

пытаюсь парсить .htaccess а он не парсится.... не пойму почему и без этого не могу сделать проверку...
конечный скрипт по моим замыслам должен был иметь такой вид:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $log = file("logs.txt");
  4. $BlackList = array();
  5. for($i = 0; $i < count($log); $i++)
  6. {
  7. if(preg_match('|'.preg_quote('Bots attack | IP: ', '/').'(.*?)'.preg_quote(' ', '/').'|is', $log[$i], $atkstr))
  8. {
  9. $atkstrout = preg_replace("/Bots attack \| IP: /i","",$atkstr[0]);
  10. $atkstrout = preg_replace("/ /i","",$atkstrout);
  11. $file = file(".htaccess");
  12. for($x = 0; $x < count($file); $x++)
  13. {
  14. if(preg_match('|deny from (.*?)\n deny from|is', $file[$x], $ipblock))
  15. {
  16. $ipblockout = preg_replace("/deny from /i","",$ipblock[0]);
  17. $ipblockout = preg_replace("/ \n deny from/i","",$ipblockout);
  18. array_push($BlackList, $ipblockout);
  19. }
  20. }
  21. }
  22. if(!in_array($atkstrout, $BlackList))
  23. {
  24. $num_stroka = count($file);
  25. $num_stroka = $num_stroka-1;
  26. unset($file[$num_stroka]);
  27. $num_stroka = $num_stroka-1;
  28. unset($file[$num_stroka]);
  29. $fp = fopen(".htaccess", "w");
  30. $endfile="".implode("", $file)." deny from ".$atkstrout."\n allow from all\n</Limit>";
  31. fputs($fp, $endfile);
  32. fclose($fp);
  33. }
  34. }
  35. }
  36. ?>

(Добавление)
нашел ошибку в регулярке и
PHP:
скопировать код в буфер обмена
  1. preg_match('|deny from (.*?)\n deny from|is', $file[$x], $ipblock)

поменял на
PHP:
скопировать код в буфер обмена
  1. preg_match('|deny from (.*)|is', $file[$x], $ipblock)

(Отредактировано автором: 09 Декабря, 2013 - 00:11:48)

 
 Top
teddy
Отправлено: 09 Декабря, 2013 - 00:26:59
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




valkiriy пишет:
сравнить есть ли в .htaccess ip

а не проще
PHP:
скопировать код в буфер обмена
  1. $htaccess = file_get_contents(".htaccess");
  2. if(stristr($htaccess, $ip)){
  3.     echo 'Такой IP уже есть в htaccess';
  4. }else{
  5.     echo 'Нет совпадений по IP';
  6. }

чем лепить тонну кода с регулярками?
 
 Top
valkiriy
Отправлено: 09 Декабря, 2013 - 00:34:27
Post Id


Гость


Покинул форум
Сообщений всего: 66
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)

[+]


Оу благодарю)))) ну я легких путей не ищу)
 
 Top
teddy
Отправлено: 09 Декабря, 2013 - 00:41:42
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


Помог: 91 раз(а)




valkiriy пишет:
ну я легких путей не ищу

ну это не всегда хорошо... если можно что то написать короче и при этом не нарушить логику приложения, то как правило нужно писать короче Улыбка
сложные пути нужны только тогда когда они нужны
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB