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

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

我已经创建了一个新的asp.net网站(web表单,c#),并希望它能够防止通过文本框发送垃圾邮件并添加到数据库中。有人对如何实现这一点有什么好的链接吗

谢谢

我用ReCaptcha来做这个。 您可以从下载或使用安装

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();
    }