スパムフィルタリング:どこから始めますか

私は、新しいasp.netサイト(Webフォーム、C#)を作成し、テキストボックスを経由してデータベースに追加されるスパムに対して安全になるようにしています。誰もこれを実装する方法についての良いリンクを持っていますか?

ありがとう

2

3 答え

あなたがスパムを持っていないなら、私はそれについて心配しないでしょう。

つまり、もしあなたがそれを持っていれば、どんな種類の迷惑メールが流行っているのかを知りたいのです。モデルに対する入力を検証すると、有効な入力に制限があると仮定して、ほとんどのモデルがそれを防ぐことができます。妥当なものがあれば、あるいは何らかの理由ですべてを受け入れる必要がある場合は、ハニーポットから始めることができます。これはシンプルで非侵入的な方法です。

ハニーポットを実装するには、基本的にフィールドを追加し、CSSで非表示にして、そのフィールドがサーバー側でnullであることを検証します。ほとんどのスパムボットはすべてのフィールドに記入し、自動化されたものがフォームを送信したときを特定します。

これを無効にしてサイトのすべてのスパムを防ぎたい場合は、どのような種類のスパムが通過しているのかを確認し、そのスパムを防ぐものを見つける必要があります。最後の手段として、recaptchaなどの侵入行為に移行することができます。 CAPTCHAの本当の問題(エリック・リッペルト氏は、罪悪感を抱くこと、ユーザーが何か悪いことをしようとしていること、そしてそれがユーザーに悪影響を及ぼしていることを簡潔に述べています。

WordPressの Growmap Anti-Spamプラグインを使用して、 JavascriptとPHPの実装をプロジェクトで使用することができます。エンドユーザーにとってはCAPTCHAほど面倒ではなく、WordPressのブログで自動化されたスパムを阻止するのに非常に効果的です。 ASP.NET/C#変換を行うのは大したことではありません。私は1つで始まったが、私がそれをやっていたプロジェクトはキャンセルされたので、私は完了しなかった。

もちろん、手作業によるスパム対策では、3番目の世界のインターネットカフェに座って何十というサイトにナンセンスを入力する誰かのために5ドルを支払うことはできません。これは、CAPTCHAを含む他の多くのスパム対策システムにとっても問題です。この活動は主にSEOの目的のためのリンクを得るために行われます。

3
追加された
彼はWordPressもPHPも使用していません。 C#で書かれたソリューションはすでにありますが、なぜ著者が余分な仕事をしたのか、彼は実際にはうまくいかないかもしれません。
追加された 著者 Security Hound,
@Ramhound - 私はこれをコメントにしておくべきであることは知っていました。私がC#で見た「解決策」は、ユーザーに優しいCAPTCHAソリューションです。私は実行可能でよりユーザーフレンドリーな選択肢を提供しようとしていたが、それはいくつかの人々のために十分ではないと思う。あなたのような人々はスタック交換システム全体を不愉快な経験にしています。
追加された 著者 jfrankcarr,

私はこれに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();
    }
3
追加された
-1。 OPはWebフォームを使用しています。
追加された 著者 PhilPursglove,
+1これは素晴らしく、ウェブフォームに入れた方が良い
追加された 著者 Mubarek,
@PhilPursglove - 投稿されたのはまさにそれです。
追加された 著者 Security Hound,