Day 2 - Using Google reCAPTCHA with ASP.NET Web Forms C#「我不是机器人」验证

=x= 🌵 CONTACT Page 寄信页的「我不是机器人」验证功能,後端实作。


Google reCAPTCHA 介绍 :

📌 Google reCAPTCHA 服务可用来判断是否为真人使用,保护网站免受欺诈活动、垃圾邮件和滥用。

  • 已停止服务的 V1 会由系统提供一个带有英数字的随机图片,并要你识别後输入文字内容。
  • V2 为一个勾选框或无勾选框(背景执行),会依网页浏览使用行为辨别,如有疑虑则会弹出九宫格图片要你选择符合描述的图片。
  • V3 则是完全不会要使用者进行任何需要证明是否不是机器人的行为,网页浏览时不会看到任何相关内容,仅会依行为传送一个 0 ~ 1.0 之间的分数给後台,分数越低越可能是机器人,後台则需设定分数判断逻辑进行对应行为,预设以 0.5 为区隔。
  • 👀 官网介绍连结 : What is reCAPTCHA ?
  • 👀 选用 V2 或 V3 可参考官网说明 : Should I use reCAPTCHA v2 or v3 ?


reCAPTCHA V2 实作 (勾选框) :

1. 注册使用 reCAPTCHA : https://www.google.com/recaptcha/admin/create

https://ithelp.ithome.com.tw/upload/images/20210916/20139487g1XbRJoH4l.jpg

https://ithelp.ithome.com.tw/upload/images/20210908/20139487eBGDoYklnU.jpg

  • 🌵 完成後跳转网页会产生一组公钥 (public_key) 跟私钥 (private_key)。

  • 👺 测试时不需要申请 Google Cloud Platform 上的 reCAPTCHA Enterprise 金钥,商用金钥会有计量计价规定,如果不小心因为被导引到该页面而申请了商用金钥,建议可以先删除,本人在把 code 推到 GitHub 备份时,收到 google 警告信才发现这件事(汗)。


2. Visual Studio > NuGet 套件管理员 > 管理方案的 NuGet 套件 > 安装 RecaptchaNet

https://ithelp.ithome.com.tw/upload/images/20210908/201394879kQFDYBjsJ.jpg


3. 在 web.config 中的 <configuration> 内加入以下程序码并填入公钥及私钥

<configuration>

<!-- Add code start -->
<appSettings>
    <!-- Your site key for your reCAPTCHA control -->
        <add key="RecaptchaSiteKey" value="这里填入步骤1.注册後取得之公钥" />
    <!-- Your secret key for your reCAPTCHA control -->
    <add key="RecaptchaSecretKey" value="这里填入步骤1.注册後取得之私钥" />
</appSettings>
<!-- Add code end -->

</configuration>


4. 在 .aspx 页面工具箱拉入控制项并确认上方的 <%@ Page %> 下有新增一行 code 以加入设定

<!-- 上方自动产生的设定 -->
<%@ Register Assembly="Recaptcha.Web" Namespace="Recaptcha.Web.UI.Controls" TagPrefix="cc1" %>

<!-- Render recaptcha API script (非必要,同页使用两个以上时才需要)-->
<cc1:RecaptchaApiScript ID="RecaptchaApiScript1" runat="server" />
<!-- Render recaptcha widget -->
<cc1:RecaptchaWidget ID="Recaptcha1" runat="server" RenderApiScript="False" />
  • 🧠 NuGet 成功安装後重开专案,工具箱搜寻 Recaptcha 就会出现控制项,记得 .aspx 页面要将画面切到"设计"模式,"原始档"模式可能会隐藏而找不到。

  • 🌵 执行网页需看到我不是机器人勾选框里面无红字错误,才是成功。


5. 网页後置程序码判断逻辑程序码 (可放在 Button_Click 事件中)

if (String.IsNullOrEmpty(Recaptcha1.Response)) {
    lblMessage.Visible = true;
    lblMessage.Text = "Captcha cannot be empty.";
}
else {
    var result = Recaptcha1.Verify();
    if (result.Success) {
        //此处可加入"我不是机器人验证"成功後要做的事

    }
    else {
        lblMessage.Text = "Error(s): ";

        foreach (var err in result.ErrorCodes) {
            lblMessage.Text = lblMessage.Text + err;
        }
    }
}


6. 渲染网页并确认验证框无任何红字,且点击後会出现绿色打勾,完成~

https://ithelp.ithome.com.tw/upload/images/20210908/20139487g0H21t7TKj.jpg



本日总结 :

📌 稍微说明一下为什麽最後会介绍这个写法,网路上可以查到的作法很多,比较混乱的是一开始试着查资源时,有可能查到的是旧的写法、JavaScript 作法、其它语言,或者那是 MVC 不是 Web Forms,对於还没有接触 MVC 的人,如果关键字搜寻一直查到 MVC 建议加入 Web Forms 关键字;而我是因为看不太懂 Google 官网提供的写法,於是从它建议的 Nuget 安装一路往回去看 GitHub 提供的范例,范例里相对 Google 有更完整的示范 code 可以看,多了些判断到底我跟着这样做可不可行,而不是复制贴上後,然後就没有然後了,只能呆在原地动弹不得,这是比较特别想讲的地方。


  • 明日将介绍如何制作寄信功能。

<<:  Day 10 : 机器学习大杂烩

>>:  DAY16 机器学习专案实作-员工离职预测(上)

01 - Homebrew - 套件管理工具

不同的应用程序都有不一样的安装方式,有的需要下载安装包,有些则是下指令安装,还有些可以藉由 App ...

[Python]如何Text to Speech: pyttsx3, gTTS

https://pythonprogramminglanguage.com/text-to-spee...

DAY25-EXCEL统计分析:共变数实例

有一位学生想知道每天读书时间与考试成绩之间的线性相关程度,所以蒐集了每次期中期末考的国英数自社的成绩...

[Day05] python 的第一个模型

写在前面 test for placeholder test for placeholder tes...

Day13 - 动态 新增/删除 Collection 项目(一)

延续上一篇的 ViewModel 结构 现在假设使用者提出要动态 新增/删除 Collection ...