私は基本的に自分のサイトでスパムを防ぐために 1 つのトリックを使用しており、うまく機能しています (少なくともスパムボット プログラマーがこの投稿を読むまでは ;))。
コードは次のようになります。
フォームを含むサイトを構築するスクリプトでは、次のように実装しました。
$_SESSION['lastSiteId'] = 'something Unique';
$_SESSION['lastSiteRequest'] = time();
コメントをデータベースに書き込むロジックを含むスクリプトには、次のものが含まれます。
if($_SESSION['lastSiteId'] == 'something Unique'
&& $_SESSION['lastSiteRequest'] + 5 < time()){
insertComment();
}else{
echo "Please read the article before posting a comment";
}
これは、アイデアを提供するための疑似コードであることを忘れないでください。最終的には一人で実装する必要があります... ;)
フォームを再読み込みしてから POST リクエストを送信するまでに 5 秒以上経過したかどうかを確認するだけです。
スパムボットのエンジニアは寝ていないことに注意してください。プログラマーがそうしたい場合、スパムボットは不要な入力を投稿する前に数秒待つことができます。質問は次のとおりです。スパマーが要求の間に 5 秒待たなければならない場合、どれくらいのスパム メッセージが送信される可能性がありますか? ほら、これがスパム防止の最終的な解決策かもしれません。
時間テストと JavaScript テスト (可能であれば必要に応じて) を組み合わせて、事前入力/未入力の非表示フィールドのトリックを組み合わせることで、数年後にはスパムから救われるはずです。