Pugna Posted January 13, 2012 Report Posted January 13, 2012 (edited) LE: REVIZUITDe 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 cookieecho html_source; //afisez form-ulverify.php$submited_captcha = $_POST["captcha"]; //88$cookie = $_COOKIE["captcha"]; // MzKj0if($submited_captcha == decoding_function($cookie)) echo "OK";}Conceptul e simplu:1. Definesc o valoare random pentru cookie-ul "captcha" // 882. Encodez printr-un algoritm propriu valoarea cookie-ului de la punctul 1 si setez prin javascript cookie-ul // in urma encodingului 88 devine MzKj03. Creez imaginea avand drept captcha valoarea definita initial ( nu cea encodata ) // 883. Utilizatorul introduce captcha-ul din imagine; captcha-ul fiind chiar valoarea definita initial // 884. 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 January 13, 2012 by Pugna Quote
Xander Posted January 13, 2012 Report Posted January 13, 2012 (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 exempluP.P.S:exemplu: http://ls0.us/captcha/create.phpsurse:http://ls0.us/captcha/create.phpshttp://ls0.us/captcha/lib.phps Edited January 13, 2012 by Xander Quote
Pugna Posted January 13, 2012 Author Report Posted January 13, 2012 (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 cookie2. trimiti post-ul ( deja aici ai alt cookie setat ).PS: Frumos codul, idee faina. Edited January 13, 2012 by Pugna Quote
totti93 Posted January 13, 2012 Report Posted January 13, 2012 Nu ai uitat sa pui si un alt fisier?Fatal error: Call to undefined function store_key() in [][]/captcha/create.php on line 4store_key() = ?? Quote
Pugna Posted January 13, 2012 Author Report Posted January 13, 2012 Nu ai uitat sa pui si un alt fisier?Fatal error: Call to undefined function store_key() in [][]/captcha/create.php on line 4store_key() = ??Toate functiile din cod sunt demonstrative si le-am dat un nume explicit ca sa poti urma logica. Codul nu l-am implementat. Quote
totti93 Posted January 13, 2012 Report Posted January 13, 2012 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 Quote
Pugna Posted January 13, 2012 Author Report Posted January 13, 2012 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. Quote
qbert Posted January 13, 2012 Report Posted January 13, 2012 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. Quote
Pugna Posted January 13, 2012 Author Report Posted January 13, 2012 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. Quote
cmiN Posted January 14, 2012 Report Posted January 14, 2012 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 . Quote
pr00f Posted January 14, 2012 Report Posted January 14, 2012 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?. Quote
qbert Posted January 14, 2012 Report Posted January 14, 2012 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. Quote