保护像stackoverflow中的投票按钮

时间:2012-02-11 11:08:57

标签: php

如何在Stackoverflow上保护服务器端的投票按钮?我已经看到了如何提交按钮in this answer,但是在服务器方面,如何保护投票系统免受csrf攻击等?

5 个答案:

答案 0 :(得分:4)

机器人通常不会运行javascript,所以只需检查服务器端是否是AJAX调用。

如果你想得到更多保护,可以附加一个由javascript自动生成的参数,并根据当前时间计算一些计算结果,然后检查你的服务器是否与同一个计算机匹配

答案 1 :(得分:2)

一种被广泛接受的保护CSRF的方法是使用随机数。单击该按钮并通过AJAX或POST数据提交请求时,会随之传递一个随机数值。然后在后端验证该随机数。您可以在生成时将该nonce值存储在会话中,可能使用散列/ salting,以便nonce可以特定于某个操作,即'vote-up','vote-down'等。

请参阅: need help understanding nonce

答案 2 :(得分:1)

最简单,最有效的方法可能是要求所有希望投票的用户进行注册,以便您可以跟踪每个帖子的投票对象。只要您知道每个选民是谁,您就可以保存用户ID以及每次投票,然后您就可以轻松验证用户之前没有对特定问题进行投票。

当然,您必须保护您的注册表单,以确保机器人无法注册,但可以使用reCAPTCHA和其他类似方法完成。您可能还会尝试限制用户注册多个帐户。这当然很棘手,但您至少可以从每个帐户都要求使用唯一的电子邮件地址开始,或者使用Google,Facebook等第三方认证。

如果您不想要注册,那么我猜您必须在注册每次投票的IP地址时回避,但走这条路是比较棘手的。机器人可能会使用一系列的IP地址,你最终可能会阻止来自不同用户的投票,这些用户碰巧共享相同的IP - 这可能真的很烦人。

答案 3 :(得分:1)

在每个箭头链接的GET查询部分中放置一个唯一的ID。这样攻击者/欺骗者无法知道指导CSRF攻击的地址。

答案 4 :(得分:0)

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