2 opțiuni CAPTCHA pentru site-ul dvs.

În această lecție vom învăța să scrie propria lor captcha, chiar și în două versiuni, care nu va fi prea complicat, ușor de utilizat și, în același timp, destul de eficient.

Plan de lecție:

1. Formularea problemelor (08:01)

2. Algoritmul captcha №1. Începe punerea în aplicare (14:56)

3. captcha realiza expresia matematică (12:03)

4. Realizati captcha întrebări și răspunsuri (17:49)

1. Situația problemei

Așa că hai să vorbim un pic despre afișat într-un CAPTCHA. După cum sa menționat deja, în cazul în care vom posta on-line sub forma obișnuită de feedback-ul, apoi în curând de mail noastre de sute de inundații de mesaje spam care oferă pentru a cumpăra un lucru inutil și a obține un cadou chiar mai mult nu un lucru bun, sau ceva de genul asta. Adesea, autorii de spam întregul proces este automatizat, adică nu se duc la site-urile lor și completați formularele de contact de spam, și pentru ei face scris special script-uri (impotriva spam-urilor). Aceasta se datorează faptului că forma noastră trebuie să fie un fel de protecție de la forma de umplere automatizată, și anume Trebuie să verificați omenirea de umplere.

Pentru a nu trimite mesaje pline cu roboții inventat mai mult de un fel. Probabil primul și cel mai faimos este CAPTCHA (acronim pentru ceva de genul - „automat de testare pentru diferențele Calculatoare and Humans Apart“) ... dar, în același timp - acesta este cel mai incomod pentru opțiunea de utilizator (în opinia mea). Cred că mulți oameni au întâlnit în completarea captcha - uneori trebuie să literalmente „decripta“, ea, întrebându - ce este acest simbol? Ca descifrat prin introducerea ... veți obține un mesaj care nu este validă ... începe din nou încercările noastre în domeniul de decriptare ... uneori, tot de la ghici aleatoare că dezvoltatorii acestui CAPTCHA special, să ia în considerare cazul personajelor, dar în același timp, nu un cuvânt a spus despre ea ... apare atunci când această dorință puternică de dezvoltatori numit cuvinte rele.

Da, și în afară de astăzi CAPTCHA nu mai este o protecție sigură împotriva formă de umplere automată și înregistrarea automată - bot „devin mai inteligente“ și de multe ori se poate (recunoaște din propria mea experiență: pe forum cu CAPTCHA standard, care reprezintă una din companie, a doua zi a fost 10 înregistrări automate, respectiv, despre același fapt obscen după înlocuirea captchas de tipul AntiBot „întrebări și răspunsuri“ roboții nu mai înregistrate) ... în plus, există resurse chiar și care angajează clickere pentru cei care lucrează în beneficiul spa - Mers caractere cu captchas injectat.

În general, captcha tradițional nu este cea mai bună opțiune. Astăzi există un mijloc mult mai fiabile de verificare pentru omenire, care, de altfel, este mult mai convenabil pentru utilizator.

Iată câteva opțiuni care sunt, în opinia mea, poate concura cu succes cu captcha tradițional:

1. Se calculează rezultatul adăugării (sau alte operații matematice) a două numere aleatoare;

2. pentru a da un răspuns la o întrebare simplă, cum ar fi „Numele planetei noastre“;

3. Pentru a scoate / instala o bifă în caseta de validare;

4. click pe imaginea particulară a numărului de propuneri.

Cred că acest lucru poate fi un prolog pentru a termina și trece la crearea algoritmului și punerea sa în aplicare.

2. Algoritmul captcha №1. Începem punerea în aplicare

Pentru a genera numerele pe care le folosim Rand funcția (), generând un număr întreg aleator în intervalul specificat. Mai sus de design deschis sub formă de cod PHP și începe să codifice:

Astfel, în $ o variabilă și $ b, avem acum un număr aleatoriu de la 1 la 10. În plus, am deschis funcția de sesiune session_start (). Cred că ați ghicit de ce avem nevoie de ea. Noi avem undeva pentru a stoca rezultatul adăugarea a două numere, după trimiterea datelor din formular către handler, și cel mai simplu mod de a face acest mecanism de sesiune, folosind. Crearea unei variabile de sesiune și îi atribuie rezultatul unei operații matematice - am acest lucru va fi adăugarea de:

Rămâne de a aduce la numerele generate de utilizatori, în locul potrivit la forma:

Acum putem face testarea intermediară este deja scris. Pentru a face acest lucru, după începerea sesiunii vom scrie următorul cod:

Care sunt aceste linii de cod?

În primul rând, prima condiție, vom verifica dacă există elementul depune în matrice POST la nivel mondial. Acest lucru se face pentru a se verifica dacă butonul a fost apăsat forma - Remitere buton are un nume, din cauza pe care îl verificăm este prezența acestui element în POST-date. Deci, dacă butonul a fost apăsat, se va executa codul în paranteze operatorul, sau - codul va fi omisă. Dar, între paranteze operatori specificam condițiile. Această condiție suntem, de fapt, și să compare ceea ce au primit de la utilizator la faptul că am stocat în sesiune variabila $ _SESSION [ „res“]. Dacă ambele valori sunt aceleași - verificați „OK“ și a trecut vor fi afișate, în caz contrar - pentru a verifica omenirea nu a reușit.

Deci, pentru a începe, vom scrie codul pentru blocul diferit (altceva), care se declanșează în cazul în care în cazul în care testul nu este trecut. Ceea ce trebuie să facem în acest caz? Ai nevoie pentru a genera 2 număr nou și informează utilizatorul că nu a fost testat. Pentru toate acestea avem nevoie pentru a reîncărca complet pagina - acest lucru ne va ajuta în afara funcției () - și de a crea o nouă sesiune de variabilă, pe care o vom scrie mesaje pentru utilizator despre succesul sau eșecul.

Acum este necesar pentru a aduce valoarea de $ _SESSION [ „mes“] în locul potrivit, de exemplu, sub forma. trebuie, de asemenea, imediat variabila anula înregistrarea sesiunii, deoarece valoarea sa trebuie să fie afișată doar o singură dată și apoi actualizați pagina aceasta nu ar trebui să fie.

Sub forma, scrie codul:

Acum, când testarea este scris, dacă facem un răspuns greșit la o expresie de test, mesajul „este dat răspunsul greșit!“, Adică Acesta funcționează așa cum ar trebui, în caz contrar unitatea. În cazul în care răspunsul este corect - ar funcționa condiție unitate, dar el încă este gol - nimic nu va fi afișat. Acum, pentru a trimite scrisori la condițiile de bloc.

3. Pentru a realiza captcha expresie matematică

Scrisoarea formată utilizând funcția e-mail (), și apoi îl trimite serverul de e-mail. Această caracteristică are trei argumente necesare:

2. $ subiect - subiect al mesajului;

3. corp $ - corpul mesajului.

De asemenea, există un alt argument opțional, dar foarte de dorit, în cazul în care puteți specifica date de servicii dopolnitelnvy, cum ar fi de codificare, în care programul de e-mail pe care doriți să deschideți o literă (în caz contrar mesajul va fi deschis în codificarea, programul de e-mail implicit).

4 variabile și a crea o funcție de e-mail () va forma o deja gata pentru a trimite:

Explica un mic fragment de cod.

Astfel, primul CAPTCHA de contact puse în aplicare. Acum vom trece la punerea în aplicare a doua.

4. Realizati întrebarea și răspunsul captcha

In aceasta vom fi afișat într-o bază de date CAPTCHA de întrebări și răspunsuri (întrebări pot fi orice număr). Utilizatorul va cere să răspundă la o întrebare aleasă la întâmplare. Dar apoi totul merge pe același algoritm ca în precedent afișat într-un CAPTCHA. Astfel, sarcina noastră este de a crea o bază de date de întrebări și răspunsuri și selectați aleatoriu o întrebare. În aceeași variabilă sesiune pentru a fi scris un răspuns la apoi compara cu răspunsul utilizatorului.

Pentru scopurile noastre, vom crea un nou fișier (de exemplu, index2.php), care se va copia codul din fișierul anterior. Va face modificări minime în fișierul generat: redirecționa toate schimbările la fișierul curent (index2.php) și șterge linia cu generarea numerelor și adăugarea de rezultatul înregistrat în variabila de sesiune.

Acum a crea o bază de date de întrebări și răspunsuri. Păstrați-le poate fi, de exemplu, într-o bază de date, fișier text, sau orice stocare a datelor convenabil. Faceți clic pe matrice pentru aceste scopuri. Matricea este multidimensională - fiecare element al matricei va fi creat ca o matrice, elementele de care, la rândul său, va fi o întrebare și răspuns. Pe site-generarea de numere de a crea o matrice cu datele necesare - Voi avea 3 perechi de întrebare-răspuns (puteți face mult mai multe dintre aceste perechi - toate limitate doar de imaginatia ta). Vă atrag atenția asupra faptului că toate răspunsurile trebuie să fie scrise cu litere mici:

Acum, în scopul de a afișa, de exemplu, problema „regele animalelor“ - este suficient să se facă referire la matrice $ întrebare astfel:

Adică, ne întoarcem mai întâi la un element cu o cheie 1 - o matrice cu întrebările potrivite - și apoi la întrebarea cine are cheia 0. Rețineți că toate întrebările din sub-matrice au aceeași cheie - 0, și toate răspunsurile - 1. Deci, mod de a selecta în mod aleatoriu problemă suficient pentru a genera o primă cheie (în acest caz, acest lucru va fi un număr de 0 - 2). Pentru a face acest lucru, creați o cheie variabilă $ și a pus-generat numărul într-un anumit interval - acest lucru va fi primul indiciu:

Aici ne-am indicat, așa cum era de așteptat, două opțiuni pentru funcția de rand (). Cu un minim clar - este zero (implicit elemente ale șirului de numere începe de la zero). Al doilea parametru poate fi specificat în mod explicit - 2. Dar atunci scriptul va fi un pic pierdut în universalul - pentru că dacă modificați numărul de întrebări care trebuie să fie schimbat și un număr maxim de funcții. Pentru numărul de întrebări a fost considerat în mod automat, folosiți funcția de numărul de () - contorizează numărul de elemente din matrice. În cazul nostru, funcția va returna (elementul 3 în matrice) trei. Dar ultima întrebare este cheia 2, și așa mai scădem din rezultat, care va returna count () unitate funcțională și de a obține rezultatul dorit.

Rămâne să-și amintească ce corespunde la întrebarea selectată pentru a răspunde. Primul indiciu avem, iar al doilea este întotdeauna 1 pentru răspunsuri:

Acum Deducem întrebarea selectată în forma locul potrivit:

De fapt, a doua CAPTCHA este aproape gata și îl puteți testa deja. Rămâne să adăugați câteva mici detalii. Ne amintim că era important să se scrie răspunsuri la toate cu litere mici. Acest lucru se face cu un motiv ulterior - nu știm în ce formă primim de la răspunsul utilizatorului, spun întrebarea „Numele planetei noastre“ ... ar putea fi răspunsul - „Pământul“, și, probabil, acest lucru - „Pământul“. Aceste răspunsuri nu sunt identice. Prin urmare, avem nevoie pentru a le face identic cu script-ul. Și să-l facă într-o clipă. Este suficient pentru a provoca răspunsul utilizatorului la cazul de jos, ceea ce ne va ajuta la funcția strtolower (). De asemenea, doar în cazul, puteți reduce diferența de la ambele capete ale șirului primit de la utilizator (acest lucru se face în cazul în care utilizatorul a introdus, împreună cu spațiul de răspuns). Trim spațiile de la începutul și sfârșitul liniei va funcționa asieta (). Editați linia de cod în cazul în care un meci este verificată de către utilizator la faptul că avem:

concluzie

Asta e tot. Ambele CAPTCHA nostru implementat și gata de utilizare pe site-ul și, așa cum sa menționat deja, în opinia mea, CAPTCHA este mult mai eficient decât captcha tradițional. Aici se încheie lecția noastră este terminat. Mult noroc în proiectele dumneavoastră și veți vedea în curând!

Cele mai multe știri IT si dezvoltare web pe canalul nostru-Telegram

Deci, asta e tot, și ceea ce înseamnă că clientul nu este destinat pentru lucruri cum ar fi CAPTCHA
Înțelesul partea de client pentru a îmbunătăți gradul de utilizare a, și inspecție / de protecție ar trebui să fie impusă numai pe partea de server. Bot și nu trebuie să facă nimic cu partea de client, acesta pur și simplu o elimină din codul sursă. De exemplu, pentru a trimite date către serverul impune ca toate câmpurile au fost completate. În timp ce acestea nu sunt umplute blocuri de JS butonul de trimitere. Excelent! Noi luăm forma de cod sursă, eliminați toate JS de la ea și în mod liber a trimite date către server.
Deci: „Dacă site-ul dvs. are un“ „captcha unic, și anume ceea ce nu este în valoare de pe motoarele de populare, etc. nu are nici un sens pentru a dezvolta un robot spammer sub ea, pentru că în jurul valorii de plin de alte site-uri pe care el poate trece“... asta e ideea. Aceasta este ceea ce a fost spus în legătură cu raportul țintă / agent. Scrieți un bot separat, sub un CAPTCHA unic (care nu este cu siguranță un zgomot linie pe imagine) este o soluție prea scumpă, care poate fi justificată doar prin scopul respectiv.
Și astfel, într-adevăr este plin de site-uri web, bloguri, forumuri în care se CAPTCHA obișnuit stă în punerea sa în aplicare a originalului ...
asa ca de ce plătească mai mult?

Despre JS, dar dacă nu spui atunci când faceți clic pe un anumit buton, cum ar fi „Eu nu sunt un bot“, să ia măsuri și să se bazeze pe sub forma unui parametru opțional sau pentru a seta un câmp ascuns o anumită valoare. Apoi, pentru că barca nu va fi în măsură să faceți clic pe butonul, iar datele nu vor fi transferate. Și pentru că puteți trimite formularul prin intermediul AJAX, și nu altfel. Pentru bot, deoarece va fi o sarcină consumatoare de timp?

în cazul în care o soluție eficientă în acest caz, anti-spam?

Dragă Start dacă nu versat în PHP, este mai bine să ia mai ușor captcha - cu o expresie matematică.
Doar pentru a fi descărcat oaspete, pentru a spune soluțiile algoritmului. Deci, addrec.php fișier este setat inițial la null eroarea $ variabila. Această variabilă este steagul original: În cazul în care, după toate verificările, acesta va fi gol - adăugarea unei înregistrări într-un fișier, în caz contrar - ceva ce nu ne convine.
Prin urmare, la forma necesară pentru a adăuga un câmp pentru a introduce rezultatul expresiei matematice, și obținând apoi rezultatul câmpului din matriță, în comparație cu cea stocată în sesiune (nu uitați să deschidă o sesiune). În cazul în care rezultatele nu se potrivesc - putem scrie un mesaj în eroare de $ variabila, blocând astfel adăugarea mesajului. Asta e

Mulțumesc, dar este puțin probabil că mă va ajuta. CAPTCHA precedent nu durează o lună, astfel încât simple de matematică pentru cineva și să nu fie prea leneș pentru a deschide și apoi trebuie să-și petreacă o mulțime de timp pentru a căuta o altă opțiune. Întrebări și răspunsuri, cel puțin, puteți adăuga și schimbare, spammerii deranjez pentru a merge tot timpul pe site-ul și am o întrebare. Cred că, în cazul meu soluția este de a acoperi cartea de oaspeți până la vremuri mai bune.

articole similare