如何在服務器端像在這裏Stackoverflow安全表決按鈕?我已經看到如何提交按鈕in this answer,但在服務器端如何保護投票系統免受csrf攻擊等?保護在stackoverflow中的投票按鈕
回答
機器人通常不會運行JavaScript,因此只需在服務器端檢查它是否是AJAX調用。
如果你想成爲更好的保護,也許追加設置了一個param自動生成與基於當前一些時間計算的JavaScript,然後在服務器上檢查它是否匹配相同的鈣
我想我會用這個去的,驗證它是一個Ajax調用,那麼包括唯一的ID(@dotancohen)將一起提交它。一旦我完全明白它是如何工作的,我會嘗試'nonce'。感謝所有您的答案和想法! – Michelle 2012-02-11 11:28:20
最簡單,最有效的方法是可能會要求所有希望投票的用戶進行註冊,以便您可以跟蹤每個帖子投票的人。只要你知道每個選民是誰,你就可以保存用戶ID和每個投票,那麼你可以很容易地驗證用戶以前沒有投票過的具體問題。
當然,你必須保護你的註冊表格,以確保殭屍程序無法註冊,但可以使用reCAPTCHA和其他類似的方法來完成。您可能還會嘗試限制用戶註冊多個帳戶。這當然很棘手,但您至少可以通過爲每個帳戶要求唯一的電子郵件地址開始,或者使用Google,Facebook等第三方身份驗證。
如果您不想要求登錄那麼我想你必須回到註冊每個投票的IP地址,但是走下去的道路更加棘手。機器人可能會使用各種IP地址,並且最終可能會阻止來自恰好共享相同IP的不同用戶的投票 - 這真的很煩人。
您可以要求登錄,甚至可以使用openid。
在每個箭頭鏈接的GET查詢部分放入一個唯一的ID。這樣攻擊者/欺騙者無法知道指示CSRF攻擊的地址。
防止CSRF被廣泛接受的方法是使用隨機數。當單擊按鈕並通過AJAX或POST數據提交請求時,會隨同它一起傳遞一個隨機數值。然後在後端驗證隨機數。您可以在生成時將該隨機數值存儲在會話中,可能使用散列/醃製,以便隨機數可以針對特定操作,即「投票」,「投票」等。
我想指出所有的建議登錄技術的答案,認證並不一定阻止CSRF。 – 2012-02-11 11:25:23
- 1. ASP.Net Ajax Stackoverflow風格投票按鈕
- 2. iPhone:按鈕「投票在AppStore」
- 3. 在Django中的簡單投票按鈕
- 4. Reddit式的投票按鈕
- 5. 在Swift中解析投票按鈕
- 6. 如何創建像jQuery/ajax函數stackoverflow的投票投票?
- 7. jQuery的投票有問題,就像stackoverflow投票?
- 8. 什麼使StackOverflow中的投票按鈕位於不同的行上?
- 9. 如何在用戶投票後禁用(相應)投票按鈕?
- 10. Stackoverflow-like評論投票SQL查詢
- 11. 提示StackExchange與Pentadactyl的投票按鈕
- 12. 數據庫設計的投票按鈕
- 13. Django投票:按投票排序
- 14. Digg風格Ajax投票按鈕
- 15. 投票按鈕,是和否Rails 4
- 16. 投票系統按鈕修復
- 17. Bootstrap投票按鈕不起作用
- 18. Rails - 投票不保存,並創建不提交按鈕?
- 19. 投票投票牆
- 20. 如何保存投票獲取並保存在HTML上的投票結果
- 21. 在Confluence頁面上有一個StackOverflow類型的投票系統
- 22. 如何在軌道上的紅寶石上創建一個投票向下按鈕,如stackoverflow?
- 23. 在MongoDB中投票
- 24. 如何使XHTML中的按鈕呈現投票
- 25. 在軌道上投票的上/下按鈕3
- 26. 如何保護Facebook Gallery投票應用程序
- 27. 投票與長投票
- 28. 投票重複投票
- 29. 獨特的用戶投票策略,如Stackoverflow的?
- 30. 檢查用戶是否投票,如果不保存投票
在投票系統中啓用只有註冊用戶...... – SolidSnake 2012-02-11 11:11:39