04. marts 2008 - 17:29Der er
34 kommentarer og 2 løsninger
Check IP pr sekund.
Hej derude.
Jeg mangler en funktion til at checke om besøgende har mere end f.eks 5 sidevisninger pr. sekund. I så fald bannes IP adressen og tilføjes en liste. Besøgende fra denne liste smides på en eller anden måde af, eller redirigeres.
showsource: Kan du uddybe? Hvad siger I til denne: Redelegere vedkommende til en side hos mig selv der indeholder 1000 includes eller lignende med vedkommendes egen IP? Vil det genere ham?
Uddybe -> I stedet for at bruge sessions, ville jeg gemme i DB.
Og ellers, hvis der èn bestemt ip som fucker, så er det jo ikke noget problem. Men at "lukke ude" er ret svært, hvis det ikke skal gå ud over uskyldige. Og om det er en søgerobot, der kan man jo "gå videre" i scriptet, hvis man ellers kan identificere en søgerobot.
O.b.t.w. hvis din side ligger på en Apache og du kan bruge .htaccess, kan du lave en fil hvor "bad" ip'er er defineret, og på den måde lukke af for bestemte ip-adresser.
Well, nu kan jeg selvf. ikke finde ex. med ip'er i en fil, som apache vil kikke efter ved request. Og man kan jo også spørge sig selv om det er en løsning, at gemme ip'er i en fil. Anyway, i en .htaccess kan du putte flg.
ErrorDocument 403 /403.php Deny from 127.0.0.1 83.221.136.33 192.0
ErrorDocument fortæller hvilken fil som vises ved Forbidden ( 403 ) Sørg blot for at den har en vis størrelse i bytes, for at IE vil vise den.
Deny from ...... er forskellige ip'er, adskilt af et mellemrum, som IKKE må se indhold. Det er ikke nødvendigt at skriveden fulde ip adresse, dele aF den er nok. ( 192.0 alle med en ip der starter med 192.0 nægtes adgang )
Se, det der er mit problem er følgende: Jeg lavede i sin tid en tæller på siden. Jeg ønskede ikke at min egen IP, samt søgerobotters besøg blev talt med. Det lavede jeg en funktion til hvor jeg efterhånden har en del
AND substr($_SERVER["REMOTE_ADDR"],0,7) <> "66.249." og.. AND $_SERVER["REMOTE_ADDR"] <> "xxx.xxx.xxx.xxx"
Det er ved at være lidt uhensigtsmæssigt med alle de AND led. Hvis jeg får falsk returneret, tælles siderne ikke med.
Samtidig lavede jeg en funktion hvor jeg redelegerer folk til min egen 404 side, hvis variablerne efter ? ikke henviser til en eksisterende side (findes efter databaseværdier). I den sender jeg samtidig en mail til en af mine mailadresser med værdierne for de forskellige variabler. Det har jeg lavet for at kunne se hvad der går galt. Det viser sig så at ID=http.//enellerandenadresse.com/nogleværdier, som så siger mig at han prøver at lave noget fusk. Derfor får jeg 5-20 gange om ugen 10-50 mails inden for få sekunder fra 1-3 af ip adresserne i mit link 04/03-2008 17:33:42
Du kunne lave en tabel til at håndtere disse ip'er! En ip som f.eks. 127.0.0.1 ville så være:
ip_start 127.0.0.1 og ip_slut 127.0.0.1
Og for ikke at gemme 127.0.0.1, kan du bruge inet_aton('127.0.0.1') som giver en INT værdi tilbage. Den fylder mindre når den gemmes i databasen og er nemmere at lave beregninger på.
nielle >> Nuvel, det kan være et tal, true, en streng, et array, et object, eller hvad somhelst andet end null, false eller 0 - men jeg forstår godt, hvad du mener ;o)
smitten1 >> Jamen, jeg æææææælsger da isset! Jeg kan bare ikke se, hvad jeg skulle bruge den til lige her. Er $_SERVER["REMOTE_ADDR"] ikke sat, opfyldes betingelsen ikke - og hvad skulle jeg ellers bruge isset til? :)
smitten1: Hvad er der galt med olebole's kode: if (isset($_SERVER["REMOTE_ADDR"]) && $banned[$_SERVER["REMOTE_ADDR"]]) {
Den tester fra venstre mod højre, så hvis isset fejler, så går den ikke videre, så det er da helt korrekt. Din kode derimod: if (isset($banned[$_SERVER["REMOTE_ADDR"]])) { vil da ikke virke.
Jeg forstår ikke lige hvordan $banned[$_SERVER["REMOTE_ADDR"]] kan virke. Det er jo et array! Skal man ikke løbe det igennem med en løkke for at checke for alle værdier i det?
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.