Thứ Ba, 27 tháng 3, 2018

Sử dụng rePCAPTCHA để chống spam và các loại lạm dụng tự động trên website của bạn

reCAPTCHA bảo vệ bạn khỏi spam và các loại lạm dụng tự động khác nhau. Bài viết này hướng dẫn bạn đăng ký reCAPTCHA V2 (version 2) và cài đặt vào ứng dụng web trên 2 ngôn ngữ PHP và ASP.NET.


Bước 1: Truy cập địa chỉ https://www.google.com/recaptcha và click Get reCAPTCHA. Nếu bạn chưa đăng nhập tài khoản gmail thì đăng nhập để tiếp tục.

Bước 2: Trong form Register a new site bạn nhập tên của reCAPTCHA  tùy ý, chọn reCAPTCHA V2, điền danh sách các domain mà có thể sử dụng reCAPCHA này với mỗi domain nằm trên 1 dòng và check vào dòng Accept the reCAPTCHA Terms of Service. Cuối cùng click Register để đăng ký reCAPTCHA mới. (Xem hình minh họa bên dưới)

Lúc này bạn sẽ nhìn thấy 2 cặp khóa Site key  Secret key. 


Khóa Site key dùng để gọi dịch vụ reCAPTCHA trên trang web hoặc ứng dụng di động của bạn. (khóa này được phép công khai)


Khóa Secret key cho phép giao tiếp ứng dụng web phía backend của bạn và máy chủ reCAPTCHA để xác minh phản hồi của người dùng. (khóa này cần được giữ bí mật)

Bước 3: Các bạn bổ sung thẻ script và thẻ div sau vào trang của bạn theo mẫu dưới.

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Demo reCAPTCHA</title>
    <!-- 1. Khai báo thẻ script sau -->
    <script src="https://www.google.com/recaptcha/api.js?hl=vi" async defer></script>
</head>
<body>
    <form action="" method="post">
        <!-- 2. Thêm thẻ div sau vào form của bạn. Thay sitekey thành site key của bạn -->
        <div class="g-recaptcha" hl="" data-sitekey="sitekeycuaban"></div>
        <br>
        <input type="submit" value="Submit">
    </form>
 
  
</body>
</html>

Bạn nhớ thay sitekeycuaban thành site key bạn vừa nhận được nhé.

Kết quả

Hình ảnh sau khi chạy trang web




Bước 4:


4.1 Code C#

Trước tiên bạn cần cài đặt thêm gói Newtonsoft.Json  bằng lệnh install-package Newtonsoft.Json ở cửa sổ Package Manage Console hoặc cài trực tiếp từ giao diện Nuget Package Manager.


Sau đó bên bạn khai báo thêm 3 lệnh using Newtonsoft.Json.Linq; using System.Net; System.Collections.Specialized;

Bên action method bạn xử lý như mẫu sau:

        [HttpPost]
        public ActionResult Index(FormCollection frm)
        {
            string recaptcha_token = frm["g-recaptcha-response"];
            string responseInString = "";
            string url = "https://www.google.com/recaptcha/api/siteverify";
            using (var wb = new WebClient())
            {
                var data = new NameValueCollection();
                data["response"] = recaptcha_token;
                data["secret"] = "secretkeycuaban";
                var response = wb.UploadValues(url, "POST", data);
                responseInString = Encoding.UTF8.GetString(response);
            }
            dynamic result = JObject.Parse(responseInString);
            if(result.success == false)
            {
                // Báo lỗi "recaptcha khong hop le"     
            }
            else
            {
               // tiep tuc xu ly
            }
            return View();
        }


Bạn nhớ thay "secretkeycuaban" thành secrect key của bạn là ok.

Project demo ASP.NET bạn tải ở đây https://drive.google.com/open?id=1_rQfTBiDq6SmJ3Hx5sX63d0p-Clv4X87

4.2 Code PHP


if(isset($_POST['g-recaptcha-response']))
    {
          $recaptcha_token = $_POST['g-recaptcha-response'];
          $url = "https://www.google.com/recaptcha/api/siteverify";
          $data = array('response' => $recaptcha_token, 'secret' => 'secretkeycuaban');
          // use key 'http' even if you send the request to https://...
            $options = array(
                'http' => array(
                    'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
                    'method'  => 'POST',
                    'content' => http_build_query($data)
                )
            );
            $context  = stream_context_create($options);
            $responseInString = file_get_contents($url, false, $context);
            $result = json_decode($responseInString, true);
            if($result['success'] == true)
            {
               // xu ly
           
            }
            else
            {
               // bao loi sai recaptcha
            }
    }

Bạn nhớ thay "secretkeycuaban" thành secrect key của bạn là ok.


Nếu thay bài viết hữu ích nhờ like và share nhé. ^^


EmoticonEmoticon