Avatar billede Slettet bruger
02. december 2003 - 23:48 Der er 11 kommentarer og
1 løsning

Spamkontrol til tagwall.

Hej eksperter.

Jeg forsøger at lave en relativ simpel "spamkontrol" til min tagwall, men tilsyneladende er jeg enormt dårlig til at få min pseudokode til at passe i praksis.

Jeg har en ifsætning, der tjekker om der bliver trykket på "Send" knappen, og efterfølgende poster noget data, såsom navn og besked, og også nogle hidden felter der f.eks. indeholder senderens ipadresse.

Jeg vil så gerne lave en "ipCounter", der bliver nulstillet og forhøjet med 1, hvergang en ny ip skriver et indlæg, indenfor en given tidsperiode.

Jeg kan godt lave den action, som ifsætningen skal gøre, hvis der bliver fanget en ipadresse, der poster mere end 5 beskeder indenfor x minutter, men jeg kan ikke helt få styr på måden, hvordan jeg skal tjekke det.

Jeg har kigget grundigt rundt på allerede oprettede eksperten.dk-indlæg, og fandt lidt om benyttelse af DISTINCT funktionen i mySQL, men dog uden held..
Men al data befinder sig i en mySQL tabel.

Pseudokode:
Hvis der bliver lavet et indlæg.
Nulstil ipCounter
Sæt ipCounter til 1.
Gem ipadressen.

Hvis ipCounter bliver højere end 5 indenfor 1 minut
Så:
/// udfør handlinger

Det virker utroligt simpelt, men jeg kan ikke finde hovede eller hale i det..
Avatar billede Slettet bruger
02. december 2003 - 23:49 #1
'ipCounter' skal så forestille at indeholde antallet af indlæg gjort, fra den samme ipadresse indenfor 1 minut.
Avatar billede detox Nybegynder
03. december 2003 - 00:06 #2
Jeg kunne forestille mig at du havde en tabel for sig til at tage sig af det. Indeholdende min. 4 felter: id, ip, tid, counter (og evt. banned).
Hvis ip findes tæller du counter en op og er tiden over 60 sek. nulstiller du tiden, ellers hvis count er 5 banner du.
Avatar billede Slettet bruger
03. december 2003 - 00:09 #3
Ja, det er det jeg vil, men hvordan skriver jeg det? ;)
Avatar billede detox Nybegynder
03. december 2003 - 00:20 #4
Jeg vil mene du laver et udtræk og først tjekker tiden, er den over et minut indsætter du ny tid og nulstiller counter. Er den under et minut tjekker du om counteren er 4, så banner du. Ellers tæller du blot counter en op.
Avatar billede detox Nybegynder
03. december 2003 - 00:33 #5
Altså i den her stil:
$res = mysql_query("select *, unix_timestamp() as nu from counter where ip=$ip");
if (mysql_num_rows($res)>0) { // Ip findes
  $row = $mysql_fetch_assoc($res);
  if (($row['nu']-row['tid'])>60) { // Ældre end et minut
    mysql_query("update counter set tid=unix_timestamp(), counter=1 where ip=$ip");
  }
  elseif ($row['counter'] == 4) {
    mysql_query("update counter set banned=1 where ip=$ip");
  } else {
    mysql_query("update counter set counter=counter+1 where ip=$ip");
  }
}
Avatar billede detox Nybegynder
03. december 2003 - 00:34 #6
Så er det allerførste du skal tjekke selvfølgelig om ip'en er banned.
Avatar billede Slettet bruger
03. december 2003 - 20:01 #7
Yeah, jeg kan godt følge dig.. men jeg finder det stadig lidt besværligt.. men jeg prøver.. ;)
Avatar billede Slettet bruger
04. december 2003 - 14:28 #8
Jeg fik det delvist løst, og delvist med din hjælp, så hvis du skal have points, then throw in an answer mate. ;)
Avatar billede detox Nybegynder
06. december 2003 - 01:33 #9
Ok, kunne man høre lidt om hvordan du løste det?
Avatar billede Slettet bruger
06. december 2003 - 14:57 #10
Det blev måske lidt snørklet, men jeg lavede en ny tabel som en "banned database", listede de sidste fire indlægs ipadresser ind i et array, og så en ifsætning der chekkede, om den første af de fire ipadresser passede til de tre andre..

Hvis den gjorde det, blev alle indlæg fra denne ipadresse sletet, han selv blev banned (dvs et script der tjekkede hans ipadresse, og hvis den passede til en i ban-databasen, blev hans header forced til en 'banned' side...), og til sidst blev jeg sendt en email om det.. ;P
Avatar billede dknsj Nybegynder
14. oktober 2004 - 21:47 #11
Du kunne evt. gemme "time()" og på den samme side der bliver postet tjekke om hvor langt der er fra den gang time blev postet dvs. $tm = $row['time'] - time();

Og så lave en if streng .. ? if($tm > "15"){ //tilføjer } else{ echo "Du kan kun poste 1 indlæg pr. 15 sekunder"; }
Avatar billede Slettet bruger
16. oktober 2004 - 12:32 #12
Det her indlæg er næsten et år gammelt.. hvordan kan det være du poster her, nu? :)
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