2012-02-11 67 views

回答

4

機器人通常不會運行JavaScript,因此只需在服務器端檢查它是否是AJAX調用。

如果你想成爲更好的保護,也許追加設置了一個param自動生成與基於當前一些時間計算的JavaScript,然後在服務器上檢查它是否匹配相同的鈣

+0

我想我會用這個去的,驗證它是一個Ajax調用,那麼包括唯一的ID(@dotancohen)將一起提交它。一旦我完全明白它是如何工作的,我會嘗試'nonce'。感謝所有您的答案和想法! – Michelle 2012-02-11 11:28:20

1

最簡單,最有效的方法是可能會要求所有希望投票的用戶進行註冊,以便您可以跟蹤每個帖子投票的人。只要你知道每個選民是誰,你就可以保存用戶ID和每個投票,那麼你可以很容易地驗證用戶以前沒有投票過的具體問題。

當然,你必須保護你的註冊表格,以確保殭屍程序無法註冊,但可以使用reCAPTCHA和其他類似的方法來完成。您可能還會嘗試限制用戶註冊多個帳戶。這當然很棘手,但您至少可以通過爲每個帳戶要求唯一的電子郵件地址開始,或者使用Google,Facebook等第三方身份驗證。

如果您不想要求登錄那麼我想你必須回到註冊每個投票的IP地址,但是走下去的道路更加棘手。機器人可能會使用各種IP地址,並且最終可能會阻止來自恰好共享相同IP的不同用戶的投票 - 這真的很煩人。

0

您可以要求登錄,甚至可以使用openid。

1

在每個箭頭鏈接的GET查詢部分放入一個唯一的ID。這樣攻擊者/欺騙者無法知道指示CSRF攻擊的地址。

2

防止CSRF被廣泛接受的方法是使用隨機數。當單擊按鈕並通過AJAX或POST數據提交請求時,會隨同它一起傳遞一個隨機數值。然後在後端驗證隨機數。您可以在生成時將該隨機數值存儲在會話中,可能使用散列/醃製,以便隨機數可以針對特定操作,即「投票」,「投票」等。

請參閱: need help understanding nonce

+0

我想指出所有的建議登錄技術的答案,認證並不一定阻止CSRF。 – 2012-02-11 11:25:23