2012-02-11 7 views
1

どのように私はここでStackoverflowのようなサーバー側の投票ボタンを保護しますか?私はどのようにボタンを提出することができましたin this answerしかし、どのようにサーバー側で、どのように私はcsrf攻撃などから投票システムを守るのですか?stackoverflowのような投票ボタンを保護する

+0

投票システムは、登録ユーザーのみが有効になって... – SolidSnake

答えて

4

ボットは一般的にjavascriptを実行しないため、AJAX呼び出しの場合はサーバー側でチェックしてください。

あなたはより多くのparamを追加多分保護されるようにしたい場合は、同じカルク

+0

私はその後、一緒に提出することに固有のID(@dotancohen)が含まれ、私はそれがAjax呼び出したことを確認し、このいずれかに行こうと思わせますそれ。私はそれがどのように動作するか完全に理解した後、私は「ノンス」を試みます。あなたの答えとアイデアに感謝します! – Michelle

1

と一致するかどうサーバー上でチェックし、現在の時刻に基づいて、いくつかのcalcではJavaScriptによって自動的に生成された最も簡単で効果的な方法がありますおそらくサインアップするために投票したいすべてのユーザーを必要とするため、各投稿に投票している人を追跡することができます。すべての有権者が誰であるかを知るとすぐに、投票ごとにユーザーIDを保存すると、以前に特定の質問に投票していないことを簡単に検証できます。

もちろん、登録フォームを保護して、ボットが登録できないようにする必要がありますが、これはreCAPTCHAと他の同様の方法を使用して行うことができます。おそらく、ユーザーが複数のアカウントに登録することを制限しようとするでしょう。それはもちろん難しいことですが、少なくともアカウントごとに一意の電子メールアドレスを要求するか、Google、Facebookなどの第三者認証を使用することができます。

サインを必要としない場合あなたは、すべての投票のIPアドレスを登録することに後退しなければならないと思いますが、その道を辿るのは手間がかかります。ボットは多分IPアドレスの全範囲を使用するでしょうし、あなたは同じIPを共有している異なるユーザーからの投票をブロックするかもしれません。これは本当に面倒です。

0

ログインを要求し、それにopenidを使用することもできます。

1

各矢印リンクのGETクエリ部分に一意のIDを入れます。このようにして、攻撃者/スパイファーはCSRF攻撃の方向を知ることができません。

2

CSRFから保護するために広く受け入れられている方法は、ノンスを使用することです。ボタンがクリックされ、リクエストがAJAXまたはPOSTデータを介して送信されると、それに伴ってナンス値が渡されます。そのノンスはバックエンドで検証されます。そのノンス値が生成時にセッションに保存されるようにすることができます。ハッシュ/ソルトを使用して、ノンスが特定のアクション、つまり「投票アップ」、「投票ダウン」などに限定されるようにすることができます。

need help understanding nonce

+0

認証がCSRFを必ずしも妨げるわけではないというログインテクニックを示唆しているすべての答えをleuで指摘したいと思います。 –

関連する問題