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