3

私はこのトピックについて提案されたすべての投稿を調べてきましたが、私にとってうまくいくか、私が完全に理解している解決策を見つけることができないようです。

隠しフィールドがボットによって埋められているかどうかをチェックし、埋められている場合はフォームを壊す単純なハニーポットを実行しようとしています。私の問題は、PHP値がクリアされたかどうかを確認するためにAJAXを使用することになると思われます。私はコーディング言語に精通していないので、それが理にかなっていることを願っています。

私の当初のアイデアは、フィールドに入力するボットの送信ボタンを無効にすることでした。ただし、フィールドが空白であるため、フォームに送信ボタンが読み込まれ、ポイントが失われます。

これは、ボットのフォームチェックの一部です。

<!-- THE HONEYPOT -->
<li id="artificial-detect">
       <label for="artificials">If you see this, leave this form 
       field blank and invest in CSS support.</label>
       <input name="artificials" type="text" value="">
</li>
<!-- /HONEYPOT -->

<?php 
$spam = $_POST['artificials']; // This is our Honeypot field
if($spam) {  // If the Honeypot field has been filled in
    die("No spamming allowed bitch!"); 
} else { ?>
<li class="last">
        <input class="submit" type="submit" name="submit">
</li>
<?php } ?>

私は今何をすべきかわかりません:

jQuery.('#salesforce-crm-form .submit').click(function(){
     jQuery.ajax({
     // Get PHP function that determines whether the honeypot has been snatched.
     });
});

action = ""に外部URLを使用しているので、PHPがボットをクリーンアップして返した場合にのみ挿入できるのではないかと思いました。

4

3 に答える 3

2

思い通りに物事を進めることはできません。

最初に PHP が実行され、フォームが配信されます。

次に、ブラウザが動作し、フォームをユーザーに表示します。彼はデータを入力して送り返すかもしれません。

次に、PHP が再びオンになり、フォームの値がチェックされます。

ハニーポット フィールドが満たされているかどうかを確認するコードはほとんどあります。この PHP チェックはフォームの送信後にしか実行できないため、AJAX を使用しないでください。スパムを検出した場合は、フォームが意図していることを実行しないでください。

ところで、ボットは送信ボタンを押しません。ボットは、フォームの解析に基づいてリクエストを送信し、すべての Javascript を無効にします。

[編集] フォームが外部 URL に移動する場合、スパム検出を制御することはできません。ボットは Javascript を使用しないため、このレベルでは何も機能しませんが、それがあなたがやろうとしていることです。

フォームを外部 URL に直接送信するのではなく、スパムをチェックしてから元の宛先に送信するサーバー上の PHP スクリプトに送信することだけが有効です。フォームを送信するのはユーザーのブラウザーではなく、サーバーであるため、これが他の何かを台無しにするかどうかはわかりません。その側でリクエストメタデータの検出および/または使用がある場合、これを妨害しています。

于 2012-10-03T10:32:48.070 に答える
1

ハニー ポットの入力にデフォルト値を入力し、投稿する前にユーザーに削除を依頼します。また、送信ボタンを無効にしても意味がありません:) ボットはこのようには機能しません。何もクリックせずにフォームを送信するだけです。

于 2012-10-03T10:31:17.873 に答える
0

入力ボックスのタイプを非表示に変更し、ID を指定すると、次のようになります。

<input name="artificials" type="hidden" id="honeypot" value="">

その場合、ユーザーは入力を見ることができなくなりますが、ボットが入力します。

次に、JavaScriptでjqueryを使用して、次のような値を確認できます

var honeypot = $('#honeypot').val();
if(honeypot == '' || honeypot == null) {
   // Call ajax function
}

これはテストされておらず、単なる例であることに注意してください。

于 2012-10-03T10:36:36.630 に答える