垃圾邮件过滤:从哪里开始
本文关键字:开始 过滤 | 更新日期: 2023-09-27 18:23:44
我创建了一个新的asp.net网站(web表单,c#),并希望它能安全地防止垃圾邮件通过文本框进入并添加到数据库中。关于如何实现这一点,有人有什么好的链接吗?
感谢
我使用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();
}
如果你没有垃圾邮件,我不会担心。
话虽如此,如果你确实有,你想知道你收到了什么样的垃圾邮件。假设您对有效输入有限制,那么根据模型验证输入应该可以防止大部分输入。如果任何东西都是有效的,或者你出于某种原因不得不接受所有东西,你可以从蜜罐开始,这是一种简单、非侵入性的方法。
要实现蜜罐,基本上需要添加一个字段,用CSS隐藏它,并在服务器端验证该字段为null。大多数垃圾邮件机器人填写所有字段,这将识别什么时候自动提交了表格。
如果你发现这在防止网站上的所有垃圾邮件方面无效,你需要看看是什么类型的垃圾邮件通过,并找到一些可以防止这种情况的方法。作为最后的手段,你可以采取一些侵入性的行动,比如重述。CAPTCHA的真正问题(正如Eric Lippert简洁地指出的那样)是他们认为有罪,认为用户试图做坏事,这对你的用户产生了负面影响。
我建议您使用WordPress的Growmap反垃圾邮件插件,并将其Javascript和PHP实现转换为您可以在项目中使用的东西。它不像CAPTCHA那样让最终用户讨厌,而且它在阻止我的WordPress博客上的自动垃圾邮件方面非常有效。进行ASP.NET/C#转换应该没什么大不了的。我开始做一个,但我正在做的项目被取消了,所以我没有完成。
当然,有人花5美元请坐在第三世界网吧的人在几十个网站上输入废话,这对手动垃圾邮件没有帮助。这也是许多其他反垃圾邮件系统的问题,包括CAPTCHA。这项活动主要是为了获得SEO目的的链接,因此筛选出进行审核的链接或阻止它们被输入可以减少这项活动。