Android 是共享引用';s模式\u多\u进程不如模式\u私有进程安全

Android 是共享引用';s模式\u多\u进程不如模式\u私有进程安全,android,process,sharedpreferences,Android,Process,Sharedpreferences,没有说明任何关于模式\u多\u进程是否安全(安全方面)的内容 那么,它安全吗?有理由不使用它吗?我想它不安全 该文档还指出:“这是姜饼(Android 2.3)中及其之前的遗留(但未记录)行为,在针对此类版本时暗示此标志。对于针对高于Android 2.3的SDK版本的应用程序,如果需要,必须显式设置此标志。”这似乎是他们不鼓励使用的旧功能。此标志与安全性无关,但与访问Concurence有关。效率较低,但应尽量避免多个进程(来自同一应用程序)访问底层文件所导致的问题。如果不编写多进程应用程序,

没有说明任何关于模式\u多\u进程是否安全(安全方面)的内容


那么,它安全吗?有理由不使用它吗?

我想它不安全


该文档还指出:“这是姜饼(Android 2.3)中及其之前的遗留(但未记录)行为,在针对此类版本时暗示此标志。对于针对高于Android 2.3的SDK版本的应用程序,如果需要,必须显式设置此标志。”这似乎是他们不鼓励使用的旧功能。

此标志与安全性无关,但与访问Concurence有关。效率较低,但应尽量避免多个进程(来自同一应用程序)访问底层文件所导致的问题。如果不编写多进程应用程序,则不需要它。如果需要,文档建议使用其他进程间通信。出于性能原因,而非安全原因,文档建议不要使用它

因此,一方面
MODE\u PRIVATE
/
MODE\u WORLD\u READABLE
/
MODE\u WORLD\u WRITEABLE
,另一方面
MODE\u MULTI\u PROCESS
是正交标志。如果您打开
SharedReferences
,方法是:

  • MODE\u PRIVATE
    -->安全
  • MODE\u WORLD\u READABLE
    -->不安全
  • MODE|u PRIVATE | MODE|u MULTI|u进程
    -->安全
  • MODE_WORLD_READABLE|MODE_MULTI_进程
    -->不安全
由于
MODE_PRIVATE
的值为0:
MODE_MULTI_进程
相当于
MODE_PRIVATE | MODE_MULTI_进程
(即安全)

实际上,
MODE\u MULTI\u PROCESS
的源代码中唯一的用法是
ContextImpl
类:

@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
    SharedPreferencesImpl sp;
    synchronized (sSharedPrefs) {
        sp = sSharedPrefs.get(name);
        if (sp == null) {
            File prefsFile = getSharedPrefsFile(name);
            sp = new SharedPreferencesImpl(prefsFile, mode);
            sSharedPrefs.put(name, sp);
            return sp;
        }
    }
    if ((mode & Context.MODE_MULTI_PROCESS) != 0 ||
        getApplicationInfo().targetSdkVersion < android.os.Build.VERSION_CODES.HONEYCOMB) {
        // If somebody else (some other process) changed the prefs
        // file behind our back, we reload it.  This has been the
        // historical (if undocumented) behavior.
        sp.startReloadIfChangedUnexpectedly();
    }
    return sp;
}
@覆盖
public SharedReferences GetSharedReferences(字符串名称,int模式){
SharedReferencesImpl sp;
已同步(sSharedPrefs){
sp=sSharedPrefs.get(名称);
如果(sp==null){
文件prefsFile=getSharedPrefsFile(名称);
sp=新的SharedReferencesImpl(预文件,模式);
sSharedPrefs.put(名称,sp);
返回sp;
}
}
if((mode&Context.mode\u MULTI\u PROCESS)!=0||
getApplicationInfo().targetSdkVersion
有一种机制可以防止来自外部进程的访问:SharedReferences是应用程序私有的。Android安全模型阻止其他应用程序访问该文件,即使它们可以让别人知道其名称(相信我,这并不容易)。

我不确定情况是否如此。。。跨进程访问共享pref有时非常方便。它不再是默认行为这一事实并不意味着它不安全,似乎没有任何机制来阻止其他外部进程的访问。。。除了不知道名称之外……我同意文档中所说的,但是文档中没有提到安全性并不意味着它不是一个问题。请解释一下,使用MODE_MULTI_流程保存敏感数据应该安全吗?安卓的文档中有没有提到这种机制?