07. januar 2006 - 21:31Der er
23 kommentarer og 1 løsning
ip banning script
Hejsa alle herinde!
Jeg kunne godt tænke mig en forklaring på _hvordan_ man kan lave et ip-banning script til f.eks en gæstebog! Jeg vil ikke have noget kode (det vil jeg selv prøve ;o)) Men kunne bare godt tænke mig en forklaring på konceptet!
Jeg har selv en idé, men den tror jeg ikke holder særligt længe, det går ud på at ved alle beskeder der bliver skrevet bliver ipén gemt, og så kan jeg banne en ip som sætter et felt i databasen til "banned" og så når en bruger skriver en besked, så gør jeg sådan her: $ip = brugeren ip $hent = mysql_query("SELECT banned FROM gbog WHERE ip = '$ip' AND banned = 'banned'") or die(mysql_error()); $tael = mysql_result($hent); if($tael > 0){ echo "Du er banned"; } else } //Indsætter i db }
Men jeg har på fornemmelsen af at det script ikke holder en meter!..
Det ville nok ikke være en god idé at gemme ip'en ved hver besked, det ville skabe for meget unødvendig tekst i databasen. Du kan evt. gøre sådan her:
Hvis du vil banne en bruger kan du indsætte hans/hendes ip i databasen `ip` Så når brugeren besøger siden kan du tjekke om brugerens ip findes i tabellen `ip` Hvis ikke den gør det, så er det fint, hvis den gør er brugeren banned.
Dette er specielt godt fordi det ikke er afhængigt af om det er en gæstebog eller forum eller hvad det nu er :)
Så jeg skal alligevel gemme brugerens ip hvergang han/hun skriver i gæstebogen eller kommer ind på siden?
Der var derfor jeg ikke troede at mit script ville due, fordi man skifter ip så tit. Men holder ens ip'er sig ikke indenfor et bestemt interval som man så kan banne?
Hvad med bare at banne en bruger? :S Altså hvis du har en tabel der hedder login så sætte en kolonne der hedder "banned" og hvis den = ja kan man ikke logge ind ?
Det med at banne de første 6-cifre er nok lidt dumt, da Ip'er jo godt kan starte med de 6 samme cifre? :)
Okay.. Og ja, det kan man sikkert, men altså det er stadig dumt at banne en IP! Fx hos min internet-host har man samme IP som alle under samme "forening" .. I min forening er der nok 1000 der har internet over antenne, og alle ikke købt seperat IP, det vil sige hvis du banner mig, så ryger der 1000 brugere :)
Nu er det altså ikke for at lyde skide klog, men den model med at tage de første 6 cifre er ikke voldsomt genial. Med den model vil du banne et sted mellem 254 og 645.000 IP adresser alt efter hvilken adresse der er tale om! En adresse kan jo være både 10.1.1.1 eller 192.168.127.210.
Jeg vil foreslå at du vedtager hvor stort et subnet du vil banne. Jeg vil skyde på at et /22 eller /23 subnet er passende. Det svarer til hhv. ~1.000 og ~500 adresser.
Et /22 subnet har netmasken 255.255.252.0 og et /23 subnet har masken 255.255.254.0
Jeg ved godt at du helst gerne vil lave det selv, men jeg kommer alligevel lige med et kode eksempel:
function getClientNet() { // Lav et array med hver del af klientes ip adresse $ip = explode('.', $_SERVER['REMOTE_ADDR']);
// Lav et array som indeholder netmasken (/22 net) $mask = array(255, 255, 252, 0);
// Et lille loop som finder netværksadressen $network = array(); for ($i = 0; $i < 4; $i++) { $network[$i] = (int)$ip[$i] & (int)$mask[$i]; }
// $network indeholder nu et array med netwærksadressens elementer // Dem smelter vi sammen til ét og returnerer return implode('.', $network); }
...MySQL init... $res = mysql_query("SELECT * FROM banned WHERE address = '" . getClientNetwork ."'); ...Check om der kom noget tilbage...
cronaldo: Nu er der jo tale om en gæstebog, og der synes jeg ikke det er rimeligt at bede folk om at oprette en bruger for at skrive. Og som -aco- også skriver, så er det jo ikke værre end at man kan oprette en ny hvis man er havnet på den sorte liste. IP banning er stort set den eneste vej udenom. Det er surt hvis det går ud over andre, men livet har aldrig været retfærdigt.
Og så lige en rettelse til sidste linie i scriptet jeg postede: $res = mysql_query("SELECT * FROM banned WHERE address = '" . getClientNet() ."');
- og hvis man absolut vil lave 'pjatrøv' med dig, går man jo bare over en proxy og skriver 100 indlæg ... så banner du en bunke tilfældige adresser, men ikke den formasteliges =)
jeg vil foreslå at banne på username'et istedet, da ip'en jo kan variere, og de så bare kan logge ind fra en anden com, har et script til username, hvor der er banning tíme, kommentar og admin system.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.