ご存知のように、Reddit では、スパマーとの問題を回避するために、リンクごとに IP アドレスごとに約 1 票を許可しています。私は投票機能を持つスリムなアプリケーションに取り組んでいますが、率直に言って、Cookie やネイティブ セッションの経験がないため、このようなシステムを実装する方法がわかりません。また、私の関数のほとんどには、(例) localhost:8888/myapp/voteup/item-to-vote のようなパスがあります。
2 に答える
私のサイトでは、メンバーが 24 時間ごとに 1 から 5 の間でコードを評価できるようにしています。ハッシュ コードを追加し、ajax を使用して投票を送信することで、スパムを阻止します。2012 年 6 月に追加して以来、スパム投票はありません。以前はボットから 1 日あたり約 40 票を獲得していましたが、現在はそれがなくなりました。
たとえば、これは私のリンクがどのように見えるかです:
http://phpsnips.com/process/vote.php?id=43&vote=3&enc=a560e4320af4e13e4170947cd42de18b
これにより、enc はページが読み込まれるたびに異なり、投票が送信されると再び変更されます。
私の歩み
- セッションを使用して md5 ハッシュを作成する
- リンクまたはフォームの非表示フィールドにハッシュを配置します
- 送信ページのテストで、セッションがリンク/フィールドと一致することを確認します
- ハッシュをリセットする
- 元のページにリダイレクトします (ajax を使用していない場合)
自動化されたボットと戦う最善の方法は、それらを混乱させることです。一部のテキスト入力フィールドを非表示にし、名前を逆にします (名前フィールド、電子メール、サイト、名前など)。
外部からのフォーム送信を軽減するために、Javascript のみの送信を使用することをお勧めします。CSRF の使用も同様に役立ちます。Cookie や HTTP カスタム ヘッダーなどの使用を強制して、ブラウザのみが再現できるようにし、自動化された手段を使用しないようにします。
論理的な質問も役に立ちます。たとえば、「1 + 1 はいくらか、書き留めてください」(答えは 2 で、ランダムにする必要があります)、または「W で始まる曜日は何ですか」などです。