"> مقاله ی آموزش معتبرسازی reCaptcha اختصاصی

آموزش ساخت و معتبرسازی reCaptcha اختصاصی + آموزش ویدیویی

reCaptcha

امروز در این مقاله میخوام بریم سراغ یکی از امنیتی ترین کپچاها (Captcha ) که میتوانیدسطح امنیتی ورود،کنترل کاربران و تشخیص ربات در سایت برای ثبت نام و وارد شدند تشخیص بدیدو سطح امنیتی را بالا برید اصطلاحا معروفه به reCaptcha که محصول شرکت گوگل است و اعتبار سنجی کاربر توسط گوگل و reCaptcha که ارائه داده انجام میشه در ادامه باهم یادمیگیریم چگونه یک کپچا از طرف گوگل فعال سازی کنیم و در پروژه های خود استفاده کنیم.از آموزش ویدیویی نیز امید وارم لذت ببرید.

معرفی

reCaptcha یک ابزار بسیار مفید Captcha برای تایید اینکه بیینده ی سایتتون یک انسان است , میباشد. این به طور عمده برای جلوگیری از اسپم میباشد.

این هم یک نمونه از reCaptcha :

معتبرسازی reCaptcha اختصاصیتعداد زیادی Solution های اختصاصی Captcha در CodeProject موجود است اما reCaptcha تعدادی مزایا دارد :

توسط google نگهداری میشود – پس اگر تصویر captcha به خطر بیافتد , آپدیتی از google مشکل را حل میکند بدون آنکه نیاز باشد برنامه نویس کاری انجام دهد.

سرور شما نیازی به ذخیره ی زمان پردازش تولید تصویر ندارد.

reCaptcha گزینه صوتی نیز برای کاربران نابینا به همراه دارد.

این مزایا همگی خوب هستند مگر اینکه طرفدار google نباشید.

پس زمینه

هنگامی که بر روی یک ویژگی جدید برای پروژه ام کار میکردم مقداری مشکل با اجرای reCaptcha داشتم. یک کنترل سرور .Net ارائه شده است , هرچند من نتوانستم Script سمت مشتری را برای برداشتن قالبی که مد نظر داشتم پیاده کنم , پس تصمیم گرفتم که آن را پیاده سازی و خودم آن را اجرا کنم.

استفاده از کد

یادداشت – reCaptcha از شما میخواهد تا کلید های رمزنگاری بسازید. از آن ها برای بالا بردن امنیت استفاده میشود و به راحتی نیز ساخته میشوند. تنها کافیست که بر روی لینک زیر کلیک کنید و سپس کلید هایتان را به web.config قسمت demo اضافه کنید.

https://www.google.com/recaptcha/admin/create

ابتدا باید سمت مشتری را راه اندازی کنیم.

شامل کتابخانه ی reCaptcha client در header صفحه تان است:

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

 

سپس کد زیر را اضافه کنید:

<div id="recaptcha_div"></div>
<script type="text/javascript">
Recaptcha.create("<%=Config.PublicKey %>",
"recaptcha_div", {
lang: "<%=LanguageCode %>",
theme: "clean",
callback: Recaptcha.focus_response_field
});
</script>

 

همانطور که میبینید دو مقدار را سرور میگیریم و آنها را مستقیما درون مشتری تزریق میکنیم:

۱  Config.PublicKey ( این کلید عمومی reCaptcha است – اگر ندارید به لینک زیر سر بزنید تا یکی بگیرید)

https://www.google.com/recaptcha/admin/create

۲  زبان کد

اگر میخواهید که قالب استفاده شده توسط captcha را تغییر دهید میتوانید به لینک زیر سر بزنید :

http://code.google.com/apis/recaptcha/docs/customization.html

سپس کد سمت سرور

قسمت دانلود این مقاله شامل تمام کد های سمت سرور است, در اینجا من تنها قسمت های مهم را مینویسم.

یک معتبر کننده ی اختصاصی به صفحه تان اضافه کنید و کد زیر را به عنوان متد معتبرسازی سرور ارائه دهید :

// our custom server validator's validation method
protected void OnRecaptchaValidate(object sender, ServerValidateEventArgs e)
{
string challenge = Request.Form["recaptcha_challenge_field"];
string clientResponse = Request.Form["recaptcha_response_field"];

reCaptchaValidation validator =
new reCaptchaValidation(
Config.Proxy,       // if you don't require a proxy to access
// the internet, just comment out this line.
Request.UserHostAddress,
Config.PrivateKey,
challenge,
clientResponse);

e.IsValid = validator.Validate();

if (!e.IsValid)
{
if (validator.IsErrored)
{
// oh dear, something not right

if (validator.Exception != null)        // an exception occurred while
// trying to validate
Outcome.Text = validator.Exception.ToString();
else if (validator.ValidationResult != null)  // the validation web service
// returned an error code
// (other than an invalid captcha solution)
Outcome.Text = "web service error: " + validator.ValidationResult;
}
}
}
معتبر کننده در یک کلاس reCaptchaValidation قرار دارد :

public class reCaptchaValidation
{
private string challenge, response, privateKey, ip;
private IWebProxy proxy;

public reCaptchaValidation(string clientIP, string privateKey,
string challenge, string response) : this(null, clientIP, privateKey,
challenge, response) { }

public reCaptchaValidation(IWebProxy proxy, string clientIP,
string privateKey, string challenge, string response)
{
this.proxy = proxy;
this.ip = clientIP;
this.privateKey = privateKey;
this.challenge = challenge;
this.response = response;
}

private bool _errored;
public bool IsErrored
{
get
{
return _errored;
}
}

private Exception _ex;
public Exception Exception
{
get
{
return _ex;
}
}

private string _vr;
public string ValidationResult
{
get
{
return _vr;
}
}

public bool Validate()
{
try
{
string post = "privatekey=" + HttpUtility.UrlEncode(privateKey) +
"&remoteip=" + HttpUtility.UrlEncode(ip) + "&challenge=" +
HttpUtility.UrlEncode(challenge) + "&response=" +
HttpUtility.UrlEncode(response);

WebRequest wr = HttpWebRequest.Create
("http://www.google.com/recaptcha/api/verify");
wr.Method = "POST";

if (proxy != null)
wr.Proxy = proxy;

wr.ContentLength = post.Length;
wr.ContentType = "application/x-www-form-urlencoded";
using (StreamWriter sw = new StreamWriter(wr.GetRequestStream()))
{
sw.Write(post);
sw.Close();
}

HttpWebResponse resp = (HttpWebResponse)wr.GetResponse();
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
string valid = sr.ReadLine();
if (valid != null)
{
if (valid.ToLower().Trim() == "false")
{
string errorcode = sr.ReadLine();

if (errorcode != null)
{
if (errorcode.ToLower().Trim() != "incorrect-captcha-sol")
{
_vr = errorcode;
_errored = true;
return false;
}
}
}

return (valid.ToLower().Trim() == "true");
}
else _vr = "empty web service response";

sr.Close();
return false;
}
}
catch (Exception caught)
{
_errored = true;
_ex = caught;
}
return false;
}
}

 

این کلاس پاسخ گویی به اعتبارات captcha ی کاربر را با پست کردن تمام اطلاعات مورد نیاز به معتبرسازی وب سرویس google recaptcha کنترل میکند.

من برنامه ی وب demo را تا جایی که امکان داشت آسان ساخته ام – تنها مقادیر مورد نیاز را در web.config وارد کنید.

داریوش فرخی

داریوش فرخی هستم از سال 92 شروع به یادگیری برنامه نویسی و از سال 93 در بخش برنامه نویسی و تولید محتوای سایت mspsoft.com مشغول هستم. فعالیتم نیز بیشتر در زمینه های برنامه نویسی با سی شارپ و asp.net بوده است. اوقات فراغتم را هم غالبا با تماشای فیلم یا بازی های کامپیوتری پر میکنم .

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.