Jump to content
Pugna

Captcha imun

Recommended Posts

Posted (edited)

LE: REVIZUIT

De un captcha poti trece folosindu-te de API-uri: prin API trimiti imaginea, iar tu primesti codul in plain; codul se obtine fie prin OCR, fie tastat manual de un indian.

M-am gandit la o implementare captcha prin care esti absolvit de solvere.

create.php:


$cookie_name = "captcha";
$cookie_value= rand(1,100); //88
$encoded_cookie = encoding_function($cookie_value); //MzKj0
$captcha_image = create_image($cookie_value); //88.JPG
$javascript_source = <<<DATA
<script>
document.cookie=$cookie_name + "=" + $encoded_cookie; // setez cookie-ul captcha=MzKj0
</script>
DATA;
$html_source = <<<DATA
<form action="verify.php" method="post">
<input type="text" name="captcha">
<input type="submit" value="submit"> // captcha-ul din imagine: 88
</form>
DATA;
echo javascript_source; //setez cookie
echo html_source; //afisez form-ul

verify.php


$submited_captcha = $_POST["captcha"]; //88
$cookie = $_COOKIE["captcha"]; // MzKj0
if($submited_captcha == decoding_function($cookie))
echo "OK";
}

Conceptul e simplu:

1. Definesc o valoare random pentru cookie-ul "captcha" // 88

2. Encodez printr-un algoritm propriu valoarea cookie-ului de la punctul 1 si setez prin javascript cookie-ul // in urma encodingului 88 devine MzKj0

3. Creez imaginea avand drept captcha valoarea definita initial ( nu cea encodata ) // 88

3. Utilizatorul introduce captcha-ul din imagine; captcha-ul fiind chiar valoarea definita initial // 88

4. Verific daca captcha-ul introdus coincide cu valoarea decodata ( prin acelasi algoritm propriu ) a cookie-ului. //if(88 == decoding_function(MzKj0)) adica 88 == 88.

Faptul ca m-am folosit de javascript sa setez cookie si de php sa verific ma scuteste de api-uri, solvere, aplicatii, etc; js-ul nu e interpretat si e doar client side.

Bineinteles, codul de mai sus e doar demonstrativ ca sa imi fac ideea inteleasa, e departe de a fi complet.

E o abordare practica ?

Edited by Pugna
Posted (edited)

nu prea merge... mai toate programele cu care am lucrat (wget,curl,etc...) iti ofera posibilitatea sa setezi cookie-uri :)

poti sa faci sa fie foarte greu de exemplu sa encodezi javascriptul unde setezi cookie-ul dar tot nu este imposibil sa completezi automat :(

P.S: daca vrei sa faci ceva frumos faci captcha char by char sa ii usuci pe fraieri la bani :)

revin putin mai tarziu cu un exemplu

P.P.S:

exemplu: http://ls0.us/captcha/create.php

surse:

http://ls0.us/captcha/create.phps

http://ls0.us/captcha/lib.phps

Edited by Xander
Posted (edited)

Da, stiu ca poti seta cookie, dar curl nu interpreteaza js, deci COOKIEJAR e useless; poti insa sa parsezi js-ul si sa extragi cookie+value ca sa le setezi in curl, dar la fiecare request ai alt cookie datorita functiei rand() si ai nevoie de doua requesturi ca sa te folosesti de cookie-ul setat de js-ul meu:

1. parsezi pagina, extragi cookie, setezi cookie

2. trimiti post-ul ( deja aici ai alt cookie setat ).

PS: Frumos codul, idee faina.

Edited by Pugna
Posted
Nu ai uitat sa pui si un alt fisier?

Fatal error: Call to undefined function store_key() in [][]/captcha/create.php on line 4

store_key() = ??

Toate functiile din cod sunt demonstrative si le-am dat un nume explicit ca sa poti urma logica. Codul nu l-am implementat.

Posted

Hmm nu am avut timp sa ma uit cu atentie, dar daca tu ai stocat captcha in cookie atunci se pate accesa de pe partea client. Corecteaza-ma daca gresesc si am interpretat gresit conceptul tau :)

Posted

Recititi primul post ca am simplificat foarte mult lucrurile. Nu mai folosesc niciun store_cookie().

Hmm nu am avut timp sa ma uit cu atentie, dar daca tu ai stocat captcha in cookie atunci se pate accesa de pe partea client. Corecteaza-ma daca gresesc si am interpretat gresit conceptul tau :)

Am stocat in cookie valoarea encodata a captcha-ului; encoding-ul ti-l faci tu printr-un algoritm propriu. Poti sa te folosesti de o cheie random pentru fiecare captcha in parte pe care o stochezi in baza de date si nu o sa-ti faca nimeni reverse.

Posted

Interesant,nu vad de ce nu ar merge,totul tine de encriptia cookie-ului dar cred ca sha256 cu salt e destul de ok,pentru ca ma gandesc ca un hashing altgoritm ar fi mai safe decat un altgoritm scris de tine.

Posted
Interesant,nu vad de ce nu ar merge,totul tine de encriptia cookie-ului dar cred ca sha256 cu salt e destul de ok,pentru ca ma gandesc ca un hashing altgoritm ar fi mai safe decat un altgoritm scris de tine.

Da, prin encoding_function() poti sa implementezi orice, si sha256, important e sa ascunzi raspunsul captcha-ului.

Posted

Eu am gasit o modalitate mai "out of the box" in timp ce uploadam o imagine pe tinypic. Se creeaza un dictionar cu imagini, icoane, clip-art, unde fiecarei poze ii apartine unul sau mai multe cuvinte cheie (server side), iar clientului ii este solicitat sa descrie prin niste cuvinte (maxim N) acea imagine cat mai exact si daca se sare de un anumit procentaj de acuratete atunci e valid :).

Deci daca pui o poza cu copaci sau icoana unei aplicatii arhicunoscute clar un OCR nu ar mai face fata, de fapt e in afara scopului. Ar mai ramane un atac bazat pe dictionare, dar aici se intra in alte discutii si daca serverul are destule imagini "complexe" atunci crapa si ideea de mai sus.

Repet: Ideea nu este a mea, mi se cerea pe tinypic la un captcha sa descriu icoana lui Internet Explorer :).

Posted
Eu am gasit o modalitate mai "out of the box" in timp ce uploadam o imagine pe tinypic. Se creeaza un dictionar cu imagini, icoane, clip-art, unde fiecarei poze ii apartine unul sau mai multe cuvinte cheie (server side), iar clientului ii este solicitat sa descrie prin niste cuvinte (maxim N) acea imagine cat mai exact si daca se sare de un anumit procentaj de acuratete atunci e valid :).

Deci daca pui o poza cu copaci sau icoana unei aplicatii arhicunoscute clar un OCR nu ar mai face fata, de fapt e in afara scopului. Ar mai ramane un atac bazat pe dictionare, dar aici se intra in alte discutii si daca serverul are destule imagini "complexe" atunci crapa si ideea de mai sus.

Repet: Ideea nu este a mea, mi se cerea pe tinypic la un captcha sa descriu icoana lui Internet Explorer :).

V?zusem ?i eu ceva asem?n?tor. Se d?dea o poz? mic? de plecare, ?i una mare c?reia îi lipseau buc??i (ceva gen puzzle). ?i trebuia s? tragi cu mouse-ul de buc??i ?i s? le pui pe poza respectiv?.

Posted
Eu am gasit o modalitate mai "out of the box" in timp ce uploadam o imagine pe tinypic. Se creeaza un dictionar cu imagini, icoane, clip-art, unde fiecarei poze ii apartine unul sau mai multe cuvinte cheie (server side), iar clientului ii este solicitat sa descrie prin niste cuvinte (maxim N) acea imagine cat mai exact si daca se sare de un anumit procentaj de acuratete atunci e valid :).

Deci daca pui o poza cu copaci sau icoana unei aplicatii arhicunoscute clar un OCR nu ar mai face fata, de fapt e in afara scopului. Ar mai ramane un atac bazat pe dictionare, dar aici se intra in alte discutii si daca serverul are destule imagini "complexe" atunci crapa si ideea de mai sus.

Repet: Ideea nu este a mea, mi se cerea pe tinypic la un captcha sa descriu icoana lui Internet Explorer :).

Paremise ca acum cativa ani,daca nu ma insel, amazon platea useri pentru atribuirea de cuvinte cheie unor imagini.Interesanta metoda oricum.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...