1. ホーム

[解決済み】非画像ベースのCAPTCHAの実用的なアプローチ?

2022-03-28 21:09:20

質問

を追加することになるようです。 CAPTCHA をサポートします。これは、ボット、スパマー、その他の悪意のあるスクリプトによる活動を防ぐために必要なことです。私たちは、人間だけがここに投稿したり編集したりすることを望んでいます。

第一の防御としてJavaScript(jQuery)CAPTCHAを使用する予定です。

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

この方法の利点は、次のとおりです。 ほとんどの人は、CAPTCHAが表示されることはありません。

しかし、JavaScriptを無効にしている人のために、フォールバックが必要で、ここが厄介なところです。

を書きました。 ASP.NET 用の従来の CAPTCHA コントロールです。 を再利用することができます。

しかし、リクエストのたびにサーバーでこれらの画像をすべて作成するオーバーヘッドを避けるために、何かテキスト的なものにするのが望ましいと思います。

みたいなのを見たことがあります。

  • ASCIIテキストキャプチャ \/\/(_)\/\/
  • 算数パズル:7マイナス3×2は何でしょう?
  • 豆知識:ヒキガエルとアイスキャンディー、どちらがおいしい?

私は風車にぶら下がっているだけなのかもしれませんが、より少ないリソースで、画像ベースではない <noscript> 可能であれば互換性のあるCAPTCHAを。

アイデアは?

解決方法は?

私が開発した方法 これは完璧に機能するようで、(おそらくあなたほどコメントスパムを受けないと思いますが)隠しフィールドを用意して、そこに例えば偽の値を記入するのです。

<input type="hidden" name="antispam" value="lalalala" />

そして、ページが読み込まれた秒数で1秒ごとに値を更新するJavaScriptの一部を用意しました。

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

そしてフォームが送信されたとき、アンチスパムの値がまだ "lalalala" ならば、それをスパムとしてマークするのです。アンチスパムの値が整数である場合、それが10(秒)以上であるかどうかをチェックします。10以下ならスパムとしてマークし、10以上ならスルーします。

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

という説がある。

  • スパムボットはJavaScriptをサポートしておらず、見たままを送信します。
  • ボットがJavaScriptをサポートしている場合、即座にフォームを送信します。
  • コメント投稿者は、投稿前に少なくともページの一部を読んでいます。

この方法の欠点は、JavaScriptが必要なことです。JavaScriptを有効にしていない場合、コメントはスパムと判定されますが、私はスパムと判定されたコメントを確認するので、この点は問題ではありません。

コメントへの返信

@MrAnalogyです。サーバーサイドのアプローチはなかなか良さそうで、JavaScriptでやるのと全く同じですね。グッド・コールです。

AviD: この方法は、私が 私のブログ . しかし、この方法は、あらゆるフォームにゴミを送信する平均的なスパムボットを防御することができます。