我有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();
}
但是在点击注册按钮后它也没有像在调试模式下那样正常工作,它无法点击这些方法中的任何一个 为什么呢?
答案 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"]);
基本上只有一个机器人攻击你的注册过程就会填满这个领域。
我是否提到过这会带来更好的用户体验?
以下是启发解决方案的博文:
答案 1 :(得分:1)
您可以使用Recaptcha for .NET(http://recaptchanet.codeplex.com)为您的MVC .NET项目使用强大而安全的验证码解决方案,只需几行代码。
答案 2 :(得分:0)
我正在寻找类似的解决方案,现在有一个用于ASP.NET MVC的HoneyPot。你可以在这里找到它:
答案 3 :(得分:0)
好的,所以既然SO不允许我发布我的完整回复,我会在这里发布...
首先,我不相信蜜罐方法是有效的,因为机器人很容易识别隐藏哪些字段,正如gdoron正确指出的那样。
其次,ReCAPTCHA是当今最常用的验证码实现之一。免费,开源,对大多数(而非全部)机器人而言相对有效(没有CAPTCHA是不可穿透的)。我已经使用了其他一些.Net recaptcha实现和MVCRecaptcha实际上是我唯一获得成功的一个 - 也许与我使用的DotNet版本有关?简而言之,它对我有用,而其他人则没有。