我最近一直在查看应该是一个安全的iPhone应用程序用于工作相关任务的流量,我注意到该应用程序在与后端通信时不使用任何形式的会话ID /令牌.每个请求都包含用户名,密码和设备ID,所有
我真的觉得这是一个坏主意,但我不能提出太多好的理由来解释原因.
如果您是中间人攻击的受害者,攻击者在大多数情况下可以在您登录时找到您的密码,因为需要将用户名和密码发送到服务器以获取会话ID /令牌.
更好的方法可能是发送用户名,时间戳和时间戳和密码的哈希值.如果时间戳为x秒,则此服务器将丢弃请求,并且不必通过线路发送明文密码.
但是,我看过的大多数应用程序(除了那些使用誓言等等)只是以明文(通过https)发送用户名和密码来获取令牌.每次启动应用程序时都会发生这种情况(用户名和密码都存储在应用程序数据中).
正如主题所说,如果使用https,为什么从移动/网络应用程序发送用户名和密码到后端api是一个坏主意?
嗯,你自己说了.您必须在设备上存储用户名和密码.这些凭证存储的安全性如何?设备上安装的流氓应用程序是否能够检索凭据?如果流氓应用程序在与有效应用程序相同的帐户下运行,它可能可以.即使您将这些凭据加密存储,您也必须将秘密存储在设备本身上.此外,移动设备丢失/被盗的可能性要高得多,攻击者可以访问设备本身.
另一个原因是每次发送用户名和密码会增加攻击面.它将为攻击者提供更多具有常量数据的消息以尝试解密.
最后,验证密码,如果正确实施,应该相对较慢,使其不太适合API身份验证.
像OAuth 2.0这样的协议可以使用在有限时间内有效的访问令牌,并且您必须能够访问刷新令牌才能获得新的访问令牌.如果设备丢失或被盗,可以轻松撤销刷新令牌.