回答:
次のようないくつかのことができます。
ボットのみに見える偽のフィールドを配置します。次に、そのフィールドがフォームの残りの部分とともに送信された場合、それを無視することができます(必要に応じて禁止します)。また、非表示のリンクをたどる悪いボットをトラップすることもできます。
reCAPTCHAのようなCAPTCHAを使用する
ユーザーが5 + 3のような質問に答える必要があるフィールドを使用します。人間は誰でも答えることができますが、ボットはフィールド名に基づいてフィールドを自動入力するため、何をすべきかわかりません。そのため、そのフィールドは正しくないか欠落しているため、送信は拒否されます。
トークンを使用してセッションに入れ、フォームに追加します。トークンがフォームと一緒に送信されない場合、または一致しない場合、トークンは自動化され、無視できます。
同じIPアドレスからの繰り返し送信を探します。フォームがあまり多くのリクエストを受け取るべきではないが、突然ボットにヒットしている可能性がある場合、一時的にIPアドレスをブロックすることを検討する必要があります。
ジョン・コンデは多くの良いアプローチを概説しています。アンチボット/アンチスパム技術の選択に関する問題は、有効性と利便性のバランスをとることです。コメントやメッセージを投稿するたびにCAPTCHAに記入する必要があるのは本当に不便ですが、サインアップ時にCAPTCHAのみが必要な場合は、スパマーを思いとどまらないことがあります。
受動的なテクニックのいくつかは、人間の行動を必要としないため、優れた代替手段です。問題は、ボットがますます高度化しており、ボットがCAPTCHAを解決できれば、JSとCSSを確実に処理できることです。したがって、ボットトラップフィールドを非表示にするために、あまり目立たないCSSを使用するなど、少し工夫する必要があります。
しかし、あなたの質問に基づいて、ボットプルーフサイトを作成することではなく、ボットユーザーが他の簡単なターゲットを選択するだけの十分な抑止力を作成することがポイントであることをおそらく理解していると思います。したがって、ここで何が必要かはサイトごとに異なり、おそらく試行錯誤のテストが必要になります。最初に最も目立たない手法を試します。
最後に、サイトのスパム対策を行うもう1つの方法は、ピアモデレーションを使用して、ボットから送信されたコメントまたは手動で送信されたスパムを削除することです。
John Condeが#1)で述べたように、そしてあなたが述べたように、ハニーポットはほとんどの場合とほとんどのWebサイトで非常にうまく機能します。ボットによって実行された場合、Johnが言及した他の方法のいずれかを実行できます。しかし、正直に言って、サイトのトラフィックが少ない場合や平均的なトラフィックの場合は、これでうまくいくはずです。
例、私のお気に入りの1つ:
<form action="/process-form">
<input name="email" placeholder="Enter Your Email">
<input name="email_address" placeholder="Enter Your Email" style="display:none;">
<input type="submit" value="Submit"></form>
これで、フォームが送信されると、非常に高い割合のボットが「email」と「email_address」の両方を記入しますが、人間は「email_address」ではなく「email」のみを記入します。したがって、 `/ process-form 'コードでは、確認のためにemail_addressが空かどうかを確認する必要があります。
シンプルで効果的。