PHP - blokovanie ip adresy(BAN)

Určite vás bude zaujímať osoba alebo skupina osôb, ktorá v nejakom smere škodí vašej stránke. Najčastejšie to býva prostredníctvom písania hlúpych komentárov k článkom alebo do diskusií.

Väčšinou ide o ľudí s menším IQ alebo takých čo si o sebe myslia viac ako by mali. Väčšinou sú to ľudia od 11 do 16 rokov, ktorí sa zo sebou nevyrovnali duševne. Čím starší to robia tým blbší zostanú v budúcnosti. Takýmto osobám musíte prístup na stránky zamedziť. Najlepším spôsobom aký je bude pravdepodobne blokovanie ip adresy. Ani tento spôsob však nieje 100%, pretože mnohí ľudia vlastnia dynamickú IP adresu čo znamená, že sa mení v určitom nepravidelnom časovom intervale. Takýmto osobám zabránite prístup miminálne na 1 deň čo nepredstavuje veľmi dobrú správu a však existujú aj ľudia, ktorí majú statické IP adresy a tí sa už nebudú brániť :-). Jednoducho ak dostane niekto takýto BAN, tak vašu stránku už nikdy zo zablokovanej adresy nenavštívi.

Príprava databázy

Prvé čo budeme potrebovať bude databáza kde budeme ukladať IP adresy. Najlepšie čo môžeme urobiť je jednoduchá tabuľka.

CREATE TABLE ban (
id INT UNSIGNED NOT NULL auto_increment,
ip CHAR(15) NOT NULL,
PRIMARY KEY(id)
);

Vysvetlovať toho asi veľa nebudem, pretože jediné čo je v databáze podstatné je IP adresa. Časom si môžete vytvoriť do databázy aj nejaké prídavky ako napr. dátum blokovania ip adresy alebo popis blokovania ip adresy. Týmto sa však dnes zaoberať nebudem ale budem sa snažiť poukázať na to ako IP adresy blokovať.

Odkiaľ a ako získam IP adresu?

Jednuducho. Stačí na to jedna premenná alebo superglobálne pole. Skôr to druhé lebo je to novšie a dalo by sa povedať aj vo všetkých smeroch lepšie.

<?php
echo $_SERVER['REMOTE_ADDR'];
?>

Hotovo, IP adresa je vypísaná. V článku predpokladám, že si IP adresu už do databázy alebo niekde inde archivujete sami alebo aspoň v budúcnosti budete. Ak sa vám IP adresa vkladá ku každému komentáru alebo podobne vždy máte záznam odkiaľ bol komentár odoslaný. Ak bude odporovať vaším normám na stránke stačí ak si vytvoríte formulár kde budete ukladať do databázy IP adresu pre blokovanie. Bližšie o tom formuláry sa dozviete nižšie v článku.

Ideme blokovať

Tento skript bude v podstate jednoduchý príklad na to ako IP adresu zablokovať, takže nečakajte divy.

<?php #index.php
require_once('mysql.php'); // pripojenie do databázy
$sql = mysql_query("SELECT ip FROM ban");
while($zaznam = mysql_fetch_object($sql)){
      if($_SERVER['REMOTE_ADDR'] == $zaznam->ip){
            die("BAN IP - ".$zaznam->ip."n");
      }
}
echo "<p>Som rad, ze som nedostal BAN!</p>n";
?>

Opäť upozorním ako vždy na funkciu require_once('mysql.php'). Súbor mysql.php len simuluje súbor, ktorý nám zabezpečí pripojenie do databázy podľa článku PHP pre začiatočníkov - Databázy, 11.diel. Pokračovanie skriptu spôsobí, že po načítaní ip adries s databáze cyklom while skript ukončí svoju činnosť pre tých, ktorí sú v tej databáze zapísaní. To znamená, že ak dám BAN ip adrese 127.0.0.1, tak sa jej vypíše text BAN IP - 127.0.0.1. Naopak osoba, ktorá má IP adresu 127.0.0.2 v databáze nieje zapísaná, tak sa jej vypíše text Som rad, ze som nedostal BAN!. Skript sa neukončí ale bude pokračovať do svojho konca.

Ako ale blokovať IP?

Predpokladám, že skúsenejší užívatelia už budú vedieť ako zadať BAN. Jednoducho pomocou phpMyAdmin-a alebo pomocou vytvoreného formuláru. Takýto formulár môžeme vytvoriť nasledovne.

<?php #ban.php
require_once('mysql.php'); // pripojenie do databázy
if(isset($_POST['zablokuj'])){
  if(empty($_POST['ip'])){
    $ip = FALSE;
  } else {
    $ip = $_POST['ip'];
  }
    if($ip){
      $sql = mysql_query("INSERT INTO ban(ip) VALUES('$ip')");
      if($sql){
        echo "<p>IP adresa <strong>$ip</strong> bola úspeąne <strong>zablokovaná</strong>!</p>n";
      } else {
        echo "<p>Nastala chyba pri blokovaní IP adresy!</p>n";
      }
    } else {
      echo "<p>Nezadali ste IP adresu!</p>n";
    }
} elseif(isset($_POST['odblokuj'])){
  if(empty($_POST['ip'])){
    $ip = FALSE;
  } else {
    $ip = $_POST['ip'];
  }
    if($ip){
      $sql = mysql_query("DELETE FROM ban WHERE ip='$ip'");
      if($sql){
        echo "<p>IP adresa <strong>$ip</strong> bola úspeąne <strong>odblokovaná</strong>!</p>n";
      } else {
        echo "<p>Nastala chyba pri blokovaní IP adresy!</p>n";
      }
    } else {
      echo "<p>Nezadali ste IP adresu!</p>n";
    }
} else {
  echo "<form action='{$_SERVER['PHP_SELF']}' method='post'>";
  echo "  <fieldset><legend>Zablokovanie IP adresy</legend>n";
  echo "    IP adresa <input name='ip' type='text' /><br />n";
  echo "    <input name='zablokuj' type='submit' value='Zablokuj IP adresu' />n";
  echo "    <input name='odblokuj' type='submit' value='Odblokuj IP adresu' />n";
  echo "  </fieldset>n";
  echo "</form>n";
}
?>

Pomocou toho skriptu budete mať kontrolu nad blokovaním IP adries ale aj nad odlokovaním IP adries. Najlepšie je si však tento skript vložiť do nejakej zabezpečnej zóny ako je napr. administrácia vášho systému.

Záver

Takéto blokovanie IP adresy bude najlepšie využiť všade tam kde niekto bude škodiť. Dúfam, že vám tieto dnešné skripty pomohli.

Alternatívne verzie: Text PDF Voice
Autor: PaBi3 · Kategória: Programovanie · Dátum: 25.09.2005 17:44

Komentáre

#1 johny E-mail
05.03.2006 18:03
skvele a co ked som v sieti s x dalsimi ludmi s rovnakou externou adresou, co spravis? das BAN stovkam ludi naraz, skvele riesenie... naozaj super...

#2 admin Web E-mail
05.03.2006 20:54
admin Vzhľadom k tvojej reakcií, vidím že si bol celkom v šoku, keď si to písal. Skús si prečítať nadpis a uvidíš, že ide o blokovanie IP adresy. Pokiaľ si taký dobrý, v čo určite nepochybujem budeš to vedieť urobiť lepšie [wink].

#3 unknown
14.04.2006 18:20
A čo by si spravil keby som použil HIDE IP PLATINUM na pripojenie sa cez neznámu ip adresu trebarz v Columbii ? Ty mi dáš ban, ja si zmením ip adresu a hurá som tu o5. Proti tomu sa asi nedá nič robiť a ja si môžem meniť ip do nekonečna alebo sa mýlim ?

#4 draewor E-mail
22.04.2006 20:42
Heh, no neviem neviem, proti tomu sa nedá urobiť snáď nič, asi by ešte pomohlo cookies, aj keď to je otrava. Najlepšie riešenie (podľa mňa) je vytvoriť portál, ktorý bude obsahovať login sekciu. To znamená že keď budete chcieť bloknúť nejakého užívateľa ktorý vám robí neplechu, stačí bloknúť jeho prihlasovacie meno (resp. nickname). A the problem is solved =) (samozrejme ani to nie je úplne skvelé riešienie, lebo ak sa človek registruje opäť s úplne inými údajmi a proste vás oblbne tak to je aj tak jedno. pravdepodobne neexistuje optimálne riešenie ako zakázať niekomu prístup na vašu stránku. ten kto sa tam bude chcieť dostať, sa tam aj tak dostane)

#5 vlaada
21.05.2006 20:38
tieto navody su sice dobre, ale asi niekto nevie a proxy serveroch, vsak? potom mozete blokovat, kolko sa vam len chce [idea]

#6 Hacky Web
27.06.2006 16:44
a co kdyz ale budu dostávat tu ip takto :
<?php
function tit_get_ip() {
/* THIS FUNCTION GET PROXI AND REAL IP */
if ( !is_null($_SERVER["HTTP_X_FORWARDED_FOR"]) )
{
$ip["proxi"] = $_SERVER["REMOTE_ADDR"];
$ip["real"] = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
$ip["real"] = $_SERVER["REMOTE_ADDR"];
}
echo(' '.$ip["real"].'<BR>PROXI IP : '.$ip["proxi"] );
}
echo tit_get_ip();
?>
?

#7 admin Web E-mail
20.01.2007 11:45
admin Áno, pokiaľ niekto bude pristupovať cez proxy, skutočná IP adresa bude uložená v $_SERVER['HTTP_X_FORWARDED_FOR']. Horšie bude anonymné proxy. Cez IP adresu sa prístup zablokovať na 100% nedá, teda neexistuje možný spôsob okrem filtrovania/blokovania užívateľov, ktorí sa pripájajú cez anonymné proxy.

#8 Blackdevil E-mail
17.05.2007 19:03
vzhladom na to ze som fakt uplny zaciatocnik v php tak nemam ani sajnu co mam kde prepisat a co kam napisat...tak si myslim ze by bolo dobre kebize beriete ohlad aj na zaciatocnikov a venovali by ste sa tomu viac a by ste aj napisali co kde treba napisat a prepisat...myslimsi ze by to bolo omnoho lepsie a vsetci by boly spokojny...

#9 estro Web E-mail
30.07.2007 20:23
Blackdevil: najprv sa nauc gramatiku, potom php a sql, a az potom sem nieco pis ...

#10 nika E-mail
04.11.2007 14:37
Ahoj, som uplný laik co sa IP adries tyka, preto by som potrebovala jednoduchu laicku pomoc pri zistení IP adresy ineho uzivatela, ktorý mi posiela nevysvetlitelne vyhrazne maily a postu cez chat. Uz som kontaktovala aj adminov na prislusnej stranke, ale nedostalo sa mi odpovede. Vy ste moja jedina zachrana.Dakujem

#11 admin Web E-mail
04.11.2007 19:10
admin [10] nika, IP adresu odkiaľ vám prišiel e-mail zistíte v hlavičke každého e-mailu.

#12 Black Hawk E-mail
03.01.2008 14:08
no a do koľkých súborov to všetko vložiť??Robím registráciu cez php a nechcem tam mať ľudí ktorí by škodili...

#13 blaznivadivoska E-mail
31.08.2009 21:45
ahojte,mohool by miniekto zvas napisat na maila,aky je nejaky program na to bloknutie ip adresy,,nemama ni paru,ako to urobit,nechapem tomy ,ze by mi to dakto jedine vysvetlil,,prosiiiim

#14 fofo32 E-mail
15.12.2009 02:24
Ak to chcete mať skutočne najjednoduchšie (aj keď maximálne neefektívne ale ide možno o pochopenie) tak do PHP kódu doplníte proste niečo takéto:
.
.
.
$IP = $_SERVER['REMOTE_ADDR'];

/*Teraz máme v premennej $IP, IP daného prispievateľa. Túto informáciu vložíte napríklad na koniec jeho príspevku farbou pozadia aby nebola viditeľná. Keď napíše príspevok. Na jeho konci bude jeho IP. Keď viete jeho IP tak môže nasledovať kód na jeho blokovanie:*/
.
.
.
if($IP == "xxx.xxx.xxx.xxx")
{
?>
<SCRIPT language="JavaScript">alert("Bol ti zamedzený prístup do fóra,\npre opakované porušovanie pravidiel.\nKontaktuj admina."); window.close();</script>
<?
}
else
{
/*Sem príde kód pre tých čo nemajú IP blokované.*/
}

Ak je potrebné blokovať viacero IP adries, len sa dá podmienka skomplikuje:
if($IP == "xxx.xxx.xxx.xxx" || $IP == "xxx.xxx.xxx.xxx" || $IP == "xxx.xxx.xxx.xxx" ...)

Ešte raz chcem podotknúť, že je to neefektívne a úplne o ničom. Pre pochopenie to však asi stačí ;)

#15 phm46 Web E-mail
15.08.2011 14:59
Dá sa pomocou PHP zistiť aj MAC adresa počítača?

Osobné údaje
Captcha
Odpíšte text z obrázku. Rozlišujú sa malé a veľké písmená.
Obsah
Možnosti