【问题标题】:in Mvc web app need to use captcha?在 Mvc Web 应用程序中需要使用验证码吗?
【发布时间】:2012-01-07 13:09:26
【问题描述】:

我有需要使用验证码的 mvc 网络应用程序, 我这样做就像添加一个我从 codeplex 获得的 dll 但是 在 register.aspx 页面上,我添加了如下代码,这给了我验证码

   <%: CaptchaMVC.HtmlHelpers.CaptchaHelper.Captcha(Html,"Refresh","Input Symbols",5) %>

以及 AccountController.cs 中的代码:

[HttpPost]
        public ActionResult NotAttribute()
        {

            if (this.IsCaptchaVerify("Captcha is not valid"))
            {
                TempData["Message"] = "Captcha is valid";
                return View();
            }

            TempData["Message"] = "Captcha is not valid";
            return View();
        }


        [HttpPost]
        [CaptchaVerify("Captcha is not valid")]
        public ActionResult UseAttribute()
        {
            if (ModelState.IsValid)
            {
                TempData["Message"] = "Captcha is valid";
                return View();
            }
            TempData["Message"] = "Captcha is not valid";
            return View();
        }

但是在点击注册按钮后它不能像调试模式一样正常工作,它无法点击这些方法中的任何一个 为什么?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 captcha


    【解决方案1】:

    如果现在还不算太晚,我可以建议 CAPTCHA 的替代品,原因如下:

    http://www.codinghorror.com/blog/2008/03/captcha-is-dead-long-live-captcha.html

    如果你被卖了,这是我使用的一种简单技术,称为蜜罐,

    您可以将其添加到您的视图中

    @Html.TextBox("NameItWhateverYouWant", null, new {style="display:none"})
    

    现在您的表单上有一个隐藏字段,然后在您的控制器中,

     bool botAttack = Request.Params.AllKeys.Contains("NameItWhateverYouWant")
          && !String.IsNullOrEmpty(Request.Params["NameItWhateverYouWant"]);
    

    基本上只有攻击您的注册过程的机器人会填写此字段。

    我有没有提到这也能带来更好的用户体验?

    这是启发解决方案的博客文章:

    http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx

    【讨论】:

    • 可以对机器人进行编程以忽略隐藏字段(即使它们仅被 css 隐藏)。小心。
    • 您认为普通用户如何填写隐藏字段?使用 FireBug?
    【解决方案2】:

    您可以使用 Recaptcha for .NET (http://recaptchanet.codeplex.com) 为您的 MVC .NET 项目使用强大且安全的验证码解决方案,只需几行代码。

    【讨论】:

      【解决方案3】:

      我一直在寻找类似的解决方案,现在有一个适用于 ASP.NET MVC 的 HoneyPot。你可以在这里找到它:

      http://nuget.org/packages/SimpleHoneypot.MVC

      【讨论】:

        【解决方案4】:

        好的,既然 SO 不允许我发布我的完整回复,我会在这里发布...

        首先,我不相信蜜罐方法是有效的,因为机器人很容易识别哪些字段是隐藏的,正如 gdoron 正确指出的那样。

        其次,ReCAPTCHA 是当今可用的验证码实现之一,即使不是最常用的验证码。免费,开源,对大多数(不是所有)机器人相对有效(没有验证码是不可理解的)。我使用了其他一些.Net recaptcha 实现,而 MVCRecaptcha 实际上是我唯一成功的实现——也许与我使用的 DotNet 版本有关?简而言之,它对我有用,而其他人则没有。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-08
          • 2012-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多