我网站上的用户可以点击按钮。如果他们这样做,他们将获得积分奖励。
单击此按钮时,会向服务器发出AJAX调用以提供奖励(存储在数据库中)。
按钮是一个“发推文”按钮,所以我想确保他们真的做推文。
我的问题是我想确保按钮确实已被点击。由于javascript代码完全可以被用户看到,我想他们很容易在不点击它的情况下进行AJAX调用。
那么,我能做些什么?混淆是我唯一的选择,还是我可以加密某些东西,或使用令牌或什么东西?
如果有帮助,用户就会登录并使用PHP提供页面。
由于
答案 0 :(得分:3)
基本上你运气不好 - 没有万无一失的解决方案可以阻止某人编写一个下载页面的简单脚本,解析任何安全令牌然后调用AJAX请求。
您只能通过添加一些由服务器呈现并通过AJAX调用提交回来的其他数据来稍微加倍工作。
你可能会考虑在按钮上添加一个CAPTCHA图像 - 这样可以防止机器人提交数据,但也会使真实用户的生活变得更加困难。
答案 1 :(得分:1)
您可能希望在您的请求中附加CSRF token,以确保已从该页面以及当前会话中执行了点击。
你可以实现一个过期的令牌 - 你在会话中设置一次,当用户要求它时,它会失效并且你已经完成了。
答案 2 :(得分:1)
您是否只允许在特定时间范围内点击按钮一次?这可以在PHP中实施,并且非常安全。
即使您使用令牌或其他东西,用户也许可以找到它并直接运行脚本。需要进行某种服务器验证,例如时间验证才能真正安全。
答案 3 :(得分:1)
基本上,用户甚至可以重现令牌,严格来说不是完美的保护。 混淆代码可能会有所帮助。 我认为你想要阻止程序化或多重投票.. 您可以录制ip以防止多次投票&使用csrf令牌,但如果您的用户已登录,则可以信任他们是受信任的,并且在操纵的情况下,您只需删除他们的帐户。
我认为您应该尝试使用验证码,并确定投票的用户并限制他从多个投票服务器端。
但伪造点击仍然可行。
答案 4 :(得分:0)
您可能希望实施一个基于“验证码”的系统,该系统确保(1)只有人在按下按钮(2)后才点击该按钮(2)
http://jquerybyexample.blogspot.com/2012/04/best-5-jquery-captcha-plugins.html
答案 5 :(得分:0)
1-看起来这些用户是您网站的注册会员。如果是这种情况,只需在数据库中使用id,username和其他关系列创建 points 表。如果前面没有得分,请让你的脚本使request
正常工作(首先检查用户是否已登录,然后检查用户对用户db的位置以及是否存在关系在 points 表中拒绝请求,否则接受它。
2-如果他们是非注册用户,请使用Google验证码进行检查。