Beste captcha
Ik heb een aantal captcha beken, de meeste met code's vind ik niet gebruikersvriendelijk. En de vraag die in Arjan's Nieuwssysteem wordt gesteld is gebruikersvriendelijk maar veranderd nooit.
Mijn vraag aan jullie: Welke optie kan ik het beste gebruiken?
1. De huidige, vb: Wat is het huidige jaar?
2. Een met een code
3. Een met een vraag, vb: Wat is de hoofdstad van Nederland?
4. Iets heel anders, zoals... (hier graag onderbouwing, waarom die?)
Alvast bedankt, Raymond.
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
Lijkt mij moeilijk voor spambots...
hmmm, is een mogelijkheid, ik denke er over na. Ik ben bang dat het dan wel erg gebruiksonvriendelijk wordt, maar ik onthoud het.
De gebruiker is onderhand wel zo'n beetje gewend aan CAPTCHAs...
Of pak 2x random een cijfer van 1 t/m 9 en laat deze optellen door de gebruiker.
Dat vind ik wel een goede Arjan, die met die optelsom, ik denk dat ik die eens ga uitproberen. Het volk dat zich zal gaan registreren kan wel rekenen :P
Er is een array met geschreven nummers van 0 t/m 9. Er wordt 2 keer een getal van 0 t/m 9 gegenereerd. Dan wordt er bepaald of het optellen, aftrekken, vermenigvuldigen of delen wordt. er wordt nog even gekeken of de uitkomst negatief is, zo ja dan wordt het bovenstaande helemaal opnieuw uitgevoerd. (dit om verwarring met negatieve getallen en minnen te voorkomen). De bezoeker moet de som uitrekenen.
Is dit een goed idee ja/nee? Wat zijn jullie kritiek punten?
Ps. Is het voldoende om de 2 getallen en het teken (+, -, * of /) met een hidden veld meet te posten? Het verwerkingsscript rkent de som dan nog een keer uit, zodat de uitkomst niet in de bron gewijzigd kan worden.
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
Ik ben alvast beginne, ik loop tegen het volgende probleem aan:
Ik heb 3 variabelen gedefineerd, deze worden gegenereerd met rand():
$nummer1
$nummer2
$teken
Die som wordt uitgerekend. Dan wil ik met een loop, eerst kijken of de uitkomst < 0, zoja dan moeten die 3 rand()s opnieuw worden uitgevoerd, net zolang totdat de uitkomst niet negatief is. Ik ben niet zo ervaren in loops (ik denk dat het in dit geval om een for gaat), weet eiamdn hoe ik een loop kan maken die het bovenstaande uitvoert?
Gewijzigd op 01/01/1970 01:00:00 door Raymond ---
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
function genCaptcha() {
// Array met nummers genereren, en door elkaar schudden
$l_aNumbers = shuffle(range('0', '9'));
// Eerste twee nummers met elkaar optellen, antwoord in sessie zetten
$_SESSION['answer'] = $l_aNumbers[0] + $l_aNumbers[1];
// Vraag maken en returnen
return $l_sQuestion = 'Tel '.$l_aNumbers[0].' en '. $l_aNumbers[1].' bij elkaar op.';
}
function checkCaptcha($p_iInput = $_POST['answer']) {
if($p_iInput === $_SESSION['answer']) {
return true;
}
else
{
return false;
}
}
?>
function genCaptcha() {
// Array met nummers genereren, en door elkaar schudden
$l_aNumbers = shuffle(range('0', '9'));
// Eerste twee nummers met elkaar optellen, antwoord in sessie zetten
$_SESSION['answer'] = $l_aNumbers[0] + $l_aNumbers[1];
// Vraag maken en returnen
return $l_sQuestion = 'Tel '.$l_aNumbers[0].' en '. $l_aNumbers[1].' bij elkaar op.';
}
function checkCaptcha($p_iInput = $_POST['answer']) {
if($p_iInput === $_SESSION['answer']) {
return true;
}
else
{
return false;
}
}
?>
EDIT: foutje verbeterd
Gewijzigd op 01/01/1970 01:00:00 door Mark Pieper
Raymond schreef op 28.06.2007 14:37:
Ps. Is het voldoende om de 2 getallen en het teken (+, -, * of /) met een hidden veld meet te posten? Het verwerkingsscript rkent de som dan nog een keer uit, zodat de uitkomst niet in de bron gewijzigd kan worden.
In een hidden field meesturen is nogal fout. Dit maakt het heel makkelijk voor bots want die lezen dan gewoon je html en berekenen het.
@TJVB, dat dacht ik al. Maar aan de hand van de code van Mark snap ik nu hoe het wel moet.
Als je gewoon "6 + 9" in een afbeelding zet kan een bot gewoon OCR-en en een eval-etje uitvoeren. Aangezien deze methode wel meer gebruikt wordt ga ik ervan uit dat bots hieraan zijn aangepast.
Gebruik miss een achtergrond in je captcha die dit vermijdt?
Het hangt er maar vanaf hoe ver je wil gaan natuurlijk :).
Naast een sessie kan je het antwoord / rekensom natuurlijk ook geëncrypt meesturen.
bluecherry schreef op 01.07.2007 01:32:
De reden waarom de meeste captcha's zo'n afleidingsstreepjes en -puntjes hebben is om te vermijden dat bots gewoon de afbeelding lezen...
Als je gewoon "6 + 9" in een afbeelding zet kan een bot gewoon OCR-en en een eval-etje uitvoeren. Aangezien deze methode wel meer gebruikt wordt ga ik ervan uit dat bots hieraan zijn aangepast.
Gebruik miss een achtergrond in je captcha die dit vermijdt?
Het hangt er maar vanaf hoe ver je wil gaan natuurlijk :).
Als je gewoon "6 + 9" in een afbeelding zet kan een bot gewoon OCR-en en een eval-etje uitvoeren. Aangezien deze methode wel meer gebruikt wordt ga ik ervan uit dat bots hieraan zijn aangepast.
Gebruik miss een achtergrond in je captcha die dit vermijdt?
Het hangt er maar vanaf hoe ver je wil gaan natuurlijk :).
Je kunt ook 'at random' afwisselend letters en cijfers doen, dus de ene keer:
een plus drie en de andere keer 5 + 3.
EDIT: Of je doet dit: drie + zeven en een andere is: 3 plus vijf en een andere is: 3 plus 6.
Dus mogelijke combi's zijn:
cijfer - teken(non-letters) - cijfer
letters - teken(non-letters) - cijfer
letters - teken(non-letters) - letters
cijfer - teken(non-letters) - letters
cijfer - letters - cijfer
cijfer - letters - letters
letters - letters - letters
letters - letters - cijfer
Dit geeft 'at random' 8 mogelijkheden...
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
Spambots vullen toch alles in? Ik heb een hidden field met de naam "name" gegeven. en een html comment erbij dat ze die leeg moeten laten in het Nederlands. Niet met simpele woorden als niet en leeg maar even mooi verwoord.
Jurgen schreef op 01.07.2007 10:51:
Spambots vullen toch alles in? Ik heb een hidden field met de naam "name" gegeven. en een html comment erbij dat ze die leeg moeten laten in het Nederlands. Niet met simpele woorden als niet en leeg maar even mooi verwoord.
Ligt volgens mij ook aan de spambot hoor...
Een gebruiker/spambot krijgt 1 van de volgende sommen voor zich:
cijfer + cijfer, de cijfers en tekens worden op zo veel mogelijk verschillende manieren weergegeven. Zelf zat ik te denken om er ook nog de volgende zin van te maken: Wat is de som van ... en ...? Want dan staat er geen plus en ook geen + tussen de cijfers.
Dat zou ook nog kunnen. Zolang er maar veel variatie in zit...
2 na beste oplossing. een spambot probeert alle velden in te vullen. Wat ik gedaan voor mijn site (we wachten de resultaten af) is een hidden/margin-100em ed text field maken in mijn formulier. de gebruiker ziet dit niet de spambot wel. de spambot vult het dus is, de gebruiker niet. als het veld is ingevult het formulier niet laten versturen anders wel.
wel "captha" geen gebruikers irrataties.
ps niet mijn idee ik heb dit ergens op het wereldwijdeweb gelezen en ik weet niet meer waar.