PHP: strefaphp.net
PHP: strefaphp.net



 
Czy odwiedziłeś już te strony? -
dodał: Vengeance

Opis artykułu dodano: 04-06-2004 03:47
Artykuł opisuję proces tworzenia skryptu pomocnego przy blokowaniu dostępu do naszej strony konkretnemu użytkownikowi (tzw. banowanie). Użytkownicy są banowani poprzez ich adres IP.
dodał: Vengeance | autor: Vengeance | czytano: 6398 razy

Inne materiały do artykułu

Banowanie czyli jak zabronić komuś dostępu do naszej strony
---/ Wstęp /---

Wielu z Was zepewne zastanawiało się jak w prosty sposób zablokować oglądanie strony
danej osobie(czyli tzw. ban). W gruncie rzeczy nie jest to żadna filozofia.

---/ Najprostrzy sposób /---
Aby stworzyć najprostrzy skrypt posłużymy się instrukcją warunkową if i zmienną
globalną $_SERVER['REMOTE_ADDR'] która to zawiera numer IP odwiedzającego nas gościa. Uzyskiwać ją będziemy poprzez
wywołanie: getenv('REMOTE_ADDR');
A oto kod.


Kod:


<?php
if(getenv('REMOTE_ADDR') == '192.168.1.14')
{
  echo 
'Nie masz dostępu do tej strony';
} else {

  
// Tu właściwa treść strony.
}
?>



Jest to kod bardzo prosty i nieporęczny bo co gdybyśmy chcieli zablokować kilka
różnych adresów IP ?? Wtedy trzeba by było tworzyć bardzo złożoną instrukcję if
co jest nieporęczne i zabiera nam czas.

---/ Założenia /---

Może zastanówmy się co powinien robić nasz skrypt:

- Blokować dostęp nieograniczonej liczbie numerów IP
- Być łatwym do zaimpletowania
- Trzymać gdzieś liste numerów IP

Dodatkowo:

- Umożliwiać banowanie na podstawie maski IP

A teraz opiszmy konkretniej co i jak zrobimy.
Skrypt będzie pobierał z pliku tekstowego liste IP do zablokowania.
Następnia będzie porywnywał czy czasem nasz gość (a konkretniej jego IP)
nie znajduje się w naszej liście. Oprocz tego nie wykorzystamy opisywanej wyżej
instukci if gdyż wymagało by to za dużo do zmieniania w naszych skrypach.
Skoro skrypt ma być łatwy w zaimpletowaniu będzie to oddzielny plik który będziemy poprostu
includować na początku każdego pliku.

---/ Zaczynamy prace /---

Najpierw ustalmy nazwe pliku z listą blokowanych IP i jego strukture.
Nie ma tu się co za dużo zastanawiać :) Poprostu plik nazwiemu 'banlista.php'
a każdy nowy IP do zablokowania będzie dodawany w nowej lini pliku.

Za to nasz główny skrypt będzie w pliku 'banuj.php'.

Napiszmy więc na początek kod pobierający wszystkie adresy IP z pliku 'banlista.php'.


Kod:


<?php
$sciezka 
'./banlista.php';
$lista_ip file($sciezka);
?>



Tak to wystarczy :) Teraz kod sprawdzający IP naszego gościa z listą IP i odpowiednio reagujący gdy
IP znajdzie się w liście.


Kod:


<?php
foreach($lista_ip as $ip)
{
  if(
trim($ip) == getenv('REMOTE_ADDR'))
  {
    die(
'Nie masz dostępu do tej strony. Twój adres został zbanowany.');
  }
}
?>



Tak to znów jest wszystko :P Tyle wystarczy więcej nie trzeba. Kto mówił że skrypt
musi być skomplikowany i długi :)

---/ Mała rozbudowa skryptu /---

Teraz dodamy do naszego skryptu wcześniej omawianą obsługe masek IP.
Na czym to polega ??

Przy obecnym stanie kodu aby zbanować przedział adresów IP
od 192.168.1.1 do 192.168.1.255 musielibyśmy każdy z nich oddzielnie
wpisywać do pliku z listą banowanych IP. A czy nie łatwiej było by zrobić to
za pomocą jednego wpisu o takiej postaci 192.168.1.* ??? No pewnie że łatwiej
i szybciej :)

A jak to osiągnąc ? Bardzo prosto. Posłużymy się funkcją eregi() i bardzo prostym
wyrażeniem regularnym. Oto postać funkcji eregi() której użyjemy.

eregi(trim($ip), getenv('REMOTE_ADDR'));

A więc dodajmy ją do skryptu w odpowiednim miejscu.


Kod:


<?php
$sciezka 
'./banlista.php';
$lista_ip file($sciezka);

foreach(
$lista_ip as $ip)
{
  if(
eregi(trim($ip), getenv('REMOTE_ADDR')))
  {
    die(
'Nie masz dostępu do tej strony. Twój adres został zbanowany.');
  }
}
?>



I to wszystko :)

---/ Dodajemy skrypt do naszej strony /---

Teraz zobaczmy jak dodać skrypt do naszej strony aby spełniał swoje zadanie.
Powiedzmy że mamy jakiś prosty skrypt php


Kod:


<?php
 
// Tu treść waszej strony
?>



Wystarczy, że na samej górze strony zincludujemy nasz skrypt.


Kod:


<?php include('banuj.php'); ?>
<?php
 
// Tu treść waszej strony
?>



I już wszystko jest OK :) Możemy zacząć wpisywać numery IP do naszej ban-listy.

---/ Uwagi /---

1. Aby skrypt w 100% spełniał swoje zadanie powinien zostać umieszczony
na wszystkich stronach naszego serwisu. No chyba że chcemy aby
blokował dostęp tylko do niektórych stron.

2. Taki skrypt łatwo jest ominąć. Wystarczy użyć jakiegoś proxy.
Jest na to kilka sposobów więc nie powinniśmy liczyć na to, że
ów skrypt pomoże nam całkowicie w pozbyciu się niechcianych gośći.
No chyba że w ban-liście umieścimy znak * (gwiazdki) co zabokuje dostęp
wszystkim :)

3. Niektórzy mają zmienne IP więc na nich takie banowanie nie zadziała :(

---/ Co jeszcze można dodać /---

Do takego skryptu można dodać wiele rzeczy. Między innymi banowanie bo nazwie hosta,
choć w części zabezpieczyć się przed proxy. Można go tak przerobić aby dostęp do strony
był tylko po przejściu z określonej innej witryny.
Można go takrze przerobić w taki sposób aby standartowo blokował wszystkich a do strony
dopuszczał tylko IP wymienione w pliku.

---/ Kontakt /---

Jeśli masz jakieś uwagi bądź pytania skontaktuj się ze mną vee@irc.pl
'Vengeance'

-----------------------
Artykuł można umieścić gdzieś indziej TYLKO za zgodą autora (vee@irc.pl)
Skrypt można dowolnie modyfikować. Jego używanie jest bezpłatne.
Nie trzeba nigdzie umieszczać informacji o autorze.
PHP: strefaphp.net
wyślij email informacje forum download skrypty katalog kursy porady artykuły home współpraca reklama kontakt