【发布时间】:2016-01-04 15:03:00
【问题描述】:
我在 codeigniter 中有一个控制器,它由 UI 中的 Ajax 调用,在 UI 的正常操作上,一切都很好,这就是脚本中发生的情况,这只是一个演示代码而不是真实的(只是想展示发生了什么):
$uid=$_POST['uid'];
$id=$_POST['id'];
$bank=load_bank($uid,$id); // Load Bank From MySql DB
add_to_user_balance($uid,$bank['amount']); // "Add" the bank's amount to user balance in DB
zero_bank_amount($uid,$id); // Reset the bank amount to zero
在 2 次正常的 UI 调用中(彼此依次调用 1 秒):
- 在第一次调用中,$bank['amount'] 是 1000(例如)。它被添加 到用户的余额并设置为0
- 在第二次调用中,$bank['amount'] 为 0,因为它在上次设置为 0 调用,因此余额中不会添加任何内容
但是,一些垃圾邮件发送者/黑客使用一些机器人或其他任何东西来非常快速地调用此控制器。例如假设这个脚本被立即调用 2 次(例如少于 200 毫秒):
- 在第一次调用中,$bank['amount'] 是 1000(例如)。它被添加 到用户的余额并设置为0
- 在第二次调用中 $bank['amount'] is not 0 因为第一次调用仍然有效并且没有将 $bank['amount'] 设置为 0,因为它没有在第二次通话之前有足够的时间
你有什么方法可以防止这种快速调用吗?例如限制用户在每次通话之间有 1 秒的间隔?
【问题讨论】:
-
这就是数据库事务的用途...
标签: php ajax .htaccess codeigniter security