Android 系统对 Binder Tokens 的使用
Android System's use of Binder Tokens
我正在 this 博客 post 上阅读有关在 Android 系统中使用 Binder 令牌的信息。我看到了与唤醒锁相关的示例,其中令牌用于识别来自同一应用程序的后续请求。
我想问一下为什么在Android系统中调用应用程序的UID
不足以跟踪来自应用程序的后续请求?是否需要 Binder 令牌来满足 UID 在识别应用程序方面不能满足的要求?
Binder 令牌不像 uid
那样识别应用程序。令牌是一种能力或票证,这意味着 possession 才是最重要的。换句话说,使用活页夹令牌,谁或什么并不重要,重要的是你是否拥有令牌。最后一部分是关键:在 Android 框架中,出于安全原因需要区分许多对象,但它们要么都具有相同的 uid
(例如,system_server
process space) and/or 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.
这里使用标记的主要原因是 window 对象不是具有 uid
的对象。当然,它是某处具有 uid
的某个进程的一部分,但无论 uid
是什么,它都不是试图隐藏软键盘的应用程序的 uid
。因此,确保请求者拥有当前接受输入的 window 的唯一方法是强制应用程序提供在首次创建 window 时由 WindowManager
提供的令牌。
我正在 this 博客 post 上阅读有关在 Android 系统中使用 Binder 令牌的信息。我看到了与唤醒锁相关的示例,其中令牌用于识别来自同一应用程序的后续请求。
我想问一下为什么在Android系统中调用应用程序的UID
不足以跟踪来自应用程序的后续请求?是否需要 Binder 令牌来满足 UID 在识别应用程序方面不能满足的要求?
Binder 令牌不像 uid
那样识别应用程序。令牌是一种能力或票证,这意味着 possession 才是最重要的。换句话说,使用活页夹令牌,谁或什么并不重要,重要的是你是否拥有令牌。最后一部分是关键:在 Android 框架中,出于安全原因需要区分许多对象,但它们要么都具有相同的 uid
(例如,system_server
process space) and/or uid
未识别真正的主题(例如,Binder RPC 本地端的代码 运行)。
这种相对于 uid
的差异实现了不易实现的功能,甚至无法使用 uid
。您引用的 blog post 就是一个很好的例子:
Applications can ask the
InputMethodManager
to hide the soft keyboard by calling thehideSoftInputFromWindow(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, theInputMethodManager
will reject the request. This makes it impossible for malicious applications to force-close a soft keyboard opened by another application.
这里使用标记的主要原因是 window 对象不是具有 uid
的对象。当然,它是某处具有 uid
的某个进程的一部分,但无论 uid
是什么,它都不是试图隐藏软键盘的应用程序的 uid
。因此,确保请求者拥有当前接受输入的 window 的唯一方法是强制应用程序提供在首次创建 window 时由 WindowManager
提供的令牌。