Avatar billede webstuff Nybegynder
07. januar 2006 - 21:31 Der 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!..
Avatar billede udvikler Nybegynder
07. januar 2006 - 21:42 #1
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 :)
Avatar billede webstuff Nybegynder
07. januar 2006 - 21:47 #2
Men hvordan kan jeg banne en bruger hvis jeg ikke har hans ip noget sted?
Avatar billede webstuff Nybegynder
07. januar 2006 - 21:47 #3
og skifter man ikke ip forholdsvis tit?
Avatar billede udvikler Nybegynder
07. januar 2006 - 21:50 #4
ved hjælp af:

$_SERVER['REMOTE_ADDR'];
Avatar billede udvikler Nybegynder
07. januar 2006 - 21:50 #5
den finder brugerens ip
Avatar billede udvikler Nybegynder
07. januar 2006 - 21:51 #6
og det med at man skifter ip tit, det kan du jo på ingen måde forhindre. Det ville det også gøre med dit exempel.
Avatar billede webstuff Nybegynder
07. januar 2006 - 21:53 #7
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?
Avatar billede udvikler Nybegynder
07. januar 2006 - 21:57 #8
Jo det mener jeg, det er vidst kun de sidste 3 cifre eller lign. der ændres.

Så kan du bruge php funktionen substr som fjerner et bestemt antal cifre, du kan også vælge om det er i starten eller slutningen den skal fjerne.

fx:

$ip = $_SERVER['REMOTE_ADDR'];

echo substr($ip, 6, 3);

.. tjek her med en sql sætning om ipen findes eller om der findes en lign. ip
Avatar billede udvikler Nybegynder
07. januar 2006 - 21:58 #9
Med mit exempel vil den starte efter det 6. cifre og medtage de næste 3.
Det var bare et exempel.
Avatar billede webstuff Nybegynder
07. januar 2006 - 21:59 #10
substr($ip, 6, 3);
Den fjerner de sidste 3 tegn i ens ip?
Avatar billede udvikler Nybegynder
07. januar 2006 - 22:00 #11
Læs 21:58:16
Avatar billede udvikler Nybegynder
07. januar 2006 - 22:01 #12
Dvs den fjerner de først 6 og viser de næste 3.. alt der kommer efter de 3 vil den ikke medtage
Avatar billede webstuff Nybegynder
07. januar 2006 - 22:04 #13
okay.. men var det ikke lige præcis de 3 tal som det var der blev skiftet ud?
Avatar billede udvikler Nybegynder
07. januar 2006 - 22:05 #14
når jo, det må du da undskylde, er vidst lidt træt.. så skal det være lige omvendt.. så finder vi bare de første 6 tal og fjerner resten:

$ip = $_SERVER['REMOTE_ADDR'];

echo substr($ip, 0, 6);
Avatar billede webstuff Nybegynder
07. januar 2006 - 22:06 #15
okay.. men jeg siger mange tusinde gange  tak :)
Avatar billede udvikler Nybegynder
07. januar 2006 - 22:13 #16
Det var så lidt, og tak for point
Avatar billede cronaldo Nybegynder
07. januar 2006 - 22:17 #17
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? :)
Avatar billede udvikler Nybegynder
07. januar 2006 - 22:39 #18
for det første, det dummeste man overhovedet kan gøre er at banne en bruger.. man kan jo bare oprette en ny :-)

for det andet, det er jo heller ikke det vi har gjort.. vi har lavet tjek på det der kommer EFTER de 6 første cifre ;-)
Avatar billede cronaldo Nybegynder
07. januar 2006 - 22:54 #19
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 :)
Avatar billede rednex Nybegynder
07. januar 2006 - 23:33 #20
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...
Avatar billede rednex Nybegynder
07. januar 2006 - 23:40 #21
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() ."');
Avatar billede webstuff Nybegynder
08. januar 2006 - 12:57 #22
For det første, så vil jeg sige meget tak for alt den respons jeg har fået :)
Og jeg vil sætte mig ned og prøve de forslag af i er kommet med.

Men jeg ved ikke hvor nogen af jer får idéen med at jeg har et bruger system på min site. Det er såmænd bare en ganske almindelig gæstebog :-D

Men tak alligevel!
Avatar billede olebole Juniormester
09. januar 2006 - 05:12 #23
<ole>

- 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  =)

/mvh
</bole>
Avatar billede inctor Nybegynder
09. januar 2006 - 08:01 #24
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester