Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Banowanie z "maskami" ? i *
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
hwao
Na dole podalem przyklad pelnego sprawdzonego uzycia z banami w pliku txt
Niezmiernie sie nudzilem :-) wiec napisalem cos takiego moze komus sie przyda :-P
Co prawda nie ma cache itp (banow na hosty) ale powino wystarczyc dla mniej wymagajacych ;-) (zawsze mozna rozbudowac)

  1. <?php
  2.  function ban( $arrList, $ip ) {
  3. if( in_array( $ip, $arrList ) ) {
  4.  // Ma bana
  5.  return TRUE;
  6. }
  7.  
  8. // Jezeli dane jedziesz z pliku to proponuje dopisac do tej tablicy jeszcze
  9. // \"n\" => '', \"r\" => ''
  10. // :-)
  11.  
  12. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.' );
  13.  
  14. foreach( $arrList AS $key => $value ) {
  15. if( preg_match( '#^'.strtr( $value, $replace ).'$#', $ip ) ) {
  16.  return TRUE;
  17. }
  18.  
  19. }
  20.  
  21. return FALSE; 
  22.  }
  23. ?>

To cala funkcja nastepnie...


Proste uzycie
  1. <?php
  2.  $array = array(
  3. '10.1.1.1',
  4. '*.212.0.1',
  5. '1?2.3.4.2',
  6. '*.1?2.3.*'
  7.  );
  8.  
  9.  $ip = '10.1.1.1';
  10.  //$ip = $_SERVER['REMOTE_ADDR'];
  11.  
  12.  if( ban( $array, $ip ) ) {
  13. echo 'Zbanowany';
  14.  }
  15.  else {
  16. echo 'NieBan';
  17.  }
  18. ?>


a to chyba najbardziej wygodne
  1. <?php
  2.  if( !ban( file( 'plik.bany.txt' ), $_SERVER['REMOTE_ADDR'] ) ) {
  3. die( 'Aaa... Twoje ip jest zbanowane...' );
  4.  }
  5. ?>


Chyba glowny plus to maski wiec dzialaja one tak
* dowolna liczba z zakresu 0-255 czyli np 10.0.0.*
Banuje
10.1.1.0
10.1.1.1
...
10.1.1.255

? dowolna liczba z zarkesu od 9-0 czyli
10.?.0.0
Banuje
10.1.0.0
10.2.0.0
10.3.0.0
...
10.9.0.0
Ale juz nie
10.10.0.0 :-) (jakby bylo zamias ? * to by byl ban)
Mozna oczywsice z ? kozystac w polaczeniu np
10.12?.1.1
Banuje
10.120.1.1
10.121.1.1
...
10.129.1.1

Jak i laczyc wszytko np
*.23?.*.*
Caw
CZY NIKT MI NIE PODPOWIE JAK SIE UMEISZCA TEN SKRYPT NA STRONIE WWW ? worriedsmiley.gif


Świetnie bo to jest to czego szukam tylko mam pytanie bo nie wiele wiem o php wiec czy moze ktoś pomóc i opisać czy ten kod wstawia sie w jakies pliki .txt a któro wstawia się do samego index.php dla was to jest trywialne dla mnie jednak nie tiredsmiley.gif

i czy ten skrypt blokuje ip na wszytskich przegladarkach tzn jak ktos wchodzi z IE czy z FireFoxa ? bo ja mialem taki co blokuje ale tylko pod firefoxa tiredsmiley.gif
Dex1987
Ad 1. poprostu wstawiasz na poczatku strony

  1. <?php
  2.  
  3. include (&#092;"block.php\");
  4.  
  5.  $array = array(
  6. '10.1.1.1',
  7. '*.212.0.1',
  8. '1?2.3.4.2',
  9. '*.1?2.3.*'
  10.  );
  11.  
  12.  $ip = '10.1.1.1';
  13.  //$ip = $_SERVER['REMOTE_ADDR'];
  14.  
  15.  if( ban( $array, $ip ) ) {
  16. echo 'Zbanowany';
  17.  }
  18.  else {
  19. echo 'NieBan';
  20.  }
  21. ?>


Plik do ktorego to wstawiasz musi byc plikiem php, jak masz plik html to wstaw to na poaczatku strony i zmien rozszerzenie na np index.php. pozniej zrob plik block.php i wstaw tam kod

  1. <?php
  2.  function ban( $arrList, $ip ) {
  3. if( in_array( $ip, $arrList ) ) {
  4.  // Ma bana
  5.  return TRUE;
  6. }
  7.  
  8. // Jezeli dane jedziesz z pliku to proponuje dopisac do tej tablicy jeszcze
  9. // \"n\" => '', \"r\" => ''
  10. // :-)
  11.  
  12. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.' );
  13.  
  14. foreach( $arrList AS $key => $value ) {
  15. if( preg_match( '#^'.strtr( $value, $replace ).'$#', $ip ) ) {
  16.  return TRUE;
  17. }
  18.  
  19. }
  20.  
  21. return FALSE;
  22.  }
  23. ?>


i potem w tablicy

  1. <?php
  2.  $array = array(
  3. '10.1.1.1',
  4. '*.212.0.1',
  5. '1?2.3.4.2',
  6. '*.1?2.3.*'
  7.  );
  8. ?>


Wpisujesz ip ktore chcesz banowac
Caw
Sory ale to nie działa blink.gif pierwszy kod wstawiłem do pliku gora.php nad znaczinikem html tak jak poniżej:


Kod
<?php

include ("block.php");

  $array = array(
     '83.12.23.35',
  );
 
  $ip = '83.12.23.35';
  //$ip = $_SERVER['REMOTE_ADDR'];
 
  if( ban( $array, $ip ) ) {
     echo 'Zbanowany';
  }
  else {
     echo 'NieBan';
  }
?>

<HTML>
<HEAD>



moj index.php wygląda tak

Kod
<? include "gora.php" ?><? include "pliki/start.php" ?><? include "dol.php" ?>
<? include "prawa.php" ?>


plik góra.php to poczatek strony tam sa znaczniki <HTML><HEAD><BODY>

przykładowo wpisałem swoje IP aby sprawdzić czy banuje i co widze :| wchodze na strone a tam pojawia się tylko napis na samej gorze zbanowany :| a strona działa normlanie więc nie wiem o co chodzi.

Jak wstawiłem ten skrypt do pliku index.php to całkiem strona nie chciała się wyświetlić sadsmiley02.gif

nie wiem o co chodzi :/

plikowi block.php nadałem atrybuty 777 na serwerze.


Ktoś wie o co chodzi ?:/ Aha sprawdzałem to pod IE 6
-----------------------------------------------------------------------------

A gdzie mam wsadzic te piec linijek blink.gif questionmark.gif

Kod
<?php
  if( !ban( file( 'plik.bany.txt' ), $_SERVER['REMOTE_ADDR'] ) ) {
  die( 'Aaa... Twoje ip jest zbanowane...' );
   }
?>
brachu
To jest dosyc proste wstawiasz kod strony tam gdzie ma przechodzic warunek i tyle!!! robisz includa po ifie zbanowane czy tam nie zbanowane... i wszystko hula biggrin.gif
hwao
Strona.php (gdzie kolwiek)
  1. <?php
  2. <php
  3. //.. zalacz funkcje alob wklej :-)
  4. if( !ban( array_map( 'trim', file( 'plik.bany.txt' ) ), $_SERVER['REMOTE_ADDR'] ) ) {
  5.  die( 'Aaa... Twoje ip jest zbanowane... ' . $_SERVER['REMOTE_ADDR'] );
  6. }
  7.  
  8. ?>


plik.bany.txt
Kod
83.12.23.35
83.12.*.?32


Na ten kod nie ma wplywu przegladarka... jak os nie dziala dalej daj znac:)
Caw
sory ale jestem chyba jakiś inny blink.gif chciałbym podkreslić że nie mam zupełnie pojęcia o php potrafie wkleić tylko gotowy kod.
Zrobiłem takl jak hwao napisałeś stowrzyłem plik.bany.txt wkleiłem ten kod tak jak tu pisze:

Kod
<?php
<php
//.. zalacz funkcje alob wklej :-)
if( !ban( array_map( 'trim', file( 'plik.bany.txt' ) ), $_SERVER['REMOTE_ADDR'] ) ) {
die( 'Aaa... Twoje ip jest zbanowane... ' . $_SERVER['REMOTE_ADDR'] );
}

?>


i nie dzieje się nic pozatym że strona rozwaliła się wszystkei tabelki się rozsypały :| kod wkleiłem zaraz pod znacznikiem <BODY>
jedna sprawa jest napisane takie coś:

//.. zalacz funkcje alob wklej :-)

czy to ma znaczyć że mam tu cos wkleić ? blink.gif ?



BARDZO BEDE WDZIECZNY JESLI KTOS NAPISZE MI DOKŁADNY KOD JAKI MAM WKLEIĆ DO PLIKU.php NIC WIECEJ NIE CHCE JEDYNIE ZEBY TO RUSZYŁO sadsmiley02.gif
hwao
  1. <?php
  2.  function ban( $arrList, $ip ) {
  3. if( in_array( $ip, $arrList ) ) {
  4.  // Ma bana
  5.  return TRUE;
  6. }
  7.  
  8. // Jezeli dane jedziesz z pliku to proponuje dopisac do tej tablicy jeszcze
  9. // \"n\" => '', \"r\" => ''
  10. // :-)
  11.  
  12. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.' );
  13.  
  14. foreach( $arrList AS $key => $value ) {
  15. if( preg_match( '#^'.strtr( $value, $replace ).'$#', $ip ) ) {
  16.  return TRUE;
  17. }
  18.  
  19. }
  20.  
  21. return FALSE;
  22.  }
  23.  
  24.  if( !ban( array_map( 'trim', file( 'plik.bany.txt' ) ), $_SERVER['REMOTE_ADDR'] ) ) {
  25. die( 'Aaa... Twoje ip jest zbanowane... ' . $_SERVER['REMOTE_ADDR'] );
  26.  }
  27.  
  28. ?>


W pliku plik.bany.txt umiesc liste.. jak cos nie dziala daj znac (jak bedzie dzialac to tez daj znac bo calosc z glowy)
Caw
chyba trafił ci sie natretny pechowiec tiredsmiley.gif już myślałem że się udało bo strona jest cała nie wywala zadnego błedu php ale co z tego skoro mnie nie banuje sadsmiley02.gif wpisałem swoje IP i strona otwiera się bez problemu blink.gif

Nie wiem moze testowałeś to na jakiejś www czy to działa na 100% questionmark.gif

Nie wiem co mogłem zrobić źle bo wkleiłem zaraz pod <BODY> dokładnie to co tu napisałes w osttanim poscie zrobiłem plik.bany.txt napisałem w nim swoje IP zapodałem to na serwer i kicha :/
Bakus
Może dogadajcie sie przez PW...
To forum ma być archiwum dobrych i użytecznych klas, a jak widać przenosimy tu "php Początkujący"...
Hwao: Bądź tak miły po dogadaniu się o co chodzi jakoś uporządkować ten wątek...
Krok po kroku jak ma wyglądać instalacja i co ma być w jakim pliku... bo jak widać niedostatecznie to opisałeś... z góry dzięki... będę miał mniej pracy w moim dziale tongue.gif
Caw
hwao jeszcze jedno tongue.gif ten skrypt banuje teraz wszystkich blink.gif kto nie wejdzie obojetnie jakie ma ip ma napis "Aaa... Twoje ip jest zbanowane... TUTAJ NUMER IP"

Lol mozesz powiedziec o co chodzi ?tongue.gif do pliku txt wpisałem tylko swoje ip z neostardy przeniosłem wczoraj na serwer nic sie nie stało dzisiaj rano wstaje a tu mam 12 info na gg dlaczego mnie zbanowałes tongue.gif wiec jeszcze raz zapytam czy ten skrypt testowales gdzies biggrin.gif
hwao
Ok no to wersja testowana przezemnie i dziala winksmiley.jpg wiec...

ban.lib.php
  1. <?php
  2.  function ban( $arrList, $ip ) {
  3. if( in_array( $ip, $arrList ) ) {
  4.  // Ma bana
  5.  return TRUE;
  6. }
  7.  
  8. // Jezeli dane jedziesz z pliku to proponuje dopisac do tej tablicy jeszcze
  9. // \"n\" => '', \"r\" => ''
  10. // :-)
  11.  
  12. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.' );
  13.  
  14. foreach( $arrList AS $key => $value ) {
  15. if( preg_match( '#^'.strtr( $value, $replace ).'$#', $ip ) ) {
  16.  return TRUE;
  17. }
  18.  
  19. }
  20.  
  21. return FALSE;
  22.  }
  23. ?>



ban.db
Kod
127.0.0.2
*.?.?.?1
11.33.24.54
127.0.*.1


test.php
  1. <?php
  2.  
  3.  // Kod pozyzej widoczny dla kazdego :)
  4.  
  5.  include( 'ban.lib.php' );
  6.  if( ban( file( 'ban.db' ), $_SERVER['REMOTE_ADDR'] ) ) {
  7. die( 'Aaa... Twoje ip jest zbanowane... <b>'.$_SERVER['REMOTE_ADDR'].'</b>' );
  8.  }
  9.  
  10.  // Kod ponizej jest dostepny tylko dla nie zdanowanych :)
  11. ?>
  12.  
  13. <p>Strona do ktorej nie maja dostep zbanowani :)</p>
  14.  
  15. <?php
  16. echo '<p><b>Ip: '. $_SERVER['REMOTE_ADDR'] .'</b></p>';
  17. ?>


Wszytko dziala sprawdzalem ;P smile.gif
Bojakki
A jak zrobic by dostep do strony byl tylko dla osob, ktorych IP jest w spisie, a dla calej reszty nie ma.
mike
Cytat(Bojakki @ 2005-12-24 13:24:09)
A jak zrobic by dostep do strony byl tylko dla osob, ktorych IP jest w spisie, a dla calej reszty nie ma.

Ok, to jak sam nie potrafisz mysleć to ja pomyslę za Ciebie laugh.gif

Skoro to banuje wszystkich na liście:
  1. <?php
  2. if( ban( $array, $ip ) )
  3. {
  4. echo 'Zbanowany';
  5. }
  6. else
  7. {
  8. echo 'Nie zbanowany';
  9. }
  10. ?>


To znaczy że to zbanuje tych których na liście nie ma:
  1. <?php
  2. if( ban( $array, $ip ) )
  3. {
  4. echo 'Nie zbanowany';
  5. }
  6. else
  7. {
  8. echo 'Zbanowany';
  9. }
  10. ?>


Przecież wystarczy warunki odrwócić
LOL laugh.gif
qbejs
Ja dziś z nudów napisałem prostą funkcję obsługi banów....jedynie trzeba sobie do niej stworzyć forma...zastosowałem metodę banowania przez host....IP się często zmienia i łatwo je zmienić a host już nie...przykład do Neostrada TP gdzie IP sie dynamiczne ale host masz ten sam...

Oto kod:
  1. <?php
  2. function ban();
  3. {
  4. $host = gethostbyaddr($_SERVER['REMOTE_ADDR']]);
  5. $ban_query = mysql_query("SELECT host FROM `ban` WHERE host='".$host."'") or die(mysql_error());
  6. $ban_array = mysql_fetch_array($ban_query);
  7. if ($ban_array['host'] == $host)
  8. {
  9. include ('ban.php');
  10. }else
  11. include ('index.php');
  12. }
  13. ?>
Spirit86
no, ale to co Ty napisałeś nie ma masek ;]
Banicja jest niemożliwa, jak jakiś upierdliwy użytkownik zna się choć trochę na internecie :/.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.