02. december 2003 - 23:48Der 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..
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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.
Synes godt om
Slettet bruger
03. december 2003 - 00:09#3
Ja, det er det jeg vil, men hvordan skriver jeg det? ;)
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.
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"); } }
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
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"; }
Synes godt om
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? :)
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.