Sử dụng Google reCAPTCHA trên website asp.net chống user SPAM

Việc sử dụng captcha trong các form website giúp chúng ta ngăn chặn các hành động spam trên trang web của chúng ta vd như việc auto click 1 tác vụ nào đó hay như việc user dùng các script tự động điền các giá trị vào form và submit khiến database của chúng ta bị flood. Sử dụng google recaptcha phiên bản mới của google giúp chúng ta giải quyết được vấn đề trên và hơn nữa user cũng không phải nhập những ký tự khó chịu hay như những loại captcha khó đỡ .

Sử dụng Google reCAPTCHA trên website asp.net chống user SPAM

Đơn giản hơn với google recaptcha user chỉ việc click xác minh lại:

Đơn giản hơn với google recaptcha user chỉ việc click xác minh lại:

Để có thể sử dụng google recaptcha các bạn cần có 1 tài khoản google vằ đăng ký Key của nó tại địa chỉ https://www.google.com/recaptcha . Click Get reCAPTCHA để nhận key.

Sử dụng Google reCAPTCHA trên website asp.net chống user SPAM

  • Mục label: Điền tên gọi tùy bạn
  • Mục Domains: Nhập tên miền webstite của bạn.

Sau khi Resgister xong bạn sẽ được cung cấp 2 loại key Site key và Serect key, các bạn lưu lại giá trị 2 key này:

Sử dụng Google reCAPTCHA trên website asp.net chống user SPAM

Site key: Sử dụng trong trang publish web của bạn và Serect key dùng để post lên server của google recaptcha xem user vừa tương tác có hợp lệ không.

Làm theo hướng dẫn Step 1 nhúng đoạn script <script src=‘https://www.google.com/recaptcha/api.js?hl=vi’></script>  vào trong tag Header của website bạn (Mình thêm tham số hl=vi để sử dụng ngôn ngữ tiếng việt, với tiếng anh bạn thay vi = en)

Đoạn <div class=“g-recaptcha” data-sitekey=“[Site_key]” id=“myReCaptcha” runat=“server”></div>  bạn nhúng vào nơi muốn hiển thị captcha, thay [Site_key] thành của bạn. (Mình thêm id = ‘myReCaptcha’runat = ‘server’ để sử lý code phía server asp.net)

Sử dụng Google reCAPTCHA trên website asp.net chống user SPAM
Thường để ở cuối mỗi form. Khi hiển thị nó sẽ như vậy

Khi user submit form , phía code server sẽ kiểm tra trên server của google recaptcha user vừa tương tác có hợp lệ hay không. Khi form của chúng ta postback về thì sẽ tự động có thêm tham số  request “g-recaptcha-response“, đây chính là đoạn mã token mà user đó vừa tương tác với captcha. Nếu đoạn mã này = rỗng tức là user chưa tích vào “tôi không phải là người máy

if (Request[“g-recaptcha-response”].ToString() == “”)
{
//Thông báo chưa tích xác nhận captcha
return;
}

Tiếp theo chúng ta sẽ check với server google recaptcha xem user đó đã được xác minh ” không phải người máy ” hay chưa. Để làm việc này chúng ta gửi GET hoặc POST lên địa chỉ https://www.google.com/recaptcha/api/siteverify với 3 tham số

  • secret : Mã số serect key site của bạn được cấp bên trên.
  • response: Token của user, chính là Request[“g-recaptcha-response”] ta nhận được khi user submit form.
  • remoteip : Địa chỉ IP của user ( Không cần thiết tham số này).

Nếu thành công server sẽ phản hồi lại chúng ta thông tin cấu trúc như sau. Chúng ta chỉ cần parse “success” giá trị là true hay false để biết kết quả.

{
  “success”: true,
  “challenge_ts”: “2016-05-21T04:23:37Z”,
  “hostname”: “localhost”
}

Đoạn code xác minh người dùng, thay [Serect_key] là Serect key của bạn

string url = String.Format(“https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}”, “[Serect_key]”, Request[“g-recaptcha-response”]);
System.Net.HttpWebRequest req = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
using (System.Net.WebResponse wResponse = req.GetResponse())
{
using (System.IO.StreamReader readStream = new System.IO.StreamReader(wResponse.GetResponseStream()))
{
string jsonResponse = readStream.ReadToEnd();
if (jsonResponse.IndexOf(“\”success\”: true,”) == 1)
{
//Thông báo chưa xác minh
return;
}
}
}
//Đến đây là đã pass qua captcha

Chú ý: Nếu bạn dùng ajax control toolkit thì mỗi khi submit form bạn phải có đoạn code này vào thì recaptcha mới hoạt động tiếp được.

ScriptManager.RegisterStartupScript(this, typeof(Page), “CaptchaReload”, “$.getScript(‘https://www.google.com/recaptcha/api.js’, function () {});”, true);

hainh