Android如何处理内存中的敏感数据

Lis*_*nne 2 security passwords android

请问我有以下场景:

该应用程序使用密码通过 HTTPS 访问某些远程 Web 服务;

为此,应用程序会询问用户密码,但不会将其存储在设备上(并以安全的方式使用它来访问网络服务)。

我担心的是:理论上可以访问内存以读取其中包含的数据并最终检索密码。

请问我该如何防止这种情况发生?

谢谢

Com*_*are 5

请问我该如何防止这种情况发生?

我戴锡箔帽是出于职业目的(而且,我认为它们看起来很漂亮……),这超出了我通常担心的范围。我担心您的 HTTPS 代码不会成为中间人 (MITM) 攻击的受害者,因为这对于攻击者来说更容易执行。

话虽如此,正如 samgak 在评论中提到的那样,String这是一成不变的。一旦密码出现在 a 中String,您就会面临所描述的攻击的风险。

如果您使用 anEditText来收集密码,则不要调用getText().toString()来获取用户输入的内容。getText()将返回一个Editable,它允许您获取字符,而不是一个String。然后,如果您的 HTTP 客户端 API 允许您使用 a 填写密码char[],那么一旦 HTTP 请求完成,您可以清除char[]clear()the的内容Editable,然后祈祷EditText和 kin 不会持有String代表任何地方用户输入的内容。这可能因设备而异,因为设备制造商长期以来一直在搞行为EditText,因此在 AOSP 代码方面可能干净的东西在某些制造商的硬件上可能不太干净。

如果您通过其他方式获取密码(例如,您自己的一组 PIN 输入按钮),请避免显示结果,并在完成后String擦除。char[]