استفاده از reCAPTCHA

چگونه میتوان از CAPTCHA در اپلیکیشن های اندروید استفاده کرد؟ – بخش دوم

در مطلب قبلی، مراحل اولیه برای استفاده از CAPTCHA در اپلیکیشن اندروید را شرح دادیم، در ادامه به نحوه اعتبارسنجی کد وارد شده خواهیم پرداخت، با ما همراه باشید.

 

4. اعتبارسنجی توکن های CAPTCHA

در این گام باید توکنی را که در مرحله قبل دریافت کرده اید، مجددا برای اعتبارسنجی به سرویس reCAPTCHA ارسال کنید تا مشخص شود که آیا کاربر کد درست را وارد کرده یا خیر. با این تفاوت که این بار، فراخوانی سرویس reCAPTCHA از سرور بک-اند صورت میپذیرد.

تا زمانی که اپلیکیشن اندروید توکنی ارسال نکند، چیزی برای اعتبارسنجی نخواهیم داشت. بنابراین باید کدی بنویسیم که توکن ها را از اپلیکیشن اندروید برای سرور ارسال کند.

 

فرض کنید که سرور دارای یک اند-پوینت به نام validate است که توکن ها را به صورت پارامتر query string دریافت میکند و از 10.2.2.2 به عنوان آدرس آی پی و 8000 به عنوان پورت استفاده میکند. چنانچه مایلید سرور را از طریق کامپیوتر خود مدیریت کنید و اپلیکیشن را هم بر روی ایمولاتور و بر روی همان کامپیوتر اجرا کنید، میتوانید از آی پی مشابه استفاده نمایید.

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

 

در این مرحله میتوانید از متد ()httpGet لایبرری Fuel، برای ارسال توکن به سرور استفاده کنید. این متد لیستی از پارامترهای query string را به عنوان تنها آرگیومنت میگیرد. میتوانید از متد کاربردی ()listOf برای ساخت لیستی که تنها شامل یک آیتم است استفاده کنید: توکن به یک پارامتر query به نام user_token تخصیص داده شد.

از آنجا که متد ()httpGet به صورت ناهمگام به اجرا درمی آید، باید از متد ()responseString برای کنترل مقدار بازگشتی آن استفاده کنید. کد زیر نحوه انجام این کار را به شما نمایش داده است:

serverURL.httpGet(listOf("user_token" to token))

.responseString { request, response, result ->

// More code here

}

 

همانطور که میبینید، به آبجکت result دسترسی داریم و در صورتی که هیچ خطایی وجود نداشته باشد، این آبجکت شامل پاسخ سرور به صورت یک رشته خواهد بود.

فرض کنید که سرور در صورت موفقیت کاربر در وارد کردن کد، رشته PASS و در غیر این صورت FAIL را برگرداند. عملیاتی که با توجه به نتیجه انجام میدهد کاملا به شما بستگی دارد، اما میتوانید یک پیام Toast مناسب را نمایش دهید. کد زیر نحوه انجام این کار را نشان داده است:

result.fold({ data ->

if(data.contains("PASS"))

Toast.makeText(baseContext,

"You seem to be a human.",

Toast.LENGTH_LONG).show()

else

Toast.makeText(baseContext,

"You seem to be a bot!",

Toast.LENGTH_LONG).show()

}, { error ->

Log.d("ERROR", "Error connecting to the server")

})

 

در این مرحله اپلیکیشن آماده است و میتوانید آن را بر روی ایمولاتور یا گوشی اجرا کنید.

اعتبارسنجی reCAPTCHA

 

5. ساخت سرور

در این مرحله باید سرور را بسازیم و فرضیات قبلی خود را بررسی کنیم.

یک روش سریع و ساده برای ساخت یک وب سرور استفاده از پلتفرم Node.js و Express.js میباشد. به منظور ساخت یک پروژه Node.js جدید، یک دایرکتوری بر روی کامپیوتر خود ساخته و دستور npm init را در داخل آن به اجرا درآورید.

mkdir my_web_server

cd my_web_server ; npm init -y

 

برای افزودن فریم ورک Express، باید از دستور npm install استفاده کنید.

npm install --save express

 

علاوه بر این، به پکیج Request برای اتصال به سرویس reCAPTCHA نیاز داریم، لذا آن را به عنوان یک وابستگی دیگر نصب کنید.

npm install --save request

 

در این مرحله میتوانید با ویرایشگر کد موردنظر خود یک فایل جدید به نام index.js بسازید و کدهای سمت سرور موردنیاز را بنویسید.

عملیات را با بارگذاری ماژول های express و request آغاز کنید، این کار با استفاده از تابع ()function انجام میشود و باید با فراخوانی تابع ()express، یک اپلیکیشن Express جدید بسازید.

const express = require('express');

const request = require('request');

const myApp = express();

 

اپلیکیشن Express باید یک اند-پوینت به نام validate داشته باشد که توسط متد HTTP GET قابل دسترسی است. بنابراین با استفاده از متد ()get، یک route جدید برای آن بسازید:

myApp.get('/validate', function(req, resp) {

// More code here

});

 

برای اعتبارسنجی توکن ساخته شده توسط اپلیکیشن، یک درخواست POST برای سرویس reCAPTCHA ارسال کنید. این درخواست باید شامل کلید مخفی و توکن باشد. کد زیر نحوه ساخت درخواست POST، با جدا کردن توکن از query string را نمایش داده است:

const postData = {

secret: '1234567890-abcdefghijklmnopqr',

response: req.query.user_token

};

 

برای ایجاد درخواست POST، متد post() از ماژول request را فراخوانی کنید. پاسخ این درخواست یک داکیومنت JSON کوتاه، شامل کلیدی به نام success میباشد. همانطور که انتظار میرود، تنها در صورتی که کاربر کد را به درستی وارد کرده باشد، مقدار آن true خواهد بود.

کد زیر نحوه تجزیه و تحلیل داکیومنت JSON را نمایش داده، کلید success خارج میشود و جواب های PASS و FAIL که اپلیکیشن اندروید به آنها احتیاج دارد را تولید میکند:

request.post({

url: 'https://www.google.com/recaptcha/api/siteverify',

form: postData

}, function(error, response, body) {

jsonData = JSON.parse(body); // Parse the JSON document

if(jsonData.success) { // User passed the test

resp.send('PASS');

} else { // User didn't pass the test

resp.send('FAIL');

}

});

 

در آخر باید متد ()listen از اپلیکیشن Express را فراخوانی کنید.

myApp.listen(8000);

 

در این مرحله وب سرور آماده است، برای شروع کار به ترمینال برگردید و دستور زیر را اجرا کنید:

node index.js

 

اگر اپلیکیشن اندروید را اجرا کنید، دکمه را بزنید و reCAPTCHA را درست وارد کنید، یک پیام Toast را مشاهده خواهید کرد.

کار با reCAPTCHA

 

جمع بندی

در این مطلب نحوه استفاده از SafetyNet reCAPTCHA API برای بهبود امنیت بخش بک-اند اپلیکیشن اندروید را فرا گرفتید. با این کار دیگر نگرانی بابت ثبت نام های خودکار، اسکرین اسکرپرها و اسپم های تولید شده توسط بات ها و ... نخواهید داشت.

برای کسب جزئیات بیشتر میتوانید به official documentation مراجعه کنید.

 

https://code.tutsplus.com برگرفته از

اینها را هم بخوانید