Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] skrypt banowania, problem z kilkoma IP
pitu
post 10.04.2008, 22:07:58
Post #1





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

Ostrzeżenie: (0%)
-----


Witam

Mam skrypt ban listy na swojej stronie, korzysta ona z pliku ban.txt niby wszystko ok jak mam dopisane 1 ip do działa ale jak dopiszę następne np. po spacji albo enterze to już nie działa(osoby z tymi ip mogą wejść na stronę) czy ktoś może zobaczyć ten skrypt i w razie czego przerobić go aby można było dopisywać ip po spacji czyli np. 53.21.252.253 53.21.252.257

Oto ten skrypt:

-kod wklejany do index.php
  1. <?php
  2. include( 'cfg/ban.lib.php' );
  3.  if( ban( file( 'cfg/ban.txt' ), $_SERVER['REMOTE_ADDR'] ) ) {
  4. die( 'Twoje ip jest zbanowane'.$_SERVER['REMOTE_ADDR'].'' );
  5.  }
  6. ?>


-plik ban.lib.php
  1. <?php
  2. function ban( $arrList, $ip ) {
  3. if( in_array( $ip, $arrList ) ) {
  4.  return TRUE;
  5. }
  6. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.');
  7.  
  8. foreach( $arrList AS $key => $value ) {
  9. if( preg_match( '#^'.strtr( $value, $replace ).'$#', $ip ) ) {
  10.  return TRUE;
  11. }
  12.  
  13. }
  14.  
  15. return FALSE;
  16.  }
  17. ?>


Z góry dziękuję za pomoc

Ten post edytował pitu120 10.04.2008, 22:37:55


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post
Lonas
post 11.04.2008, 06:42:11
Post #2





Grupa: Zarejestrowani
Postów: 576
Pomógł: 14
Dołączył: 9.11.2005

Ostrzeżenie: (20%)
X----


Spróbuj tak

  1. <?php
  2. include( 'cfg/ban.lib.php' );
  3.  if( ban( file_get_contents( 'cfg/ban.txt' ), $_SERVER['REMOTE_ADDR'] ) ) {
  4. die( 'Twoje ip jest zbanowane'.$_SERVER['REMOTE_ADDR'].'' );
  5.  }
  6. ?>
  7.  
  8. //drugi plik
  9.  
  10. <?php
  11. function ban( $arrList, $ip ) 
  12. {
  13.  $arrIP = explode(" ",$arrList); 
  14.  
  15.  if( in_array( $ip, $arrIP ) ) 
  16.  return TRUE;
  17.  else
  18.  return FALSE;
  19. }
  20. ?>


Ten post edytował Lonas 11.04.2008, 06:44:15


--------------------
Go to the top of the page
+Quote Post
nevt
post 11.04.2008, 06:48:15
Post #3





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


funkcja in_array() nie znajduje ci IP ponieważ standardowo file() w każdym wierszu zwraca też znaki końca linii, zmień na:
  1. <?php
  2. if( ban( file( 'cfg/ban.txt', FILE_IGNORE_NEW_LINES), $_SERVER['REMOTE_ADDR'] ) ) {
  3. ?>

i będzie działać. kolejne wpisy IP umieszczaj w osobnych liniach pliku, bez żadnych spacji przed lub po... powodzenia.


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
pitu
post 11.04.2008, 15:04:11
Post #4





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

Ostrzeżenie: (0%)
-----


To tak kod podany przez @Lonas troszkę mniej mniej interesuje, ponieważ chciałbym mieć banowanie z maskami (np. 54.65.*) a po zmianie podanej przez @nevt jest tak, że wstawiam np. tak ip do txt:
  1. 83.21.253.52
  2. 83.21.253.54
  3. 83.21.253.51


To wtedy banuje tylko podany jako ostatni ip, gdy wstawię swój ip jako np. pierwszy albo drugi od końca to normalnie wchodzę na stronę.


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post
nevt
post 11.04.2008, 16:53:14
Post #5





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


czy ten plik tworzysz pod windoząquestionmark.gif jeżeli tak, to wróć do pierwotnej wersji (z pierwszego posta), a pierwszej linijce funkcji ban() dopisz:
  1. <?php
  2. function ban( $arrList, $ip ) {
  3. $arrList = str_replace(array("r", "\n"), array('', '') $arrList);
  4. if( in_array( $ip, $arrList ) ) {
  5. ...
  6. ?>


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
pitu
post 11.04.2008, 19:12:27
Post #6





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

Ostrzeżenie: (0%)
-----


Kurcze zmieniłem tak jak podał kolega @nevt, przynajmniej z tego co ja zrozumiałem miałem zmienić w pliku ban.lib.php i zmieniłem tak:
  1. <?php
  2. function ban( $arrList, $ip ) {
  3. $arrList = str_replace(array("r", "\n"), array('', '') $arrList);
  4. if( in_array( $ip, $arrList ) ) {
  5.  return TRUE;
  6. }
  7. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.');
  8.  
  9. foreach( $arrList AS $key => $value ) {
  10. if( preg_match( '#^'.strtr( $value, $replace ).'$#', $ip ) ) {
  11.  return TRUE;
  12. }
  13.  
  14. }
  15.  
  16. return FALSE;
  17.  }
  18. ?>


Jeśli to miało być zrobione w ten sposób to lipa, bo wywala błąd i strona się nie wyświetla sad.gif


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post
Crozin
post 11.04.2008, 19:32:16
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. <?php
  2.  
  3. include( 'cfg/ban.lib.php' );
  4. if(ban('cfg/ban.txt', $_SERVER['REMOTE_ADDR'])){ 
  5. die( 'Twoje ip jest zbanowane: '.$_SERVER['REMOTE_ADDR'].'</b>' ); 
  6. }
  7.  
  8. ?>
  1. <?php
  2.  
  3. function ban($filename, $remoteAddr){
  4. $fileContents = file($filename, FILE_IGNORE_NEW_LINES);
  5. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})');
  6.  
  7. foreach($fileContents as $line){ 
  8. if(preg_match( '#^' . strtr($value, $replace) . '$#', $remoteAddr)) 
  9. return true; 
  10.  
  11. return false;
  12. }
  13.  
  14. ?>
Go to the top of the page
+Quote Post
pitu
post 11.04.2008, 19:52:31
Post #8





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

Ostrzeżenie: (0%)
-----


W tym kodzie co podałeś brakowało { za
  1. <?php
  2. if(preg_match( '#^' . strtr($value, $replace) . '$#', $remoteAddr))
  3. ?>


i

}
}
za
  1. <?php
  2. return true;
  3. ?>


Bo jak ich nie było wywalało bład ale mimo, że poprawiłem dodając te znaki niby juz nie było blędów na stronie ale mimo dopisywania do txt ip nie banowało sad.gifsad.gif


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post
nevt
post 11.04.2008, 19:58:01
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


zabrakło jednego przecinka!!! spróbuj raz jeszcze:
  1. <?php
  2. $arrList = str_replace(array("r", "\n"), array('', ''), $arrList);
  3. ?>


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post
pitu
post 11.04.2008, 20:06:45
Post #10





Grupa: Zarejestrowani
Postów: 476
Pomógł: 96
Dołączył: 10.04.2008
Skąd: Koszalin

Ostrzeżenie: (0%)
-----


Dzięki @nevt teraz jest ok smile.gif


--------------------
HTML/CSS/JS: jsfiddle
SQL: sqlfiddle
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 17.06.2025 - 22:31