如何在服务器端像在这里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