Și pentru început - în cazul în care credeți că o astfel de verificare CAPTCHA va funcționa:
if ($ _ POST [ 'captcha'] == $ _SESSION [ 'captcha']) return true; (Studiu de caz)
atunci esti profund greșită.
Conform definiției sale, captcha - este testul Turing automat Public (un test care poate trece oameni, dar nu calculatorul). În acest articol, voi lua în considerare exemplul unei proprietăți de CAPTCHA omniprezentă de acest gen - textul din imagine, cu toate că aproape totul scris este la fel de aplicabil oricărui tip de CAPTCHA.
Cele două proprietăți principale CAPTCHA
Orice CAPTCHA trebuie să aibă două proprietăți, fără de care nu va funcționa:
Rezistența la recunoașterea - proprietate, protejarea de algoritmul de recunoaștere captcha - cum ar fi sistemul de recunoaștere a textului. Se asigură că oamenii vor fi capabili să citească textul din imagine, iar calculatorul nu este.
Antiprimer: forum captcha standard, phpBB 2.x această proprietate nu a avut - din cauza ușurinței relative de recunoaștere a apărut script-uri care spam-ul este un rând forumuri forțându webmasteri pentru a schimba captcha mai stabil.
Rezistența la ghicitul - proprietate captcha, care nu permite ei să ghicească valoarea unui număr mic de ori (cel puțin 1000). În cazul în care setul de valori posibile ale CAPTCHA este scăzut, programul nu va fi greu de ghicit selecția ei în loc de recunoaștere.
Antiprimer: CAPTCHA aritmetice, cum ar fi "2 + 1" (numere brute de la 1 la 20 într-un timp scurt, va avea drept rezultat).
Antiprimer: alege din mai multe imagini pe unul care descrie o pisica.
verificarea captcha
Valoare pentru test trebuie să fie stocate pe server și nu a fost trimis cu imaginea în browser. Pentru comparație, vizitatorul și valoarea corectă a unei chei captcha pe care doriți să utilizați, care este trecut împreună cu CAPTCHA (ID-ul de sesiune, numărul de CAPTCHA, etc.)
Antiprimer în cazul în care se transmite captcha și valoare pentru verificare (inclusiv criptat), omul odată ce este suficient pentru a recunoaște un CAPTCHA și apoi utilizați o combinație de „răspuns“ - „valoarea de verificare“, în scenariul său (prin link-ul de la începutul Postului Mare ca un timp acest caz)
Înainte de a verifica răspunsul - este necesar să se asigure că nu este gol. În caz contrar, un atacator nu se poate încărca o imagine sau de a scoate identificatorul sesiunii curente, trece o valoare nulă și trece, deoarece captcha Se întâmplă compararea a două linii goale (în PHP valoare inexistentă egală cu șir gol).
Antiprimer: chiar dacă codul am menționat ($ _POST [ 'captcha'] == $ _SESSION [ 'captcha']) return true;
Și acest cod a fost scris de un programator cu experiență.
După verificare, CAPTCHA stocate trebuie să fie eliminate. Dacă nu face acest lucru, un atacator ar putea folosi o valoare numărul nelimitat de ori din nou. Da, atunci când actualizați pagina cu formularul este actualizată și CAPTCHA (fie în generarea de formă, sau în generarea de imagini), doar script-ul nu se poate încărca din nou formularul (Trebuie să menționez că acest lucru nu este valabil în cazul în care site-ul dvs. utilizează de unică folosință CSRF-jetoane pentru forme).
Antiprimer: formă ipotetică de autentificare, care odată ce este suficient pentru a intra în CAPTCHA corect, și apoi selectați scriptul parola, evitând regenerarea CAPTCHA pe server.
CAPTCHA antiglonț
Protecția împotriva forței brute. Dacă captcha dvs. rezistent la recunoaștere, dar nu este foarte rezistent la sortarea (cum ar fi este necesar pentru a citi doar 3-4 cifre), este de dorit să se limiteze numărul de răspunsuri greșite „de la un ip» / «pentru o autentificare» / etc. Astfel de restricții trebuie să fie verificate pentru a verifica mai CAPTCHA (de exemplu, chiar dacă este introdus corect captcha, în cazul în limite nu ar trebui să fie traversate) în caz contrar nu va interveni prea mult.
Protecția împotriva DoS. Când generați un captcha pe serverul dvs., este necesar să se înțeleagă că acest lucru este un vector convenabil care efectuează atacuri DoS (care, spre deosebire de DDoS, poate aranja orice student). Pentru mai multă securitate, puteți limita numărul de generare a CAPTCHA pentru un singur ip, capturi de cache, etc. Cititi mai multe despre ea
Protecția împotriva recunoașterii. Dacă alegeți un CAPTCHA, sau dintr-o dată de gând să scrie singur, este recomandabil să se înțeleagă ce CAPTCHA protejat de recunoaștere. Sunt gata făcute universale script-uri de recunoaștere CAPTCHA, care lucrează pe principiul OCR. și dacă site-ul dvs. spam sunt interesați, există riscul ca acestea vor utiliza / scrierea scenariului special pentru dumneavoastră captcha. Recent, cu toate acestea se referă mai mult la nivelul de site-uri Yandex și dp, dar versiunea cu protecție de banală OCR este de dorit să se asigure.
antigeytov de protecție. Vorbind în mod oficial, CAPTCHA ca testul Turing nu este necesar pentru a vă proteja de antigeytov, ca și în acest caz se va recunoaște oameni. Din punct de vedere practic, această problemă este extrem de relevantă și protejată ca este necesar.
Aici nu poate fi un „standard de aur“ (în acest caz, antigeyty să introducă sprijinul său), astfel încât sunteți liberi să completeze captcha trucuri pentru a face prin recunoașterea antigeyt imposibilul. De exemplu:
- CAPTCHA non-standard (de colectare a puzzle-ului, roti imaginea, faceți clic pe zona din fotografie, etc.);
- CAPTCHA chirilic - cea mai simplă soluție, dar are o serie de dezavantaje: numai potrivite pentru un public cu proiectele rusești au antigeyty cu suport pentru chirilic;
- utilizarea tastaturii virtuale de lângă captcha pentru a introduce caractere non-standard sau cifre (pot fi utilizatorii de dispozitive mobile incomode);
- utilizarea CSS sau JS CAPTCHA (generarea de imagini folosind poziționare heap div sau folosind o pânză)
și așa mai departe.
Nu cere să introduceți captcha, dacă ați văzut deja că omul înainte. Aici însă, trebuie să fim atenți că formularul nu poate fi folosit un script orice număr de ori, după un singur om de intrare captcha.
Exemplu: formular de înregistrare. Dacă sunt înregistrate undeva și a uitat să introduceți „codul poștal“, dar a introdus corect captcha - nu este nevoie să-mi arate unul nou. Petrece 10 minute încercând să salveze undeva la faptul că acum această formă particulară este acum încearcă să umple o persoană vie. Dvs. de zece minute, va salva multe ore de umanitate.