پیاده سازی Google reCAPTCHA در MVC
سه شنبه 4 آبان 1395در این مقاله، ما با نحوه پیاده سازی reCAPTCHA در ASP.Net آشنا خواهیم شد . reCAPTCHA یک سرویس رایگان است که توسط گوگل ارائه شده است و وظیفه آن محافظت از سایت در برابر سو استفاده و spam است .
معرفی :
spam و سوء استفاده ها از سایت یکی از مشکلاتی است که webmasterها و دارندگان سایت با آن مواجه میشوند . معمولا این کار توسط رباتی بصورت خودکار انجام میشود ، بدین صورت که از رفتار انسان ها تقلید کرده و درخواست هایی رابصورت مکرر برای websiteها ارسال میکند .
Google reCAPTCHA نیز برای جلوگیری کردن و حل مشکل بالا ارائه شد. این یک سرویس است که توسط گوگل ارائه شد .
کجا شروع به پیاده سازی Google reCAPTCHA میکنیم ؟
برای شروع پیاده سازی Google reCAPTCHA ، ابتدا باید در Google ثبت نام کنیم . به این سایت بروید . ابتدا با حساب کاربری خود وارد شوید سپس بر روی دکمه Get reCAPTCHA ، که ما را به صفحه زیر هدایت خواهد کرد ، کلیک کنید :
فیلد های مربوطه را پر کرده و Register را بزنید :
صفحه بالا Site key را به ما میدهد ،Secret key و یکسری اطلاعات دیگر ، که برای پیاده سازی reCAPTCHA در سایت ما مورد نیاز است . هر دو کلید برای پیاده سازی مهم هستند .
پیاده سازی Google reCAPTCHA در ASP.Net MVC :
برای این مقاله ، ما یک صفحه login ایجاد کردیم که Google reCAPTCHA را در این صفحه پیاده سازی خواهیم کرد .
در زیر تکه کدی را مشاهده میکنید که برای ساخت صفحه بالا مورد نیاز است :
@{ ViewBag.Title = "Google reCaptcha"; } <script src="https://www.google.com/recaptcha/api.js" async defer></script> <h2>Google reCaptcha</h2> @using (Html.BeginForm("GoogleReCaptcha", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() <h4>Please login - Google reCaptcha test</h4> <hr /> <div class="form-group"> <label class="col-md-2 control-label">Username: </label> <div class="col-md-10"> <input type="text" placeholder="Username" name="UserName" class="form-control" /> </div> </div> <div class="form-group"> <label class="col-md-2 control-label">Password</label> <div class="col-md-10"> <input type="password" placeholder="Password" name="Password" class="form-control" /> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="checkbox"> <label><input type="checkbox" name="RememberMe" />Remember me</label> </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="g-recaptcha" data-sitekey="6LedEiITAAAAAIJojg1rb4H7_HwL0QJGXD1KLqq-"></div> <span class="text-danger">@ViewBag.CaptchaErrorMessage </span> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Log in" class="btn btn-default" /> </div> </div> }
توجه داشته باشید که کدهای italic مهم میباشد و با Google reCAPTCHA در ارتباط است . آدرس فایلهای js. را در بالای کدها قرار میدهیم .
ایجاد action methodها برای Google reCAPTCHA در ASP.NET MVC :
ما در Controller خود نیاز به دو action method داریم اولی برای httpGet و دیگری برای HttpPost .
نام آن را ()GoogleReCaptcha میگذاریم که اولی دارای کدهای ساده ایست که view بالا را نیز بازمیگرداند .
using Newtonsoft.Json; using System.Collections.Generic; using System.IO; using System.Net; using System.Web.Mvc; namespace WebApplication1.Controllers { public class HomeController : Controller { public ActionResult GoogleReCaptcha() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult GoogleReCaptcha(FormCollection form) { string urlToPost = "https://www.google.com/recaptcha/api/siteverify"; string secretKey = "secret-key-from-2nd-image-above"; // change this string gRecaptchaResponse = form["g-recaptcha-response"]; var postData = "secret=" + secretKey + "&response=" + gRecaptchaResponse; // send post data HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlToPost); request.Method = "POST"; request.ContentLength = postData.Length; request.ContentType = "application/x-www-form-urlencoded"; using (var streamWriter = new StreamWriter(request.GetRequestStream())) { streamWriter.Write(postData); } // receive the response now string result = string.Empty; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (var reader = new StreamReader(response.GetResponseStream())) { result = reader.ReadToEnd(); } } // validate the response from Google reCaptcha var captChaesponse = JsonConvert.DeserializeObject<reCaptchaResponse>(result); if (!captChaesponse.Success) { ViewBag.CaptchaErrorMessage = "Sorry, please validate the reCAPTCHA"; return View(); } // go ahead and write code to validate username password against database return View(); } private class reCaptchaResponse { [JsonProperty("success")] public bool Success { get; set; } [JsonProperty("challenge_ts")] public string ValidatedDateTime { get; set; } [JsonProperty("hostname")] public string HostName { get; set; } [JsonProperty("error-codes")] public List<string> ErrorCodes { get; set; } } } }
دومین action method زمانی اجرا میشود که کاربر روی log in کلیک کند و این متد کارهای زیر را انجام میدهد :
• ما تعدادی متغیر string ، برای نگهداری از url ، SecretKey ، Captch response تعریف میکنیم .
• ما WebRequest را در URl Provider ایجاد میکنیم .
• تنظیم مقادیر حیاتی مانند method, ContentTye و ... و ارسال مقادیر به url .
• بعد از این ما با استفاده از HttpWebResponse ، پاسخی را دریافت میکنیم .
• چون این پاسخ در فرمت JSON است ما آن را به کلاس DeSerialized ، reCaptchaResponse میکنیم .
• اگه پاسخ مقدار false را داشت ، ما یک پیام خطا را در ViewData مینویسیم و به View باز میگردانیم .
زمانی که تمامی کدها تنظیم شدند ، زمان آن است که برنامه را اجرا کنید و تست کنید :
توجه داشته باشید که اگر ما برنامه را در محیط development اجرایش کنیم ، یک پیام در زیر reCAPTCHA نمایش داده خواهد شد ، مبنی بر اینکه در localhost اجرا میشود .
نتیجه گیری :
spam و سوء استفاده ها از سایت یکی از مشکلاتی است که webmasterها و دارندگان سایت با آن مواجه میشوند البته سرویس های رایگان بسیاری برای کمک به WebMasterها و حل این مشکل وجود دارد . این سرویس ها به ما کمک میکند که سایت را از کاربران غیر واقعی تمیز نگه داریم .
آموزش asp.net mvc
- ASP.net MVC
- 2k بازدید
- 7 تشکر