2012-02-11 131 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