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



请我有以下情况:

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

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

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

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

谢谢

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

我在专业的基础上戴锡箔帽(此外,我认为它们看起来很时髦......),这超出了我通常担心的范围。我担心让你的HTTPS代码不会成为火星中间人(MITM)攻击的受害者,因为这对攻击者来说更容易执行。

话虽如此,正如 samgak 在评论中提到的那样,String是不可变的。一旦密码在 String 中,您将面临您所描述的攻击的风险。

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

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

是的,理论上可以物理访问设备。至少可以调试应用程序并在编码/解码时在任何点捕获值,即它是打开的。

但更简单的方法是在用户输入密码时捕获用户输入本身。因此,您无需担心内存碎片。

相关内容

  • 没有找到相关文章

最新更新