【问题标题】:Protection against timing attack on data integrity防止对数据完整性的定时攻击
【发布时间】:2023-03-12 09:15:01
【问题描述】:

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

  1. 玩家 A 向玩家 B 发送发送 10,000 积分的请求(此请求需要 20 毫秒才能完成)。
  2. 在发送第一个请求(仍在处理中)后 3 毫秒,玩家 A 向战斗玩家 C 发送另一个请求,此请求需要 100 毫秒才能完成。

发生了什么,在第 1 步中,应用程序从玩家 A 中删除了积分,将其提供给玩家 B,但在将其保留在数据库中之前,第二个请求来了,加载状态仍然显示玩家 A 的帐户中的 10k 并覆盖正确请求 1 中的状态(0 积分),第 2 步中的 10k + 战斗战利品。结果:玩家 A 和 B 现在的账户中都有 10k,钱只是翻了一番。

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

【问题讨论】:

  • 您可能只想查看锁(也称为互斥锁)、原子数据类型和事务。
  • 这是一个非常非常好解决的问题。见Database locks
  • 那么不要让玩家做频繁的动作..即玩家不能在前一个动作之后的整整1秒内执行另一个动作。

标签: sql security web-applications


【解决方案1】:

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

原子性是数据库系统的关键组成部分之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-05
    • 2015-10-10
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多