请注意以下情况:
该应用使用密码通过HTTPS访问某些远程Web服务;
要这样做,应用程序会询问用户密码,不会将其存储在设备上(并以安全的方式使用它来访问Web服务)。
我关注的是:它可以通过访问内存来读取其中包含的数据并最终检索密码。
请问如何防止这种情况发生?
由于
答案 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)
是的,理论上可以在物理访问设备时使用。至少可以调试应用程序并在编码/解码时捕获任何点的值,即它是打开的。
但更简单的方法是在输入密码时捕获用户输入。所以,你不必担心记忆力下降。