<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE html PUBLIC '-//W3C/DTD XHTML+Voice 1.2 /EN' 'http://www.voicexml.org/specs/multimodal/x+v/12/dtd/xhtml+voice12.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xmlns:ev='http://www.w3.org/2001/xml-events'>
<head>
<link rel='canonical' href='http://pabi3.com/blog/php-blokovanie-ip-adresy-ban/' />
<link rel='stylesheet' href='http://pabi3.com/modules/items/voice.css' type='text/css' media='all' />
<form xmlns='http://www.w3.org/2001/vxml' id='title'>
<block>
The article PHP - blokovanie ip adresy(BAN) is written by PaBi3
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='body'>
<block>

Urcite vas bude zaujimat osoba alebo skupina osob, ktora v nejakom smere skodi
vasej stranke. Najcastejsie to byva prostrednictvom pisania hlupych komentarov
k clankom alebo do diskusii.
</block>
</form>
<form xmlns='http://www.w3.org/2001/vxml' id='full'>
<block>

Vacsinou ide o ludi s mensim IQ alebo takych co si
o sebe myslia viac ako by mali. Vacsinou su to ludia od 11 do 16 rokov, ktori sa
zo sebou nevyrovnali dusevne. Cim starsi to robia tym blbsi zostanu v buducnosti.
Takymto osobam musite pristup na stranky zamedzit.
Najlepsim sposobom aky je bude pravdepodobne blokovanie ip adresy.
Ani tento sposob vsak nieje 100%, pretoze mnohi ludia vlastnia dynamicku IP adresu
co znamena, ze sa meni v urcitom nepravidelnom casovom intervale. Takymto osobam
zabranite pristup miminalne na 1 den co nepredstavuje velmi dobru spravu a vsak
existuju aj ludia, ktori maju staticke IP adresy a ti sa uz nebudu branit :-).
Jednoducho ak dostane niekto takyto BAN, tak vasu stranku uz nikdy zo zablokovanej
adresy nenavstivi.


Priprava databazy

Prve co budeme potrebovat bude databaza kde budeme ukladat IP adresy. Najlepsie
co mozeme urobit je jednoducha tabulka.


CREATE TABLE ban (
id INT UNSIGNED NOT NULL auto_increment,
ip CHAR(15) NOT NULL,
PRIMARY KEY(id)
);


Vysvetlovat toho asi vela nebudem, pretoze jedine co je v databaze podstatne je
IP adresa. Casom si mozete vytvorit do databazy aj nejake pridavky ako napr.
datum blokovania ip adresy alebo popis blokovania ip adresy.
Tymto sa vsak dnes zaoberat nebudem ale budem sa snazit poukazat na to ako IP
adresy blokovat.


Odkial a ako ziskam IP adresu?

Jednuducho. Staci na to jedna premenna alebo superglobalne pole. Skor to druhe
lebo je to novsie a dalo by sa povedat aj vo vsetkych smeroch lepsie.


&lt;?php
echo $_SERVER['REMOTE_ADDR'];
?&gt;



Hotovo, IP adresa je vypisana. V clanku predpokladam, ze si IP adresu uz do databazy
alebo niekde inde archivujete sami alebo aspon v buducnosti budete.
Ak sa vam IP adresa vklada ku kazdemu komentaru alebo podobne vzdy mate zaznam
odkial bol komentar odoslany. Ak bude odporovat vasim normam na stranke staci
ak si vytvorite formular kde budete ukladat do databazy IP adresu pre blokovanie.
Blizsie o tom formulary sa dozviete nizsie v clanku.


Ideme blokovat

Tento skript bude v podstate jednoduchy priklad na to ako IP adresu zablokovat,
takze necakajte divy.


&lt;?php #index.php
require_once('mysql.php'); // pripojenie do databazy
$sql = mysql_query("SELECT ip FROM ban");
while($zaznam = mysql_fetch_object($sql)){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($_SERVER['REMOTE_ADDR'] == $zaznam-&gt;ip){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die("BAN IP - ".$zaznam-&gt;ip."n");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}
echo "&lt;p&gt;Som rad, ze som nedostal BAN!&lt;/p&gt;n";
?&gt;


Opat upozornim ako vzdy na funkciu require_once('mysql.php'). Subor
mysql.php len simuluje subor, ktory nam zabezpeci pripojenie do
databazy podla clanku PHP pre zaciatocnikov - Databazy, 11.diel.
Pokracovanie skriptu sposobi, ze po nacitani ip adries s databaze cyklom while
skript ukonci svoju cinnost pre tych, ktori su v tej databaze zapisani. To
znamena, ze ak dam BAN ip adrese 127.0.0.1, tak sa jej vypise
text BAN IP - 127.0.0.1. Naopak osoba, ktora ma IP adresu 127.0.0.2
v databaze nieje zapisana, tak sa jej vypise text Som rad, ze som nedostal BAN!.
Skript sa neukonci ale bude pokracovat do svojho konca.


Ako ale blokovat IP?

Predpokladam, ze skusenejsi uzivatelia uz budu vediet ako zadat BAN. Jednoducho
pomocou phpMyAdmin-a alebo pomocou vytvoreneho formularu.
Takyto formular mozeme vytvorit nasledovne.


&lt;?php #ban.php
require_once('mysql.php'); // pripojenie do databazy
if(isset($_POST['zablokuj'])){
&nbsp;&nbsp;if(empty($_POST['ip'])){
&nbsp;&nbsp;&nbsp;&nbsp;$ip = FALSE;
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;$ip = $_POST['ip'];
&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;if($ip){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql = mysql_query("INSERT INTO ban(ip) VALUES('$ip')");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($sql){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;p&gt;IP adresa &lt;strong&gt;$ip&lt;/strong&gt; bola uspeąne &lt;strong&gt;zablokovana&lt;/strong&gt;!&lt;/p&gt;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;p&gt;Nastala chyba pri blokovani IP adresy!&lt;/p&gt;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;p&gt;Nezadali ste IP adresu!&lt;/p&gt;n";
&nbsp;&nbsp;&nbsp;&nbsp;}
} elseif(isset($_POST['odblokuj'])){
&nbsp;&nbsp;if(empty($_POST['ip'])){
&nbsp;&nbsp;&nbsp;&nbsp;$ip = FALSE;
&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;$ip = $_POST['ip'];
&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;if($ip){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql = mysql_query("DELETE FROM ban WHERE ip='$ip'");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if($sql){
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;p&gt;IP adresa &lt;strong&gt;$ip&lt;/strong&gt; bola uspeąne &lt;strong&gt;odblokovana&lt;/strong&gt;!&lt;/p&gt;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;p&gt;Nastala chyba pri blokovani IP adresy!&lt;/p&gt;n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;} else {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo "&lt;p&gt;Nezadali ste IP adresu!&lt;/p&gt;n";
&nbsp;&nbsp;&nbsp;&nbsp;}
} else {
&nbsp;&nbsp;echo "&lt;form action='{$_SERVER['PHP_SELF']}' method='post'&gt;";
&nbsp;&nbsp;echo "&nbsp;&nbsp;&lt;fieldset&gt;&lt;legend&gt;Zablokovanie IP adresy&lt;/legend&gt;n";
&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;IP adresa &lt;input name='ip' type='text' /&gt;&lt;br /&gt;n";
&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&lt;input name='zablokuj' type='submit' value='Zablokuj IP adresu' /&gt;n";
&nbsp;&nbsp;echo "&nbsp;&nbsp;&nbsp;&nbsp;&lt;input name='odblokuj' type='submit' value='Odblokuj IP adresu' /&gt;n";
&nbsp;&nbsp;echo "&nbsp;&nbsp;&lt;/fieldset&gt;n";
&nbsp;&nbsp;echo "&lt;/form&gt;n";
}
?&gt;


Pomocou toho skriptu budete mat kontrolu nad blokovanim IP adries ale aj nad
odlokovanim IP adries. Najlepsie je si vsak tento skript vlozit do nejakej zabezpecnej
zony ako je napr. administracia vasho systemu.


Zaver

Taketo blokovanie IP adresy bude najlepsie vyuzit vsade tam kde niekto bude skodit.
Dufam, ze vam tieto dnesne skripty pomohli.
</block>
</form>
<base href='http://pabi3.com/' />
<title>PHP - blokovanie ip adresy(BAN)</title>
</head>
<body ev:event='load' ev:handler='#title'>
<a href='http://pabi3.com/blog/php-blokovanie-ip-adresy-ban/' title='Návrat'>Návrat</a>
<h1 style='padding:0.5em;'>PHP - blokovanie ip adresy(BAN)</h1>
<ul>
<li ev:event='click' ev:handler='#body'>Speak introduction</li>
<li ev:event='click' ev:handler='#full'>Speak full</li>
</ul>
</body>
</html>

