投票のために、SO は投稿コントローラーに POST し、URL を介して投稿 ID と投票タイプを送信する XHR メソッドを実装し、さらにfkey
パラメーターが送信されることに気付きました。
http://stackoverflow.com/posts/1/vote/2
これを実装する際の全体的なロジックに加えて、同じユーザーによる重複投票を防ぎ、スパムを防ぐためにどのようなロジックを使用できるか疑問に思っています。
それらを格納するテーブルのスキーマ:
thread_id user_id vote_type
2334 1 2
これまでのところ、これらの箇条書きを思いつきました:
- ユーザーがログインしていることを確認する
- 有効な投稿 ID と有効な投票タイプが送信されていることを確認する
- POST 後、ユーザーが以前に投票していないことを確認します。
- ハッシュを作成するコードには、ユーザー エージェントなどの動的な情報を含めることはできません。ユーザーは別のブラウザーや別の OS を使用している可能性があるからです。
アップデート:
「SO はおそらくログイン Cookie を使用してユーザーを識別しています。」- アンドリュー
誰かがこれがどのように行われるかを示すことができますか、言い換えればfkey
、英数字の 32 ビット文字列である がどのように生成されるかの例をより具体的に提供できますか?
質問:
- XHRコードで実際のユーザーIDをどこにも送信していないので、テーブルスキーマを更新して、
fkey
代わりにを格納できるようにする必要がありuser_id
ますか? はfkey
おそらく各ユーザーに固有である必要があるため、投票テーブルに任意の fkey を持つ行があるかどうかを照会できます。
同様の手法を実装した人に関するヒントや洞察をいただければ幸いです。