鉴于客户端可以篡改 GUID,如果它们在客户端生成,想知道如果您允许脱机工作,如何缓解此问题。
假设您有一个待办事项列表应用程序并且正在脱机工作。根据我的想法,当您创建待办事项时,客户端正在为待办事项以及任何附件或关联记录创建 GUID。然后说你重新上线,它会同步。在客户端上创建的 GUID 可能已被篡改,因此在合并期间可能需要发生某些操作。也许所有新的 GUID 都是在服务器端创建的,并发送回客户端以覆盖客户端生成的 GUID。不确定。
想知道这里的最佳实践是什么。
我认为是的,ids可以在发送到服务器时重新分配。一种方法是使用客户端 ID 和服务器端 ID,后者仅在保存时才分配。然后也可以从设计中删除客户端 id,但在成功保存后必须更新所有引用。
然后问题是不可避免的不一致,因为如果服务器已经收到更新,分配了服务器端 ID,但确认响应从未返回给客户端,会发生什么情况。下次下载时,客户端将在服务器上看到一个新项目,它不能与任何客户端项目关联,除非有某种启发式方法来识别重复项(例如,如果没有服务器端 ID 的客户端项中的所有字段都相同,则很可能是相同的(。
我认为这不是一个安全问题,如果 id 的格式经过验证(例如它必须是 guid,即数字、字母和破折号(,客户端究竟发送什么并不重要。因此,从安全的角度来看,这几乎纯粹是一个输入验证问题,当然必须到位,必须在已经存在的ID上抛出错误等等。然后它还涉及访问控制,如果多个用户正在使用该应用程序,但这是一个不同的主题,无论如何都必须授权任何访问,并且访问控制决策不能仅根据 id 做出。也就是说,如果您可以访问任何您知道 id 的内容,则它不是一个好的访问控制模型。