防止数据完整性的时间攻击

时间:2012-10-10 19:42:46

标签: sql security web-applications

场景:基于网络的文字游戏

  1. 玩家A发送请求以向玩家B发送10,000个积分(此请求需要20毫秒才能完成)。
  2. 发送第一个请求后3ms(仍在处理中)玩家A向战斗玩家C发送另一个请求,此请求需要100ms才能完成。
  3. 发生了什么,在步骤1中,一个应用程序从玩家A中移除了信用,将它们提供给玩家B,但在此之前持续存在于数据库中,第二个请求到来,加载状态仍在玩家帐户中显示10k A并从第2步请求1(0学分)和10k +战斗战略中覆盖正确的状态。结果:玩家A和B现在他们的账户中都有10k,这笔钱只增加了一倍。

    可以做些什么来防止这种情况发生?这是假设问题的假设情景,对于sql会做的上述情况account=account+loot,但我正在寻找适用于所有数据类型的解决方案。

1 个答案:

答案 0 :(得分:2)

如果将数据库上的transaction isolation level设置为可序列化,则可以将上述内容视为数据库级别的单个原子事件。

Atomicity是数据库系统的关键组件之一。