امنیت وب یکی از مهمترین دغدغه های طراحان وب بوده و هست و در این میان کد های امنیتی (captcha) برای جلوگیری از ارسال داده های نامعتبر و هرز نامه و متمایز کردن انسان ها از ربات ها یکی از بهترین روش ها بوده، هر چند تکنولوژی های جدید باعث شده که امنیت این کد ها هم کاهش پیدا کنه اما روش ها و ترفنتد هایی وجود داره که امنیت این کد رو بالا ببریم. در این پروژه ما از کپچا جدید گوگل بنام reCaptcha استفاده کردهایم. کپچا کادری است که حروف و اعداد بصورت نامنظم در کنار یکدیگر قرار گرفتهاند و کاربر باید آنها را به ترتیب نوشته شده در کادر دیگری وارد کند. این پروسه به دلیل شناسایی کاربران واقعی از روباتهای نرمافزاری صورت میگیرد. گوگل استفاده از چک باکس ساده را در دستور کار قرار داده است. برای استفاده از روش جدید کافی است کادری را که در جلوی عبارت «I'm not a robot» قرار گرفته، کلیک کرد. گوگل متد جدید شناسایی روباتهای نرمافزاری را «No Captcha reCapthcha» نام گذاری کرده است. شاید بسیاری سیاست گوگل را یک قدم رو به عقب بدانند. این کمپانی اخیرا موفق به توسعهی هوشمصنوعی شده که از طریق آن قادر است بدون نیاز به دخالت عامل انسانی، تمامی کپچاها را بصورت نرمافزاری تشخیص دهد.
واینی شِت، مدیر پروژهی reCaptcha با انتشار پستی در وبلاگ خود در مورد روش جدید گوگل چنین اظهار نظر کرده است: شاید API روش جدید که reCaptcha نام دارد بسیار ساده به نظر برسد، اما پشت پرده شرایط بگونهی دیگر و پیچیده است.
در روش جدید، رفتار کاربر قبل، بعد و در زمان نمایش چکباکس reCaptcha تحت نظر قرار میگیرد. در گجتهای موبایل نیز روش جدید بصورت تصویری نمایش داده میشود که کاربر باید از مجموع تصاویر نمایش داده شده در قسمت زیر، تصویر مشابه را یافته و روی آن کلیک کند.
قدم اول: وارد شدن به حساب کاربری گوگل
برای استفاده از این امکان گوگل شما باید یک حساب کاربری در گوگل داشته باشید و پس از ورود به حساب کاربری خود به آدرس https://www.google.com/recaptcha/admin رفته و در آنجا باید فرم زیر را پر کنید. در این فرم شما اسم و آدرس سایت خودتون رو مشخص میکنید. اگر قصد اجرای مثال را روی localhost دارید همان localhost را ثبت کنید.
قدم دوم: استفاده از 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";
}