Cum să adăugați CAPTCHA-uri în aplicațiile Android

Dacă dezvoltați o aplicație Android care trebuie să interacționeze cu serverul dvs. back-end, este important să faceți pași pentru a-l apăra împotriva script-urilor automate care încearcă să treacă la om. În caz contrar, serverul dvs. are o șansă foarte mare de a fi depășit de ele.

CAPTCHA-urile, scurte pentru testele public Turing complet automatizate pentru a spune Computere și Humans Apart, sunt în prezent cea mai eficientă apărare împotriva roboților. După cum probabil știți, acestea sunt, de obicei, teste de imagine, voce sau bun simț, care sunt ușor pentru oameni, dar extrem de greu pentru computere.

În acest tutorial, vă vom arăta cum să utilizați noul SafetyNet reCAPTCHA API pentru a adăuga CAPTCHA-uri în aplicațiile Android.

Cerințe preliminare

Pentru a putea urmări acest tutorial, veți avea nevoie de următoarele:

  • Android Studio 3.0 Canary 4 sau o versiune ulterioară
  • un dispozitiv sau un emulator care rulează Android 4.4 sau o versiune ulterioară
  • Node.js 8.1.3 sau superior

1. Configurarea proiectului

Lansați Android Studio și creați un nou proiect cu o activitate goală. În Configurați-vă noul proiect , asigurați-vă că introduceți un nume de pachet semnificativ - îl veți utiliza în timp ce vă înregistrați aplicația cu serviciul reCAPTCHA.

În plus, verificați Includeți suportul Kotlin camp. Deoarece Kotlin este acum o limbă oficială Android, o vom folosi în loc de Java în acest tutorial.

SafetyNet API-urile fac parte din serviciile Google Play. Pentru a putea să le utilizați în proiect, adăugați următoarele punerea în aplicare dependența față de build.gradle fișier al aplicaţia modul:

implementare "com.google.android.gms: play-services-safetynet: 11.0.2"

În plus, pentru a efectua operațiuni legate de rețea, vom folosi biblioteca de combustibil, care are un API bazat pe Kotlin foarte concis. Prin urmare, adăugați-l ca pe altul punerea în aplicare dependenţă.

implementare "com.github.kittinunf.fuel: fuel-android: 1.8.0 '

Nu puteți efectua operațiuni legate de rețea fără INTERNET permisiune, adăugați următoarea linie în fișierul manifest al proiectului:

În cele din urmă, apăsați pe Sincronizați acum pentru a finaliza configurația proiectului.

2. Obținerea cheilor reCAPTCHA

Veți avea nevoie de două chei înainte de a putea utiliza serviciul reCAPTCHA:

  • o cheie de site, care trebuie trimisă serviciului din aplicația Android
  • și o cheie secretă, care trebuie transferată serviciului de pe serverul dvs. back-end

Pentru a obține cheile, utilizați contul dvs. Google și conectați-vă la consola de administrare reCAPTCHA. Dacă deschideți consola pentru prima dată, veți primi automat un formular de înregistrare scurt, în care puteți introduce numele pachetului aplicației.

După ce acceptați termenii și condițiile reCAPTCHA, continuați și apăsați pe Inregistreaza-te pentru a genera ambele taste.

Acum puteți adăuga cheia site-ului la proiectul dvs. Android Studio, pur și simplu menționând-o în interiorul res / valori / strings.xml fişier:

ABCDEFGHIJKLMNOPQ1234567890

Vom lucra cu cheia secretă numai spre sfârșitul acestui tutorial, deci notează-l undeva în siguranță pentru moment.

3. Generarea CAPTCHAs

Când auzim cuvântul CAPTCHA, de obicei ne gândim la imagini murdare care conțin litere și numere greu de citit. Astfel de CAPTCHA-uri, datorită progreselor înregistrate în tehnologiile de viziune informatică, nu mai sunt suficiente pentru a opri toate roboții.

CAPTCHA-urile generate de serviciul reCAPTCHA sunt foarte avansate și foarte interactive. De fapt, rezolvarea lor este asemănătoare cu jocurile simple. Prin urmare, nu le puteți încorpora direct în aspectul activității dvs. În schimb, trebuie să adăugați un buton la aspect, care, atunci când este apăsat, ar trebui să conducă utilizatorul la un nou ecran sau dialog care să conțină CAPTCHA.

Următorul cod vă arată cum să adăugați a Buton widget în fișierul XML al activității dvs.

Înainte de a începe să generați CAPTCHA, va trebui să inițializați un client pentru SafetyNet API. Puteți face acest lucru prin apelarea getClient () metodă a Plasă de siguranță clasă. În consecință, adăugați următorul cod în interiorul onCreate () metoda dvs. Activitate clasă:

val myClient: SafetyNetClient = SafetyNet.getClient (acest lucru)

CAPTCHA-urile trebuie să fie afișate când utilizatorul apasă butonul, așa că adăugați un handler de evenimente pe-clic pe acesta folosind setOnClickListener () metodă. În interiorul robotului, tot ce trebuie să faceți este să apelați verifyWithRecaptcha () și treceți cheia site-ului ca argument pentru a deschide un dialog care conține o CAPTCHA.

Valoarea returnată a verifyWithRecaptcha () metoda este a Sarcină obiect. Prin atașarea unui handler pentru evenimentul de succes pe care îl puteți obține, veți putea achiziționa un a RecaptchaTokenResponse obiect care conține un jeton pe care îl puteți folosi pentru a afla dacă utilizatorul a trecut sau a eșuat CAPTCHA. Iată cum:

are_you_human_button.setOnClickListener myClient .verifyWithRecaptcha (resources.getString (R.string.my_site_key)) .addOnSuccessListener successEvent -> token val: String = successEvent.tokenResult // Mai mult cod aici

4. Validarea codurilor CAPTCHA

Jetonul pe care l-ați primit în etapa anterioară trebuie să fie transferat din nou la serviciul reCAPTCHA pentru a verifica dacă utilizatorul a trecut sau nu a reușit testul. Totuși, de această dată, apelul către serviciul reCAPTCHA trebuie efectuat de pe serverul dvs. back-end.

Desigur, serverul nu va avea jetonul decât dacă aplicația dvs. Android o trimite la acesta. Prin urmare, acum trebuie să scriem cod pentru a trimite jetoane din aplicația Android către server.

Pentru moment, să presupunem că serverul nostru are un punct final numit valida, care poate accepta tokenul ca parametru de șir de interogare. Voi folosi 10.0.2.2 ca adresa IP a serverului și 8000 ca port. Dacă intenționați să rulați serverul de pe propriul computer și aplicația dintr-un emulator care rulează pe același computer, puteți utiliza aceeași adresă IP.

val serverURL: String = "http://10.0.2.2:8000/validate"

Acum puteți apela httpGet () metodă oferită de biblioteca de combustibil pentru a trimite token-ul către server. Metoda se așteaptă ca o listă de parametri de șir de interogări ca argument unic, așa că vă sugerez să utilizați lista de() utilitate pentru a crea o listă care conține un singur element: tokenul atribuit unui parametru de interogare denumit user_token.

Deoarece httpGet () metoda rulează asincron, trebuie să apelați responseString () pentru a-și gestiona valoarea de retur. Următorul cod vă arată cum:

serverURL.httpGet (listOf ("user_token" la token)) .responseString cerere, răspuns, rezultat -> // Mai mult cod aici

Puteți vedea că avem acum acces la un rezultat obiect. În cazul în care nu există erori, acesta va conține răspunsul serverului nostru ca șir.

Să presupunem că serverul nostru returnează șirul "PASS" dacă utilizatorul trece testul și "FAIL" în caz contrar. Ce faceți, de fapt, atunci când utilizatorul trece sau nu reușește testul este, desigur, la latitudinea dvs. Pentru moment, vă sugerez să vă afișați pur și simplu potrivite Paine prajita mesaje. Următorul cod vă arată cum să faceți acest lucru în mod concis:

result.fold (data -> if (data.contains ("PASS")) Toast.makeText (baseContext, "You seem to be human", Toast.LENGTH_LONG) "Se pare că ești un bot!", Toast.LENGTH_LONG) .show (), error -> Log.d ("ERROR", "Eroare la conectare la server"))

În acest moment, aplicația este gata. Puteți să mergeți mai departe și să o implementați în emulator sau dispozitiv.

5. Crearea serverului

Am făcut o mulțime de presupuneri despre serverul nostru web în pașii anteriori. Acum este momentul să îl creați, asigurându-vă că nu se abate de la acele ipoteze.

O modalitate rapidă și ușoară de a crea un server web pe deplin funcțional este utilizarea platformei Node.js și a cadrului Express.js. Pentru a crea un nou proiect Node.js, creați un nou director pe computer și rulați npm init comanda în interiorul lui.

mkdir my_web_server cd my_web_server; npm init -y

Pentru a adăuga cadrul Express la proiect, puteți folosi npm install comanda.

npm install --save express

În plus, vom avea nevoie de pachetul Request pentru a comunica cu serviciul reCAPTCHA. De aceea, instalați-l ca o altă dependență.

npm instalare - salvare cerere

Acum puteți utiliza editorul de cod preferat pentru a crea un nou fișier numit index.js și începeți să scrieți tot codul necesar pentru server.

Începeți prin încărcarea ambelor expres și cerere modulele care utilizează require () funcția și crearea unei noi aplicații Express apelând expres() funcţie.

const expres = necesită ("expres"); const request = solicită ('request'); const myApp = expres ();

Aplicația noastră Express trebuie să aibă un punct final numit valida, care pot fi accesate folosind metoda HTTP GET. Prin urmare, creați o nouă rută pentru utilizarea acestuia obține() metodă:

myApp.get ('/ validate', funcția (req, resp) // Mai mult cod aici);

Pentru a valida tokenul generat de aplicația Android, trebuie să faceți acum o solicitare POST la serviciul reCAPTCHA. Cererea trebuie să conțină cheia secretă și tokenul propriu-zis. Următorul cod vă arată cum să construiți corpul solicitării POST extragând tokenul din șirul de interogare:

const postData = secret: '1234567890-abcdefghijklmnopqr', răspuns: req.query.user_token;

Pentru a face cererea POST, puteți apela post() metodă a cerere modul. Răspunsul său este un scurt document JSON care conține o cheie numită succes. După cum s-ar putea să te aștepți, valoarea lui este Adevărat numai dacă utilizatorul a trecut testul.

Următorul cod vă arată cum să analizați documentul JSON, extrageți-l succes cheie și generează răspunsurile "PASS" și "FAIL" pe care trebuie să le aibă aplicația noastră Android:

request.post (url: 'https://www.google.com/recaptcha/api/siteverify', formular: postData, funcție (eroare, răspuns, corp) jsonData = JSON.parse (body); // Parsează documentul JSON dacă (jsonData.success) // Utilizatorul a trecut testul resp.send ('PASS'); altceva // Utilizatorul nu a trecut testul resp.send ('FAIL'); ;

În cele din urmă, trebuie să sunați la asculta() metoda obiectului aplicației Express, pentru a permite ascultarea conexiunilor.

myApp.listen (8000);

În acest moment, serverul nostru web este gata. Pentru ao porni, reveniți la terminal și executați următoarea comandă:

nod index.js

Dacă rulați acum aplicația dvs. Android, apăsați butonul și rezolvați cu succes un CAPTCHA, ar trebui să vedeți a Paine prajita mesaj care vă spune că sunteți umani.

Concluzie

Acum știți cum să utilizați API-ul SafetyNet reCAPTCHA pentru a vă proteja aplicația Android și infrastructura back-end împotriva robotilor. Nu trebuie să vă faceți griji în legătură cu înregistrările automate, cu racletele de ecran sau cu spam-ul generat de bot.

Pentru a afla mai multe despre API-ul reCAPTCHA, vă puteți referi la documentația oficială.

Între timp, verificați unele dintre celelalte postări extraordinare ale noastre pentru dezvoltarea aplicațiilor Android!

Cod