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

时间:2015-06-14 11:20:56

标签: android security passwords

请注意以下情况:

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

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

我关注的是:它可以通过访问内存来读取其中包含的数据并最终检索密码。

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

由于

2 个答案:

答案 0 :(得分:4)

  

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

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

话虽如此,正如samgak在评论中暗示的那样,String是不可改变的。一旦密码位于String,您就有可能遭受所描述的攻击。<​​/ p>

如果您使用EditText来收集密码,请不要致电getText().toString()以获取用户输入的内容。getText()将返回Editable,这样您就可以得到字符,而不是String。然后,如果您的HTTP客户端API允许您使用char[]填写密码,则在HTTP请求完成后,您可以清除char[]clear() {的内容{1}},然后祈祷Editable和亲们没有抓住EditText代表用户输入内容的任何地方。这可能因设备而有所不同,因为设备制造商已经有了有关String行为的长期历史,因此在AOSP代码方面可能不太干净,某些制造商的硬件可能不那么干净。

如果您通过其他方式获取密码(例如,您自己的一组PIN输入按钮),则只需避免EditText表示结果,并在您&#时清除String 39;完成它。

答案 1 :(得分:0)

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

但更简单的方法是在输入密码时捕获用户输入。所以,你不必担心记忆力下降。