在Mvc网络应用程序需要使用验证码?

时间:2012-01-07 13:09:27

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

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

   <%: 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();
        }

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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

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

其次,ReCAPTCHA是当今最常用的验证码实现之一。免费,开源,对大多数(而非全部)机器人而言相对有效(没有CAPTCHA是不可穿透的)。我已经使用了其他一些.Net recaptcha实现和MVCRecaptcha实际上是我唯一获得成功的一个 - 也许与我使用的DotNet版本有关?简而言之,它对我有用,而其他人则没有。