私は、ログインが必要ない投票システムを設定したいが、彼らは望むように投票できる。PHP投票システム、どのようにスパミングを停止するには?
私はどのように投票でスパムを発するのを阻止しますか(投票の追加要求を送信する)?私はクライアントサイトのスクリプトを使用して簡単にそれを(適切なユーザーから)停止することができます知っているが、サーバー側(PHP)についてはどうですか?私は人々がそのURLを持っていることを望んでいないし、常に数を増やすためにそれをヒットします。
乾杯してください。
私は、ログインが必要ない投票システムを設定したいが、彼らは望むように投票できる。PHP投票システム、どのようにスパミングを停止するには?
私はどのように投票でスパムを発するのを阻止しますか(投票の追加要求を送信する)?私はクライアントサイトのスクリプトを使用して簡単にそれを(適切なユーザーから)停止することができます知っているが、サーバー側(PHP)についてはどうですか?私は人々がそのURLを持っていることを望んでいないし、常に数を増やすためにそれをヒットします。
乾杯してください。
reCAPTCHAを実装してください(実装には10分かかります)、良い迷惑メール対策であり、より大きな目的(電子書籍)を提供します。
本当にクッキーと一緒に行きたい場合は、evercookiesをご覧ください。彼らは侵襲スーパー、非常に非倫理的だが、あなたはvote_trackingテーブルを追加することができます:)
あなたのIPをログに記録したり、クッキーを設定する必要があります。クッキーに関する問題は、クライアントがそれらを消去することができることであり、IPトラッキングの問題は、NATファイアウォールが混在している場合、複数のユーザーをブロックする可能性があることです。
また、投票で送信する必要があるフォームの隠し値であるセキュリティトークンを使用することもできます。トークンが存在しない場合は、投票を数えません。この方法では、偽の投票を送信しようとするよりも前に、あなたのフォームからコードを解除できるスクレーパーを少なくとも書く必要があります。 – drew010
ねえ、それはあなたのサイトだ:
vote_tracking
id
poll_id
session_id
ユーザー投票特定の世論調査では、あなたが更新することができますセッションIDを持つ行。
次に、ユーザーが既に投票に投票したかどうかを判断するためにクエリを発行しないようにするために、いくつかのコードを実装する必要があります。 「アクティブな」投票がある場合は、1回の検索を行い、すでに投票したことを示すセッション変数varを登録することができます。投票が何回実行されても、データベースには何も置かれません。明らかに、これは現在のsession_idが一致している間だけ動作します。異なる場合は、最初のクエリを発行してから、セッションvarをリセットする必要があります。
そして、あなたのテーブルが100万行以上にならないように、私は刈り取りの仕組みをお勧めします。新しい 'アクティブな'ポーリングを作成する場合は、vote_trackingテーブルを切り捨てるか、テーブルの名前を変更してアーカイブします。
また、IPトラッキングの問題は、最初の人が投票した後に他の人が投票できなくなった場合に、プロキシの背後にいるユーザーをボルクにすることです。
セッションvarとして保存するだけでなく、クッキーを削除するという同じ落とし穴を開いていることとはまったく異なるわけではありません。 – Joe
IP追跡の問題は、最初の人が投票した後に他の人が投票できなくなった場合、プロキシの背後にいるボークユーザーになることです。TOTALLY – Bruce
確かにユーザーがセッションIDをリセットすることができますが、この方法でそれを格納することによって、彼が鋳造したどのように多くの投票をメトリックを実行することができ、そして彼も、タイムスタンプ列を追加し、その日の投票パターンの時間を決定することができるが合意しました。彼はログインメカニズムを実装していない限り、そこにスパムを投票から100%を保護する解決策はありませんが、少なくともこの解決策は、いくつかの将来の柔軟性を持っています。 –
「クライアントサイトスクリプトを使用すると簡単に(スパム)を止めることができます」という誤記は間違いです。どんなクライアント側のスクリプトも簡単に回避することができます。 – CanSpice
ログインしなければ、最初に気になることは、IPアドレスをすべての投票と共に保存し、それを使ってユーザーがまだ投票していないことを確認することです。それは弾丸ではない解決策ではありませんが、おそらくあなたの問題の大半を取り除くでしょう。 –
CanSpiceのコメントをちょっと整理すると、Javascriptを無効にするだけで、すべてのクライアント側の検証が無意味になります。仕事が価値があるのなら、それはサーバー側で行う価値があります。クライアント側のコードは、フォームを送信する前にフィードバックを与えて、合法的なユーザーに物事をより簡単に伝えることです。 – Joe