如何离线管理 GUID

How to manage GUIDs offline

考虑到 clients can tamper with GUIDs 如果它们是在客户端生成的,想知道如果允许离线工作如何缓解这个问题。

假设您有一个待办事项列表应用程序并且正在离线工作。根据我的想法,当您创建待办事项时,客户端正在为待办事项以及任何附件或关联记录创建 GUID。然后说你回到网上,它同步了。在客户端创建的 GUID 可能已被篡改,因此在合并期间可能需要发生一些事情。也许所有新的 GUID 都是在服务器端创建的,然后发送回客户端以覆盖客户端生成的。不确定。

想知道这里有什么最佳实践。

我认为是的,id 可以在发送到服务器时重新分配。可以做到这一点的一种方法是拥有一个客户端 ID 和一个服务器端 ID,后者仅在保存时分配。然后也可以从设计中删除客户端 ID,但在成功保存后必须更新所有引用。

然后问题是不可避免的不一致,因为如果服务器已经收到更新,分配了服务器端 ID,但确认响应从未返回给客户端,会发生什么情况。在下一次下载时,客户端将在服务器上看到一个新项目,它不能与任何客户端项目相关联,除非有某种启发式方法来识别重复项(例如,如果客户端项目中的所有字段都相同没有服务器端 ID,它很可能是相同的)。

不过,我认为这不是一个安全问题,如果 id 的格式经过验证(例如,它必须是一个 guid,即数字、字母和破折号),那么究竟是什么并不重要客户端发送。所以从安全的角度来看,这几乎纯粹是一个输入验证问题,这当然必须到位,必须在已经存在的 ids 上抛出错误等等。然后它还涉及访问控制,如果多个用户正在使用该应用程序,但这是一个不同的主题,无论如何都必须授权任何访问,并且访问控制决策不能仅根据 ID 做出。也就是说,如果您可以访问您知道其 ID 的任何内容,则它不是一个好的访问控制模型。