Avatar billede tingholm Mester
21. juli 2009 - 18:10 Der er 4 kommentarer og
1 løsning

sikre forum mod spam

Hej Eksperter

Jeg har www.menuen.dk hvor man til hvert menukort kan skrive kommentarer til stedet (prøv evt. at åbne et tilfældigt kort fra forsiden). I et forsøg på at forhindre spamrobotter i at overfylde mine fora har jeg lagt et kontrolfelt ind hvor brugeren skal skrive tallene i feltet. Men jeg har dog flere og flere der slipper igennem alligevel.

Er det feltet der er for let at køre OCR på, eller muligvis fejl i min kode, så den kan opsnappe svaret?

Jeg laver kotrolfeltet med denne kode:

session_start();

$str = rand(1000,9999);
$_SESSION['verify'] = $str;

$im = ImageCreateFromPNG("verify.png");
$sort = ImageColorAllocate($im,0,0,0);
ImageTTFText ($im,52,0,15,50,$sort,"Janglywalk.ttf",$str);
header("Content-type: image/png");
ImagePNG($im);
ImageDestroy($im);
Avatar billede Slettet bruger
21. juli 2009 - 18:41 #1
Jeg vil mene at det ikke burde være særligt svært at lave OCR på dit CAPTCHA, men har dog ikke den store erfaringer med den slags.
Du kunne prøve reCAPTCHA, som er et rigtigt godt og anerkendt system. Det bruger indscanninger fra gamle bøger, der er for svære at læse med OCR, og brugerne hjælper dermed med at få "læst" noget vigtigt litteratur. Desuden har jeg endnu ikke set det brudt.
Det kan findes her:
http://recaptcha.net/
Avatar billede erikjacobsen Ekspert
21. juli 2009 - 19:01 #2
Det "plejer" at være fordi man i kontrollen af feltet antager at klienten accepterer cookies og dermed sessions. Skitse:

    if ($_SESSION['verify'] == $_POST['verify']) { ....ok... }

Hvis spam-robotten ikke accepterer cookies, og ikke udfylder feltet i formen, så er ovenstående if sand. Simpel løsning: kontroller yderligere at sessions variablen ikke er tom.

(Men i dit tilfælde kan det være noget andet)
Avatar billede tingholm Mester
21. juli 2009 - 20:55 #3
Tak for idéerne begge to. Jeg testede lige Erik's forslag igennem først. Det viser sig helt som påstået at hvis jeg slår cookies fra og lader feltet stå tomt, så kommer den igennem... Et eller andet sted ganske logisk når man lige er obs på at sessions er cookies!!

koden skal vel bare rettes til:
if ($_SESSION['verify'] == $_POST['verify'] && $_SESSION['verify'] != "") { ....ok... }

Eller husker jeg nu syntaxen helt forkert??

Erik smider du svar så jeg kan lukke opgaven (uanset om du samler points eller ej ;)
Avatar billede erikjacobsen Ekspert
21. juli 2009 - 21:08 #4
Jeg samler slet ikke på point, tak. Du kan læse på http://jeg-samler-slet-ikke-paa-point-tak.erikjacobsen.com/ hvilke muligheder, der er for at lukke spørgsmålet.
Avatar billede tingholm Mester
21. juli 2009 - 21:14 #5
ok, men tak for hjælpen alligevel :)
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