2

我网站上的用户可以点击一个按钮。如果他们这样做,他们将获得积分奖励。

单击此按钮时,将向服务器发出 AJAX 调用以提供奖励(存储在数据库中)。

该按钮是一个“发推文”按钮,所以我想确保他们真的在发推文。

我的问题是我想确保按钮真的被点击了。由于 javascript 代码对用户来说是完全可见的,我想他们很容易只进行 AJAX 调用而不点击它。

那么,我能做些什么呢?混淆是我唯一的选择,还是我可以加密某些东西,或者使用令牌或其他东西?

如果它可能有帮助,用户登录并使用 PHP 提供页面。

谢谢

4

6 回答 6

3

基本上你不走运 - 没有万无一失的解决方案可以阻止某人编写一个简单的脚本来下载页面,解析它以获取任何安全令牌,然后调用 AJAX 请求。

您只能通过添加一些由服务器呈现并通过 AJAX 调用提交回来的额外数据来使工作稍微难一些。

您可能会考虑将验证码图像添加到按钮 - 这将阻止机器人提交数据,但也会使真实用户的生活更加困难。

于 2012-11-13T14:50:14.163 回答
1

基本上,用户甚至可以复制代币,严格来说并不是一个完美的保护。混淆代码可能会有所帮助。我想你想防止编程或多次投票。你可以记录 ip 以防止多次投票并使用 csrf 令牌,但如果你的用户登录它是假定他们是受信任的,并且在操纵的情况下,你只需删除他们帐户。

我认为您应该尝试使用验证码,并且识别正在投票的用户并将他限制在多票服务器端。

但是伪造点击仍然是可行的。

于 2012-11-13T14:53:51.810 回答
1

您可能希望将CSRF 令牌附加到您的请求中,以确保在该页面和当前会话中执行了点击。

您可以实现一个过期令牌 - 您在会话中设置一次,当用户要求它时,它会失效并且您完成了。

于 2012-11-13T14:47:25.647 回答
1

你能只允许按钮在一定的时间范围内被点击一次吗?这可以在 PHP 中强制执行,并且非常安全。

即使您使用令牌或其他东西,用户也可能能够找到它并直接运行脚本。需要某种服务器验证,例如时间验证才能真正安全。

于 2012-11-13T14:48:15.307 回答
0

1- 看起来这些用户是您网站的注册会员。如果是这种情况,只需在数据库中创建一个带有 id、username 和其他关系列的points表。request如果他们之前没有得到分数,让你的脚本工作(首先检查用户是否登录,然后检查用户名与用户数据库,如果他们存在关系,则拒绝请求,否则接受它,在积分表内) .

2-如果他们是非注册用户,请使用谷歌验证码进行检查。

于 2012-11-13T14:53:49.313 回答
0

您可能希望实现一个基于“验证码”的系统,以确保 (1) 只有人类单击按钮 (2) 仅在按下按钮后

http://jquerybyexample.blogspot.com/2012/04/best-5-jquery-captcha-plugins.html

于 2012-11-13T14:49:14.400 回答