【问题标题】:Spam filtering: where do I start垃圾邮件过滤:我从哪里开始
【发布时间】:2012-02-28 02:12:27
【问题描述】:

我创建了一个新的 asp.net 站点(Web 表单,c#),并希望确保它能够防止垃圾邮件通过文本框进入数据库。有没有人有任何关于如何实现这个的好链接?

谢谢

【问题讨论】:

    标签: c# asp.net spam-prevention


    【解决方案1】:

    我为此使用 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();
        }
    

    【讨论】:

    • @PhilPursglove - 发布的内容正是如此。
    【解决方案2】:

    如果您没有垃圾邮件,我不会担心。

    话虽如此,如果你确实有它,你想知道你收到了什么样的垃圾邮件。假设您对有效输入有限制,则根据模型验证输入应该可以防止大部分情况发生。如果几乎任何事情都可以验证,或者您出于某种原因必须接受所有事情,您可以从蜜罐开始,这是一种简单、非侵入性的方法。

    要实现一个蜜罐,你基本上是添加一个字段,用 CSS 隐藏它,并在服务器端验证该字段是否为空。大多数垃圾邮件机器人填写所有字段,这将识别自动提交表单的时间。

    如果您发现这在阻止您网站上的所有垃圾邮件方面无效,您需要查看正在通过的垃圾邮件类型,并找到可以阻止这种情况的方法。作为最后的手段,您可以转向侵入性操作,例如 recaptcha。验证码(如Eric Lippert's succinctly states it)的真正问题是他们假设用户有罪,用户试图做坏事,这对您的用户有负面影响。

    【讨论】:

      【解决方案3】:

      我建议您使用 WordPress 的 Growmap Anti-Spam plugin 并将其 Javascript 和 PHP 实现转换为您可以在项目中使用的东西。对于最终用户来说,它不像 CAPTCHA 那样烦人,而且它在阻止我的 WordPress 博客上的自动垃圾邮件方面非常有效。进行 ASP.NET/C# 转换应该没什么大不了的。我开始了一个,但我正在做的项目被取消了,所以我没有完成它。

      当然,人工发送垃圾邮件无济于事,因为有人花 5 美元让坐在第三世界网吧的人在几十个网站上胡言乱语。这也是许多其他反垃圾邮件系统(包括 CAPTCHA)的问题。此活动主要是为了获取用于 SEO 目的的链接,因此筛选链接以进行审核或阻止它们被输入可以减少此活动。

      【讨论】:

      • 他既没有使用 WordPress 也没有使用 PHP。已经有用 C# 编写的解决方案,为什么要让作者做额外的工作,他可能实际上做不到的工作。
      • @Ramhound - 我知道我应该把它作为评论,因为一些无所不知的人会否决它。我在 C# 中看到的“解决方案”是用户不友好的 CAPTCHA 解决方案。我试图提供一个可行且对用户更友好的替代方案,但我想这对某些人来说还不够好。像你这样的人正在让整个堆栈交换系统成为一种不友好的体验。
      猜你喜欢
      • 2014-09-17
      • 2010-09-21
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 2011-09-18
      • 2019-09-19
      相关资源
      最近更新 更多