C# 垃圾邮件过滤:从哪里开始
我已经创建了一个新的asp.net网站(web表单,c#),并希望它能够防止通过文本框发送垃圾邮件并添加到数据库中。有人对如何实现这一点有什么好的链接吗 谢谢我用ReCaptcha来做这个。 您可以从下载或使用安装C# 垃圾邮件过滤:从哪里开始,c#,asp.net,spam-prevention,C#,Asp.net,Spam Prevention,我已经创建了一个新的asp.net网站(web表单,c#),并希望它能够防止通过文本框发送垃圾邮件并添加到数据库中。有人对如何实现这一点有什么好的链接吗 谢谢我用ReCaptcha来做这个。 您可以从下载或使用安装 Install-Package recaptcha 通过包管理控制台执行的命令 public class NoCache : ActionFilterAttribute { public class CaptchaValidatorAttribute : ActionFil
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" />
}
如果你没有垃圾邮件,我就不会担心了 这就是说,如果你有它,你想知道你是什么样的垃圾邮件。假设您对有效输入有限制,那么根据模型验证输入应该可以防止大部分输入。如果任何东西都能验证,或者你出于某种原因不得不接受所有东西,你可以从一个蜜罐开始,这是一种简单、非侵入性的方法 要实现蜜罐,基本上需要添加一个字段,用CSS隐藏它,并在服务器端验证该字段是否为空。大多数垃圾邮件机器人会填写所有字段,这将识别什么时候自动提交了表单
如果你发现这在阻止你网站上的所有垃圾邮件方面是无效的,你需要看看哪种垃圾邮件正在通过,并找到一些可以阻止它的东西。作为最后一种手段,您可以使用诸如recaptcha之类的侵入性操作。CAPTCHA(as)的真正问题是,他们认为自己有罪,用户试图做坏事,这对用户有负面影响。我建议您使用for WordPress,并将其Javascript和PHP实现转换为您可以在项目中使用的东西。对终端用户来说,它不像验证码那么烦人,而且它在阻止我的WordPress博客上的自动垃圾邮件方面非常有效。进行ASP.NET/C转换应该没什么大不了的。我开始做一个,但我做的项目被取消了,所以我没有完成
当然,如果有人花5美元让一个坐在第三世界网吧的人在几十个网站上输入废话,这对手动垃圾邮件是没有帮助的。这也是许多其他反垃圾邮件系统的一个问题,包括验证码。这项活动主要是为了获取SEO目的的链接,因此筛选链接以进行审核或阻止它们被输入可以减少这项活动。@PhilPursglove-发布的内容正是如此。他既不使用WordPress也不使用PHP。已经有用C#写的解决方案了,为什么要给作者额外的工作,他可能无法完成的工作。@Ramhound-我知道我应该把这作为一个评论,因为有些人知道这一切都会投反对票。我在C#中看到的“解决方案”是对用户不友好的验证码解决方案。我试图提供一个可行的、更方便用户的替代方案,但我想这对一些人来说还不够好。像您这样的人正在使整个堆栈交换系统成为一种不友好的体验。
[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();
}