امنیت وب یکی از مهم‎ترین دغدغه های طراحان وب بوده و هست و در این میان کد های امنیتی (captcha) برای جلوگیری از ارسال داده های نامعتبر و هرز نامه و متمایز کردن انسان ها از ربات ها یکی از بهترین روش ها بوده، هر چند تکنولوژی های جدید باعث شده که امنیت این کد ها هم کاهش پیدا کنه اما روش ها و ترفنتد هایی وجود داره که امنیت این کد رو بالا ببریم. در این پروژه ما از کپچا جدید گوگل بنام reCaptcha استفاده کرده­ایم. کپچا کادری است که حروف و اعداد بصورت نامنظم در کنار یکدیگر قرار گرفته‌اند و کاربر باید آن‌ها را به ترتیب نوشته شده در کادر دیگری وارد کند. این پروسه به دلیل شناسایی کاربران واقعی از روبات‌های نرم‌افزاری صورت می‌گیرد. گوگل استفاده از چک باکس ساده را در دستور کار قرار داده است. برای استفاده از روش جدید کافی است کادری را که در جلوی عبارت «I'm not a robot» قرار گرفته، کلیک کرد. گوگل متد جدید شناسایی روبات‌های نرم‌افزاری را «No Captcha reCapthcha» نام گذاری کرده است. شاید بسیاری سیاست گوگل را یک قدم رو به عقب بدانند. این کمپانی اخیرا موفق به توسعه‌ی هوش‌مصنوعی شده که از طریق آن قادر است بدون نیاز به دخالت عامل انسانی، تمامی کپچاها را بصورت نرم‌افزاری تشخیص دهد.

واینی شِت، مدیر پروژه‌ی reCaptcha با انتشار پستی در وبلاگ خود در مورد روش جدید گوگل چنین اظهار نظر کرده است: شاید API روش جدید که reCaptcha نام دارد بسیار ساده به نظر برسد، اما پشت پرده شرایط بگونه‌ی دیگر و پیچیده است.

در روش جدید، رفتار کاربر قبل، بعد و در زمان نمایش چک‌باکس reCaptcha تحت نظر قرار می‌‌گیرد. در گجت‌های موبایل نیز روش جدید بصورت تصویری نمایش داده می‌شود که کاربر باید از مجموع تصاویر نمایش داده شده در قسمت زیر، تصویر مشابه را یافته و روی آن کلیک کند.

قدم اول: وارد شدن به حساب کاربری گوگل

برای استفاده از این امکان گوگل شما باید یک حساب کاربری در گوگل داشته باشید و پس از ورود به حساب کاربری خود به آدرس https://www.google.com/recaptcha/admin رفته و در آنجا باید فرم زیر را پر کنید. در این فرم شما اسم و آدرس سایت خودتون رو مشخص میکنید. اگر قصد اجرای مثال را روی localhost دارید همان localhost را ثبت کنید.

reCAPTCHA

قدم دوم: استفاده از reCAPTCHA

برای استفاده از reCaptcha در یک صفحه اول باید این script رو جایی در صفحه قرار بدیم. پیشنهاد خود گوگل قبل از تگ <head/> هست.

نکته: با اضافه کردن hl=fa? به انتهای لینک در src زبان reCaptcha شما فارسی می­شود.

<script src="https://www.google.com/recaptcha/api.js" type="text/javascript"><script>

و بعد از اون از قطعه کدی که گوگل به ما می­دهد، برای نمایش reCaptcha استفاده کنیم. در قطعه کد پایین قسمت your site key به صورت خودکار توسط گوگل پر می­شود.

<div class="g-recaptcha" data-sitekey="yout site key"></div>

قدم سوم : verify کردن reCaptcha

بعد از اینکه کاربر فرمی که در اون از reCaptcha استفاده کردید رو submit کرد، شما یک رشته به نام "g-recaptcha-response" دریافت میکنید. برای اینکه گوگل کاربر شما رو تایید کنه باید یک درخواست GET رو به همراه این اطلاعات به این آدرس از گوگل بفرستید.

URL: https://www.google.com/recaptcha/api/siteverify

secret

یک رشته مثل این: 6LeOkP8SAAAAAPFbyrtB_ikCrcp7dZa4znaMA821

response

مقدار "g-recaptcha-response"

remoteip

IP کاربری که فرم رو ارسال کرده

من این اطلاعات رو بدین شکل به گوگل فرستادم:

$secret_code = 'your secret code';
$response_string = $_POST['g-recaptcha-response'];
$ip = $_SERVER['REMOTE_ADDR'];
$url = 'https://www.google.com/recaptcha/api/siteverify?secret=';
url .= $secret_code.'&response=';
$url .= $response_string.'&remoteip=';
$url .= $ip;

این URL رو درخواست می­کنیم و گوگل نتیجه رو به صورت JSON به ما میده. در PHP به کمک تابع json_decode نتیجه رو در یک آرایه قرار می­دهیم.

$res = file_get_contents($url);   //send Request to Google
$res = json_decode($res,TRUE); //get Result from Google

و در آخر بررسی می­کنیم که مقدار success برابر با true یا false هست و بر حسب نیاز عملیات موردنظر خودمون رو انجام می­دهیم.

if($res['success'] == true){
       echo "human";
}else{
       echo "robot";
}