1

序章

以前のプロジェクトでスパムの問題に対処し、次の単純な概念でスパム ボットを防止しました。私は今、これをより大きなプロジェクトに実装したいと考えています。これを行う前に、これが同じページで複数の形式で機能するように最適化したいのですが、まだトリックが得られていないか、役に立たない場合にこれをより複雑なバージョンに再構築する価値があるかどうかわかりません。

明確にするために:私はCAPTCHAまたは同様のものを扱いたくありません。ネイティブソリューションを実行するだけです。

概念

ユーザーがフォームの任意のフィールドにフォーカスするinputと、AJAX クエリが送信され、ランダムなハッシュ タグが生成されて$_SESSION変数に格納されます。spamKeyこのハッシュは、 (たとえば)と呼ばれる非表示の入力フィールドにも書き込まれます。

ユーザーがフォームを送信した後、$_SESSION["spamKey"]変数が変数と等しいかどうかを確認し$_POST["spamKey"]て、クエリを処理するかどうかを決定します。

コード

シンプルなフォルム

<form action="index.php" method="post" id="formOne">

    <label for='input_eins'>Name</label>
        <input type='text' id='input_eins' name='name' />
    <label for='input_user'>E-Mail</label>
        <input type='text' id='input_user' name='user' />
    <label for='ta_text'>Comment</label>
        <textarea name='text'></textarea>
    <label for='input_spamKey'>spamKey</label>
        <input type='text' id='input_spamKey' name='spamKey' />
    <input type='submit' value='Senden'>
</form>

script.js (jQuery を使用)

var spamKey = false;
$("#formOne > input").focus(function() {
         if(spamKey == false) {
        dataString = "action=getSpamKey";
        $.ajax({
            url: 'asyncresponse.php',
            data: dataString,
            type: "POST",
            success: function(data) {
                $("#input_spamKey").val(data);
                if(data != "") {
                    spamKey = true;
                }
              }
        });
    }
});

asyncresponse.php (情報: POST 変数はサニタイズされています)

if($_POST["action"] == "getSpamKey") {
    $spamKey = md5(time().microtime());
    $_SESSION["spamKey"] = $spamKey;
    echo $spamKey;
}

PHP のチェックルーチン

($_SESSION["spamKey"] == $_POST["spamKey"] && !empty($_SESSION["spamKey"]))

わかりました - 私の質問は何ですか?

複数のフォームを保護するには、どの手順をお勧めしますか? おそらく基本的な質問ですが、これはスパム問題に対処するための有効な解決策ですか?

事前にご協力いただきありがとうございます。

簡単なデモはこちらにあります: http://godesign.ch/labor/antispam/index.php

4

1 に答える 1

1

キャプチャは、スパムを防止する効果的な方法でした。広く実装されたため、現在は壊れており、それを壊す経済的インセンティブが生まれています (google "captcha壊れた")。

この方法がプロジェクトで効果的であるのを見てきました。ある時点で、誰かがそれを破る動機になるリスクがあります。正しく実装されていれば、現時点でスパムに対して妥当な保護が提供されると思います。

于 2013-01-09T17:10:39.753 に答える