使用 Appcelerator 在客户端存储密码 - 设计方法

Storing password in the client side using Appcelerator - Design Approach

我正在使用 Appcelerator 创建一个应用程序,用户需要输入用户名和密码才能登录。登录后,用户可以启用 TouchID 进行身份验证。注销后,用户可以使用TouchID进行身份验证并使用应用程序。

我的流程是,一旦提供了用户名和密码,我就使用以下模块 iOS Keychain Module 将这两个信息存储在钥匙串中。然后我使用 ti.touchid 验证指纹,如果成功,然后我从钥匙串中检索用户名和密码,然后通过 HTTPS 网络服务调用发送它,并将用户登录到应用程序。

我的疑问是,这是否是一种可接受的方法。

我不是 iOS 开发人员,任何 ti 或钥匙串术语对我来说都没有任何意义。这是为了开始并减少我可能获得的否决票的数量。

就安全性而言,我建议您想象获取该特定用户的 phone,您知道您在其中存储了一些身份验证凭据。假设我是你的应用程序的用户,已经登录并将我的凭据保存在我的设备上的某个地方,你通过从我这里窃取它来获得这个 phone。

现在,你还能访问我的帐户吗?有权访问物理 phone 的黑客是否能够检索存储在您的钥匙串存储中的任何信息?

如果是这样,如果你无论如何都能想到这样做,那么你的方法是无效的

我知道您想通过确保用户仅使用指纹登录来节省用户的时间,这是考虑这种方法的正当理由,但您必须从逆向工程的角度考虑一切。

其他建议是使用即时哈希将信息存储在钥匙串中,并确保在恢复之前进行检查。例如,保存在 "home wifi" 上的用户凭据只能在同一 wifi 网络上使用您的指纹 "at home" 进行验证,而在不同的网络上则无效。

即) (keychainItem.x = y) 只有在(其他)

时才为真

这个(其他东西)可以防止黑客访问钥匙串,即使他们可以访问设备本身。

我在使用存储的 cookie 编写 Web 应用程序时自己这样做。例如,仅当从保存它的同一 IP 访问它时,我才使用存储的 cookie。只要 IP 地址发生变化,即使 cookie 值正确,用户也必须重新进行身份验证。

希望对您有所帮助。