use*_*425 16 security android application-security
我有一个要求输入用户名和密码的活动,然后在我的应用中启动另一个活动来完成用户注册.我想将用户名+密码作为意图附加内容发送到第二个活动.就像是:
Intent intent = new Intent(activity, SecondActivity.class);
intent.putExtra("u", username);
intent.putExtra("p", password);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我的清单定义了SecondActivity,如:
<activity
android:name="com.me.SecondActivity"
android:label="">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.me.FirstActivity" />
</activity>
Run Code Online (Sandbox Code Playgroud)
现在我对发送用户名+密码作为意图附加内容的安全性有疑问 - 是否有可能另一个应用程序拦截使用欺骗意图过滤器调用SecondActivity?除此之外,我想知道附加意图会发生什么,它们是否曾被操作系统持久存储到磁盘上?如果有的话,有人可能会在那里看他们.
谢谢
jac*_*ted 11
这里的关键是隐含意图和显式意图之间的区别.您的示例使用Explicit Intent,因为您指定了要运行的确切类.这很好,因为Explicit Intents不能被拦截并且将保留在您的应用程序中.
然而,隐含意图打开了几个可能的攻击向量.本文将更详细地讨论它.我非常建议不要使用Implicit Intents传递任何类型的敏感信息.
来自Android文档:
Explicit Intents指定了一个组件(通过setComponent(ComponentName)或setClass(Context,Class)),它提供了要运行的确切类.
隐含意图没有指定组件; 相反,它们必须包含足够的信息以供系统确定哪个可用组件最适合该意图运行.
正如我所说,对于你在问题中的例子,通过Intent传递密码是相对安全的,因为没有其他应用程序可以在运行时拦截它.但重要的是要注意,并非总是如此,并且使用隐式Intent理论上可以允许Intent Interception并暴露敏感信息.
编辑:
至于将Intent Extras保存到磁盘,是的,这是一个风险.但请记住,如果有人在设备上具有root访问权限并且正在使用它来尝试在磁盘中搜索此持久意图信息,则可能有更简单的方法来获取相同的信息.无论你做什么,有权访问物理设备的人都可以关闭密码,除非你做了一些非常优秀的加密.
我对整体安全性观点的建议是尽量不要在任何长期或持久的环境中直接处理密码.密码只应在登录过程中使用,并在之后立即丢弃(假设您正在使用服务器进行身份验证).因此,在正常使用应用程序(具有真实密码的合法用户)的情况下,您不必担心恶意行为者检查设备内存,因为当恶意行为者获取设备时,密码长期以来已从内存中删除.
归档时间: |
|
查看次数: |
3351 次 |
最近记录: |