【问题标题】:Cannot disable ASP.Net webforms button with jQuery / reCaptcha无法使用 jQuery / reCaptcha 禁用 ASP.Net 网络表单按钮
【发布时间】:2022-01-12 21:40:09
【问题描述】:

我的 ASP.net 网络表单网站不断收到垃圾邮件。

我在网站上放置了一个 Google reCaptcha V2 控件,但由于提交按钮始终处于启用状态,我无法让它工作。这是我的 .ascx 代码(它是每个页面上的注册页脚):

<script>
    $(document).ready(
        function () {
            $('#Button1').prop("disabled", true);
        }
    );
</script>

<script type="text/javascript">
    function recaptcha_callback() {
        $('#Button1').prop("disbled", false);
    }
</script>

这里是验证码和按钮:

<div class="g-recaptcha" data-callback="recaptcha_callback" 
    data-sitekey="NOTPOSTKEYHERE"></div>

<asp:Button class="btn btn-primary" ID="Button1" runat="server"
    CausesValidation="False" Text="Go" OnClientClick="Confirm();" 
    OnClick="Button1_Click" />

jQuery 似乎什么都不做。我真的只是希望它禁用提交按钮,直到检查 reCaptcha。我完全不相信这会击败垃圾邮件程序,因为无论我做什么,它们都会以某种方式通过。我也添加了一个蜜罐,但我什至无法做到这一点,因为 reCaptcha 不会启用和禁用按钮。

我尝试将 disabled="disabled" 添加到 asp:Button 标记中,但它永远不会被覆盖。周围 div 之一中的 .css 类可能不会让我覆盖该属性,但我不知道如何将“!重要”与禁用的属性一起使用。

我也尝试在 ascx.cs 代码中执行此操作,但是一旦代码到达后端,表单就已提交。没关系,但是如果用户提交时没有 reCaptcha,我不知道它是否是真实用户。

任何帮助表示赞赏。

【问题讨论】:

  • "disabled" 在回调中拼写错误。
  • 让我猜猜:您使用的是“母版页”吗?如果是这样,按钮的客户端 ID 将与服务器端 ID 不同。您需要将按钮的the ClientIDMode property 设置为Static
  • 天啊,这工作@RichardDeeming !可悲的是,这些没有:` document.getElementById("Footer$Button1").disabled = true; document.getElementById("Footer_Button1").disabled = true;`
  • 使用浏览器中的“查看源代码”或“检查元素”选项来查看您尝试修改的控件的客户端 ID。

标签: jquery css asp.net recaptcha


【解决方案1】:

重新验证码是一个多步骤过程,听起来您只是在实施前端。正如@wazz 指出的那样,您在前端实现中也存在拼写错误,但是如果没有后端检查是否实际解决了重新验证码,您就会遇到问题。

这个过程有点像这样:

  1. 显示重新验证码以在您的前端解决(勾选框、视觉挑战等...)
  2. Google 为您的前端提供一个用于重新验证码解决的 ID
  3. 您将 ID 与表单的其余部分一起发送到后端
  4. 您的后端要求 Google 检查 ID
  5. Google 说它是很好的解决方案还是可能是机器人
  6. 您决定如何处理重新验证码结果,在您的情况下,删除帖子并归咎于连接错误或其他原因,这样机器人制造商就不会得到太多线索

对于免费版本,它几乎只是“这可能是一个机器人”或“这可能不是一个机器人”。在企业版中,如果您希望事物不可见且无摩擦,则无需勾选框或视觉挑战即可放置重新验证码。

您每月可以免费获得 100 万次重新验证码 Enterprise 调用,从而获得更精细的回报,除非您运行的是一个大型平台,否则您将保持在阈值以下。它将给出像访客一样的机器人在 0 到 1 的范围内的可能性(因此值 11 个小数点),以及它为什么这么认为的一般原因代码。可能对您的使用来说有点过分,但您可以做一些事情,例如闲置机器人或在分数太低时将它们发送到虚假页面,或者通过电子邮件/短信和其他很酷的功能利用 2FA 功能来阻止机器人,同时允许合法访问者。

【讨论】:

  • 谢谢!实际上,我确实有后端代码,并且可以成功处理后端的 reCaptcha。问题是拼写错误(Javascript 总是默默地失败)以及导致 .ascx 歧义的母版页。感谢您的解释,因为它让我更好地理解。
猜你喜欢
  • 2011-05-25
  • 2011-02-23
  • 1970-01-01
  • 2010-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
相关资源
最近更新 更多