只允许授权的AJAX请求
Only allow authorized AJAX requests
简化:在我的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使用的基本方法。
这样,您就有了用户如何获得积分的会计记录,并且您可以实现诸如"只允许设置状态用户单击按钮一次"之类的业务规则
按照您目前的做法,没有审计跟踪,事实上,您无法知道为什么用户会有这样的分数。
相关文章:
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- "日期“;AJAX请求返回的类型值未定义
- 在等待ajax请求时显示微调器并禁用页面
- 跨域ajax请求
- Ajax请求返回空的数据字符串,但首先得到了正确的数据
- Javascript-如何让脚本与Ajax请求的数据一起运行
- ajax请求成功,但可以'我看不到我的数据
- 如何将给定的curl命令复制为jquery ajax请求
- 为什么我能够从javascript控制台发送跨域ajax请求
- 一台特定计算机的Ajax请求数据未定义/失败
- 获取ajax请求的请求头
- 原型Ajax请求参数为嵌套json
- 可以't从AJAX请求中筛选数据
- jQuery Mobile Collapse上的AJAX请求
- 暂停函数执行流程,直到ajax请求完成