ilpostino Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 (endret) På hjemmesiden min har jeg både gjestebok og mulighet for å sende meg webbasert mail. Da jeg har blitt litt plaget med dumping av reklame i gjesteboken min og spam sendt fra gjesteboken min har jeg tatt ibruk diverse sikkerhetstiltak for å begrense dette. Jeg har derfor begynt å logge ip-adressen til de som sender meg mail fra hjemmesiden min og legger igjen melding i gjesteboken min. Det er de smame ip-adressene/subnettene som går igjen begge steder. dette innebærer blandt annet at jeg har laget et script som sjekker ip-adressen til de som besøker hjemmesiden min opp mot den listen jeg har laget med ip-adresser (det er snakk om cirka 5 adresser så langt). De som har en ip-adresse som ligger i listen får en feilmelding og avvist. de bannlyste ip-adressene ligger i en array og det jeg er interisert i nå er å prøve å få gjort slik at hele ip-ranges kan legges inn i arrayen (eller koden på andre måter. Noen som vet om det går ann? her er koden (jeg har her anonymisert ip-adressene, men bytt gjerne ut med reelle ip-adresser for testing): <?php //Dette stopper adresser som har sendt spam $ip_adresse = getIP(); $banned_ip = array('en.ip','en.ip.til','tredje.ip'); foreach ($banned_ip as $ip) { if($ip == $ip_adresse) die("Her er feilmelding til de som sperres"); } //Denne funksjonen sjekker ip-adressen til de som besøker siden function getIP() { $ip; if (getenv("$HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "UNKNOWN"; return $ip; } ?> Endret 4. mai 2006 av ilpostino Lenke til kommentar
trondes Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 (endret) Hvorfor legge hele "ip-rangen" i en array ? $ip_adresse = getIP(); $block = array ( "192.168.2.1", "192.168.2.77", "127."); foreach( $block as $ip_block){ if( $ip_block == $ip_adresse OR (substr($ip_block, -1) == "." AND substr($ip_adresse,0, strlen($ip_block)) == $ip_block)) echo "Du kan ikke sende, blæ blæ blæ"; else echo "melding sendt"; } Bare en tanke.. ikke ut testet EDIT: fikset en feil i koden Endret 4. mai 2006 av trondes Lenke til kommentar
ilpostino Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 Hvorfor legge hele "ip-rangen" i en array ? noen av de som dumper ting til gjesteboken min sitter på samme ip-range (feks 192.168.0.1 og 192.168.0.3). Hvis jeg sperrer for 192.168.0 (i dette tilfelle) så vil jeg lettere kunne sperre flere av ip-adressene ute... Lenke til kommentar
trondes Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 noen av de som dumper ting til gjesteboken min sitter på samme ip-range (feks 192.168.0.1 og 192.168.0.3). Hvis jeg sperrer for 192.168.0 (i dette tilfelle) så vil jeg lettere kunne sperre flere av ip-adressene ute... 6042857[/snapback] Det er greit, men dette hadde vært kjeddlig å legge inn $block = array( "192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.4","192.168.0.5","192.168.0.6" osv.); derfor foreslår jeg min måte i stede Lenke til kommentar
ilpostino Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 Det er greit, men dette hadde vært kjeddlig å legge inn $block = array( "192.168.0.1","192.168.0.2","192.168.0.3","192.168.0.4","192.168.0.5","192.168.0.6" osv.); derfor foreslår jeg min måte i stede 6042879[/snapback] det hadde vært veldig kjedelig å legge inn og det er derfor jeg er på utkikk etter en lettere måte å legge in ip-range på... Lenke til kommentar
ilpostino Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 tror jeg har funnet ut en løsning. Ved å bruke eregi kan jeg bruke deler av en ip-adresse i søket etter bannede adresser. ny og bedre kode blir da slik: <?php //Dette stopper adresser som har sendt spam $ip_adresse = getIP(); $banned_ip = array('127.0.0.'); foreach ($banned_ip as $ip) { if (eregi($ip, $ip_adresse)) die ("dette er en test"); } //Denne funksjonen sjekker ip-adressen til de som besøker siden function getIP() { $ip; if (getenv("$HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "UNKNOWN"; return $ip; } ?> dette gjør det hele bedre synes jeg, men er det noen andre (og bedre) alternativer? Lenke til kommentar
Peter Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 (endret) kan man ikke bare bruke strpos a? if(strpos($remote_addr, '197.138.123') === 0) BAN! (dette vil banne alle med 197.138.123.*) (merk tre likhetstegn for å sjekke at posisjonen er int(0) og ikke bool(0)) Det denne koden gjør er å sjekke om $remote_addr starter med 197.138.123, kort og greit. Endret 4. mai 2006 av Nazgul Lenke til kommentar
Magnus Holm Skrevet 4. mai 2006 Del Skrevet 4. mai 2006 Og ikke bruk foreach, men heller in_array Lenke til kommentar
ilpostino Skrevet 4. mai 2006 Forfatter Del Skrevet 4. mai 2006 (endret) Og ikke bruk foreach, men heller in_array 6043061[/snapback] den går bare på hele ip-adresser og fungerer ikke like bra som eregi på hele range av ip... jeg fikk den iallefall ikke til å fungere slik den ble beskrevet i php.net... Endret 4. mai 2006 av ilpostino Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå