只允许授权的AJAX请求

Only allow authorized AJAX requests

本文关键字:AJAX 请求 授权 许授权      更新时间:2023-09-26

简化:在我的JS/PHP应用程序中,我有一个按钮。当用户点击按钮时,他会得到1分,该分通过jQueryAJAX/PHP保存在数据库中。

当然,用户现在可以调用发出AJAX请求的脚本,而无需单击按钮。有什么最佳实践可以避免这种情况吗?

我使用AJAx是因为我不想重新加载页面。

更新:用户可以通过多种方式获得积分。理想情况下,我会有一个JS函数add_points(点),为用户添加点。但我知道任何人都可以编写一个脚本来自动调用这个函数。我想唯一的方法是为每个可能的积分赚取操作生成一个散列,并将该散列与AJAX请求一起提交。

您可以做的一件事是生成一个哈希,并检查该哈希是新的还是在最后一天没有使用。。确保用户必须获得新的散列才能按下按钮。

如果允许用户任意点击次数,就没有真正的方法可以阻止自动点击。如果她只应该点击一次(比如在stackoverflow上投票),那么服务器用于更新值的代码应该自动确认她之前没有点击过,即检查数据库。

if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
    /* special ajax here */
    die($content);
}

您需要一个审计跟踪来正确解决这个问题

将状态设置为"用户点击了按钮",而不是"用户得到1分",并将用户的分数计算为所有分配分数的动作的总和。这是Stack Overflow使用的基本方法。

这样,您就有了用户如何获得积分的会计记录,并且您可以实现诸如"只允许设置状态用户单击按钮一次"之类的业务规则

按照您目前的做法,没有审计跟踪,事实上,您无法知道为什么用户会有这样的分数。