偽造防止トークンは良い第一歩です。すべてのフォームでそれらを使用しない理由はありませんので、習慣にしてください. それらが機能する方法は、ユーザーが GET アクションに到達すると、トークンが作成され、フォームの非表示フィールドまたは Cookie、またはその両方として設定されるというものです。フォームが投稿されると、POST アクションは、それが GET アクションで設定されたトークンと等しいことを確認します。投稿された値と元の値が一致する場合、リクエストは通常どおり処理されます。これは、一部のサードパーティが POST アクションにデータを直接投稿できないことを意味します。最初に GET アクションをロードし、偽造防止トークンを取得してから、それを使用して POST する必要があります。これは 1 つの余分なステップにすぎませんが、有効性よりもボリュームが重視されるスパムやフィッシングのようなゲームでは、少なくとも速度が低下します。さまざまな URL やサイトで機能する可能性のあるスクリプトの代わりに、サイト専用のスクリプトを作成する必要があります。あなたがFacebookなら、彼らはそうするでしょう。それがあなたの個人的なブログであれば、おそらく時間を無駄にすることはないでしょう。それはすべて、彼らの動機と、彼らがあなたのサイトをどれだけ価値があると認識しているかにかかっています.
もう 1 つの比較的効果的な手法は、ハニーポットと呼ばれます。基本的に、通常は重要なフィールドをフォームに追加しますが、問題のフォームにとっては重要ではありません-「メール」、「名前」などのフィールド。現在のフォームにないフィールドを選択してください。使用せず、とにかくインクルードし、CSS または JS で非表示にします。(ただし、に設定するのではなく、目に見えるように非表示にする必要があることに注意してください。 のフィールドは投稿されないため、目的に反します-投稿したいのです。次のように設定するだけです:display:none
display:none
position:absolute;
width:0; height:0;
overflow:hidden;
いずれにせよ、スパマーがランダムにサイトをターゲットにしている場合、スクリプトはあなたのハニーポットを狙っていきます。また、この手法を効果的にするには、それが機能したふりをする必要があることに注意してください. そのため、実際には舞台裏で投稿を破棄しているにもかかわらず、リクエストが成功したかのように振る舞っています。何らかのエラーを返したり、403 Forbidden のようなもので完全に失敗した場合、彼らはあなたが何をしているかを理解するでしょう。
上記の最初の 2 つの提案がスパムを防ぐために機能しない場合にのみ、CAPTCHA を検討する必要があります。それらは非常にユーザビリティに欠陥があり、ユーザーは太陽の火のように燃える情熱でそれらを嫌っています. 最初からやり過ぎないこと。サイトの知名度によっては、偽造防止トークンだけで実際に機能する場合があります。そうでない場合は、ハニーポットなどが考えられます。多くの人は、すぐにすべてを独り占めして、すべてに CAPTCHA を平手打ちします。