垃圾邮件过滤:从哪里开始

本文关键字:开始 过滤 | 更新日期: 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目的的链接,因此筛选出进行审核的链接或阻止它们被输入可以减少这项活动。