Hoe veilig is deze manier van human vertification(captcha)

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper Schellekens

Jasper Schellekens

28/09/2018 13:59:45
Quote Anchor link
Goeiedag,

Ik heb dit wel eens ergens gezien en bedacht me dat dat wel redelijk simpel te maken is.
Nu heb ik dit gemaakt op de volgende manier:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$humanctrl1 = rand(1, 9);
$humanctrl2 = rand(1, 9);
$humanctrlanswer = 0;
$humanctrlanswer += $humanctrl2;
$humanctrlanswer += $humanctrl1;
$_SESSION['humancheckansw'] = $humanctrlanswer;


Nu krijg je dus zeg maar de volgende line tekst dan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<input class='input100' type='text' name='CAPTCHA' placeholder='Howmuch is ".$humanctrl1." + ".$humanctrl2."? ' required>


En op deze manier controleer ik dan of het ingevulde antwoord klopt doormiddel van het antwoord hierboven in een sessie op te slaan.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$postcaptcha = $_POST["CAPTCHA"];
$humancheckfinalans = $_SESSION['humancheckansw'];
if($postcaptcha!=$humancheckfinalans)
{                                          
    $wronganswermsg = "<strong>-</strong> There answer was not correct.<br>";
    $error = 1;
}


Nu vraag ik mij enkele dingen af.

1: Tot in hoeverre is dit veilig?
2: Kunnen bots toch nog door deze login heen wurmen?
3. Hoe kan ik dit beter doen dan hierboven.
Gewijzigd op 28/09/2018 14:01:05 door Jasper Schellekens
 
PHP hulp

PHP hulp

21/11/2024 22:40:08
 
- SanThe -

- SanThe -

28/09/2018 14:37:07
Quote Anchor link
Waarom al die overbodige variabelen aanmaken?
Kost alleen extra tijd en extra geheugen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$humanctrl1 = rand(1, 9);
$humanctrl2 = rand(1, 9);
$humanctrlanswer = 0;
$humanctrlanswer += $humanctrl2;
$humanctrlanswer += $humanctrl1;
$_SESSION['humancheckansw'] = $humanctrlanswer;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$humanctrl1 = rand(1, 9);
$humanctrl2 = rand(1, 9);
$_SESSION['humancheckansw'] = $humanctrl1 + $humanctrl2;

En
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$postcaptcha = $_POST["CAPTCHA"];
$humancheckfinalans = $_SESSION['humancheckansw'];
if($postcaptcha!=$humancheckfinalans)
{                                          
    $wronganswermsg = "<strong>-</strong> There answer was not correct.<br>";
    $error = 1;
}

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
if($_POST["CAPTCHA"] != $_SESSION['humancheckansw'])
{                                          
    $wronganswermsg = "<strong>-</strong> There answer was not correct.<br>";
    $error = 1;
}
 
Thomas van den Heuvel

Thomas van den Heuvel

28/09/2018 15:00:20
Quote Anchor link
Jasper Schellekens op 28/09/2018 13:59:45:
1: Tot in hoeverre is dit veilig?

Ik weet het niet hoor, maar je doet geen typecheck, en je controleert ook niet of het antwoord niet leeg is. Heb je al eens geprobeerd de sessie leeg te houden (door het uitschakelen van cookies ofzo) en het POST veld leeg te houden? Zo werken de meeste bots? Geeft de check dan niet juist het verkeerde resultaat? Oftewel: dit werkt niet in precies de gevallen waar dit wel zou moeten werken?

Jasper Schellekens op 28/09/2018 13:59:45:
2: Kunnen bots toch nog door deze login heen wurmen?

Euh? Login? Hoe ziet de rest van de login er uit? Waarschijnlijk zou je een CRSF-token moeten gebruiken (werkt ook met check via sessie)? Daarnaast zou je een limiet op (foute) logins kunnen aanbrengen, om het spammen van je loginformulier tegen te gaan?

Ook moet je beveiliging meer zien als het werken in lagen. En niet in één onoverkomelijke muur die alles tegenhoudt (of zou moeten tegenhouden, want wat als dat niet gebeurt?). Je kunt er altijd langs / over of doorheen...

Dit is slechts één laag. Ik verwacht dat dit niet de enige is?

En als een mogelijke query voor inloggen / authenticatie lek zou zijn (vatbaar voor SQL-injectie of andere fratsen) dan ga je natuurlijk al/sowieso nat. Je "login" is zo sterk als de zwakste schakel.

Jasper Schellekens op 28/09/2018 13:59:45:
3. Hoe kan ik dit beter doen dan hierboven.

Dat weet ik niet, wat hoop je te bereiken?
Gewijzigd op 28/09/2018 15:07:18 door Thomas van den Heuvel
 
Ward van der Put
Moderator

Ward van der Put

28/09/2018 15:07:54
Quote Anchor link
Zelfs banken gebruiken inmiddels Google reCAPTCHA dus misschien moet jij dat ook doen?
 
Thomas van den Heuvel

Thomas van den Heuvel

28/09/2018 15:09:16
Quote Anchor link
Of dat inderdaad, niet proberen je eigen wiel uit te vinden, maar gewoon standaard oplossingen gebruiken.
 
- SanThe -

- SanThe -

28/09/2018 15:31:53
Quote Anchor link
Ward van der Put op 28/09/2018 15:07:54:
Zelfs banken gebruiken inmiddels Google reCAPTCHA dus misschien moet jij dat ook doen?


Dus we zijn compleet afhankelijk van Google...... Dat noem ik pas dom.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.