简化:在我的JS / PHP应用程序中,我有一个按钮。当用户点击按钮时,他获得1分,这是通过jQuery AJAX / PHP在数据库中保存的。
当然,用户现在可以在不单击按钮的情况下调用发出AJAX请求的脚本。有没有最佳做法可以避免这种情况?
我正在使用AJAx,因为我不希望页面重新加载。
更新: 用户如何获得积分还有很多其他选择。理想我会有一个JS函数add_points(points),为用户添加点。但我知道任何人都可以编写脚本来自动调用此函数。我想唯一的方法是生成每个可能的点获取操作的哈希值,并使用AJAX请求提交此哈希值。
答案 0 :(得分:1)
如果允许用户点击她想要的次数,则没有真正的方法可以阻止自动执行此操作。如果她只应该点击一次(比如在stackoverflow上进行upvoting),那么服务器用来更新值的代码应该自动确认她之前没有点击它,即检查数据库。
答案 1 :(得分:1)
你可以做的一件事就是生成一个哈希并检查该哈希是否是新的或者在最后一天没有使用的例子。确保用户必须获得一个新的哈希才能按下按钮。 / p>
答案 2 :(得分:0)
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
/* special ajax here */
die($content);
}
答案 3 :(得分:0)
您需要审计跟踪才能正确解决此问题
设置状态“用户单击按钮”而不是“用户获得1点”,并将用户的分数计算为分配点的所有操作的总和。这是Stack Overflow使用的基本方法。
通过这种方式,您可以获得用户获得积分的会计记录,并且您可以实施业务规则,例如“仅允许设置状态用户点击按钮一次”
您目前的方式,没有审计线索,实际上您无法知道为什么用户拥有他们所做的分数。