我是新来的,我负责改进Android应用程序和该应用程序使用的API,因为最后一位开发人员离开了公司。
根据Google Play商店的数据,现在该应用程序很小,只有不到500人安装了它,但是让我担心的是,我意识到在Android中开发此应用程序的人将用户的密码保存在手机中以纯文本形式使用localStorage.setItem
,然后每次用户想要登录时,他都会使用localStorage.getItem
恢复密码并将其发送到API。在Rails API中,密码的处理要安全得多,但是他使用GET请求进行身份验证(老实说,他使用GET进行所有操作,编辑资源,创建资源等(,尽管他使用HTTPS,但API也可以接受HTTP请求。
我不是安全专家,但显然这很糟糕......
我可以在短期内做些什么来提高此应用程序的安全性?
- 现在,我使API仅接受HTTPS请求。
- 我计划在适当的时候更改 POST 的 GET 请求。
- 我还计划在用户注册时保存密码的哈希,然后使用此哈希,就好像它是真正的密码一样。
正如我所说,我不是安全方面的专家,但我不想做像以前的开发人员那样糟糕的事情,所以我想听到更多的意见,我还能做些什么来提高 Rails 和 Android 中应用程序的安全性?如何更小心地处理敏感信息?
问候。
这不是世界上最糟糕的问题,密码应该通过https安全地传输。主要问题是,如果不更改密码,就不可能使会话无效。假设您在一台设备上登录,然后从另一台设备上登录,您想注销第一台设备,但您无权访问第一台设备,而不是在不更改密码的情况下无法注销第一台设备。使用存储在客户端上的哈希密码也好不到哪里去,因为哈希现在已成为密码。
应该如何完成以及大多数网站如何做到这一点,您将用户名/密码发送到登录 API,登录 API 返回身份验证令牌。然后,从现在开始,身份验证令牌将用于对所有 api 请求进行身份验证。这样做的好处是,服务器可以使身份验证令牌失效,并且会话过期,这会阻止设备访问 api,直到再次登录。
一个流行的库是devise_token_auth,它为您处理所有这些。
但是,如果您的应用程序无法列出活动会话并使其无效,那么您将从中获得任何好处。同样,通过https将密码发送到您的服务器并不是特别不安全。其他应用程序无法访问应用程序专用存储区域,如果设备受到威胁,因此该区域不安全,那么您无论如何都无能为力。