我创建了一个新的asp.net网站(网络表单,c#),并希望通过文本框保护垃圾邮件并将其添加到数据库中。有没有人就如何实现这个有任何良好的联系?
由于
答案 0 :(得分:3)
我使用ReCaptcha。 您可以从nuget下载或使用
安装Install-Package recaptcha
命令通过包管理控制台
public class NoCache : ActionFilterAttribute
{
public class CaptchaValidatorAttribute : ActionFilterAttribute
{
private const string CHALLENGE_FIELD_KEY = "recaptcha_challenge_field";
private const string RESPONSE_FIELD_KEY = "recaptcha_response_field";
private const string CAPTCHA_MODEL_KEY = "Captcha";
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var captchaChallengeValue = filterContext.HttpContext.Request.Form[CHALLENGE_FIELD_KEY];
var captchaResponseValue = filterContext.HttpContext.Request.Form[RESPONSE_FIELD_KEY];
var captchaValidtor = new Recaptcha.RecaptchaValidator
{
PrivateKey = "key",
RemoteIP = filterContext.HttpContext.Request.UserHostAddress,
Challenge = captchaChallengeValue,
Response = captchaResponseValue
};
var recaptchaResponse = captchaValidtor.Validate();
if (!recaptchaResponse.IsValid)
{
filterContext.Controller
.ViewData.ModelState
.AddModelError(
CAPTCHA_MODEL_KEY,
"Entered text is invalid");
}
base.OnActionExecuting(filterContext);
}
}
public static class CaptchaExtensions
{
public static string GenerateCaptcha(this HtmlHelper helper)
{
var captchaControl = new Recaptcha.RecaptchaControl
{
ID = "recaptcha",
Theme = "white",
PublicKey = "key",
PrivateKey = "key"
};
var htmlWriter = new HtmlTextWriter(new StringWriter());
captchaControl.RenderControl(htmlWriter);
return htmlWriter.InnerWriter.ToString();
}
}
比你可以使用
@using (Html.BeginForm("activate_user", , FormMethod.Post))
{
@Html.HiddenFor(x => x.Email)
<div class="captcha">
@Html.Raw(@Html.GenerateCaptcha())
<div style="text-align:center; margin-left:-25px;">
@Html.ValidationMessage("Captcha")
</div>
</div>
<input type="submit" class="signUpButton active activation" value="Activate" />
}
在控制器中:
[ActionName("activate_user")]
[CaptchaValidator]
[HttpPost]
public ActionResult ActivateUser(string email)
{
if (ModelState.IsValid && !string.IsNullOrEmpty(email))
{
FormsAuthentication.SetAuthCookie(email, false);
Repository.ActivateUser(email);
}
return View();
}
答案 1 :(得分:3)
如果您没有垃圾邮件,我不会担心。
话虽这么说,但如果你拥有它,你想知道你得到了什么样的垃圾邮件。假设您对有效输入有限制,则根据模型验证输入应该可以防止大部分输入。如果几乎任何有效的东西,或者你必须出于某种原因接受一切,你可以从蜜罐开始,这是一种简单的,非侵入性的方法。
要实现一个蜜罐,你基本上添加一个字段,用CSS隐藏它,并在服务器端验证该字段是否为空。大多数垃圾邮件机器人会填写所有字段,这将确定何时自动提交表单。
如果您发现这对于阻止您网站上的所有垃圾邮件无效,您需要查看正在通过哪种垃圾邮件并找到阻止该垃圾邮件的内容。作为最后的手段,您可以转向侵入性操作,例如recaptcha。 CAPTCHA的真正问题(如Eric Lippert's succinctly states it)是他们认为有罪,用户试图做坏事,这会对用户产生负面影响。
答案 2 :(得分:-3)
我建议您将Growmap Anti-Spam plugin用于WordPress,并将其Javascript和PHP实现转换为您可以在项目中使用的内容。对于最终用户而言,它并不像CAPTCHA那样烦人,而且在我的WordPress博客上停止自动垃圾邮件方面非常有效。执行ASP.NET / C#转换应该不是什么大问题。我开始上一个,但我正在做的项目被取消,所以我没有完成它。
当然,如果有人为坐在第三世界网吧的人在几十个网站上输入废话支付5美元,那么手动垃圾邮件将无济于事。对于包括CAPTCHA在内的许多其他反垃圾邮件系统而言,这也是一个问题。此活动主要是为了获取用于搜索引擎优化目的的链接,因此筛选出适度的链接或阻止它们被输入可以减少此活动。