微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android系统对活页夹令牌的使用

我在this博客文章中了解到有关在Android系统中使用Binder令牌的信息.我看到了与唤醒锁相关的示例,其中令牌用于标识来自同一应用程序的后续请求.

我想问为什么在Android系统中调用应用程序的UID不足以跟踪来自该应用程序的后续请求?在识别应用程序方面,绑定器令牌是否需要满足UID不能满足的要求?

解决方法:

活页夹令牌不能像uid那样标识应用程序.令牌是能力或票证,这意味着拥有才是最重要的.换句话说,对于活页夹令牌,无论您是谁或什么都无关紧要,而仅取决于您是否拥有令牌.这最后一部分很关键:在Android Framework中,出于安全原因需要区分许多对象,但是它们要么都具有相同的uid(例如,system_server进程空间中的对象),并且/或者uid没有确定真正的主题(例如,在Binder RPC本地运行的代码).

相对于uid的这种差异使功能无法轻松实现,甚至使用uid也不可能实现.一个很好的例子是您引用的blog post

Applications can ask the InputMethodManager to hide the soft keyboard
by calling the hideSoftInputFromWindow(IBinder windowToken, int flags)
method, but must provide a window token as part of the request. If the
token doesn’t match the window token belonging to the window currently
accepting input, the InputMethodManager will reject the request. This
makes it impossible for malicIoUs applications to force-close a soft
keyboard opened by another application.

在这里使用令牌的主要原因是,窗口对象不是具有uid的对象.当然,它是某个过程的一部分,具有uid,但是无论该uid是什么,它都不是试图隐藏软键盘的应用程序的uid.因此,确保请求者拥有当前正在接受输入的窗口的唯一方法是强制应用程序提供首次创建窗口时WindowManager所提供的令牌.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐