这个问题以各种形式出现了几次,但我没有看到满足我要求的答案或者让我充满信心。让我设置场景。
我们目前有一个Web应用程序,它允许用户提交对数据最终存在于SQL Server数据库中的预设问题的响应,我们还有一个Windows应用程序可以执行相同的操作,但可以在脱机容量下工作;即它连接到SQL Server,下载问题,允许用户离线完成它们,当他们下次有网络连接时,他们可以同步数据,将其上传到SQL Server。太好了!
作为我们的开发策略的一部分,考虑到HTML 5的离线功能和本地存储,尝试将这些产品整合到单个Web应用程序中似乎是完全合理的。这意味着我们能够在单个代码库上工作,这也可以使应用程序在大多数设备上的浏览器中运行;平台独立。
考虑到这一点,我发现了一些潜在的问题,我真的很感激这些问题:
用户需要能够在离线和在线模式下登录。这可能意味着我们下载了所有用户用户名和密码的哈希值,或者只是那些在联机模式下登录的用户名和密码的哈希值。然而,即使这样做,也需要有一种方法来检查这些,并且鉴于Javascript是可读的,有人可以轻松地对其凭证进行逆向工程。是的,您可以对代码进行模糊处理,但这并不是绝对可靠的。
需要本地存储的数据可能非常敏感;包含个人信息等。因此,这也需要加密,至少AES 256.
我希望乌托邦?这件事在这个时候是不可能的吗?我是否需要寻找另一种解决方案并暂时解雇它?
非常感谢你们可爱的人的帮助。
答案 0 :(得分:0)
首先,更简单的问题2:这是完全可能的。您可以在设备上生成密钥并在同步时通过https将其发送到您的服务器,然后服务器可以解密数据。
关于问题1我说离线登录不太可行但你真的需要吗?一旦下载了问卷(这需要在线模式,因此要求登录很好),您只需要在同步时传输它,再次需要在线,您也可以要求用户登录。我不建议将任何合理的用户数据(例如哈希)下载到设备。
答案 1 :(得分:0)
你可以做的是只有在在线登录后才缓存当前用户。这将降低在本地数据库中枚举用户的风险。
然后您需要在前端加密用户的数据,我会使用一个可以为您完成工作的库(例如,RxDB)。 RxDB 接受一个密码(您可以即时生成)并基于它加密您的数据库数据。然后用户填写表单(做他想做的任何事情),如果突然间互联网消失了,用户仍然可以继续他的工作,并且必须将该工作添加为待处理的请求才能进行同步。 (你已经有了)
当互联网恢复时,您将检查用户的会话是否已过期,如果是,则提示用户再次登录并进行同步(如果是同一用户)。如果它仍然存在,请执行同步。