Android6.0でMODE_MULTI_PROCESSが非推奨になったので、プリファレンスのモード指定は、MODE_PRIVATE一択になりました。

A+ a-


Android6.0 (Marshmallow)で、MODE_MULTI_PROCESSが非推奨になりました。
http://developer.android.com/intl/ja/reference/android/content/Context.html#MODE_MULTI_PROCESS

MODE_MULTI_PROCESS、プレファレンスファイルを作成する時などに、getPreferences等のメソッドの引数に指定されるファイルアクセスモードで、AndroidOS3.0の時に新しく追加され、複数のプロセスから同じプレファレンスファイルにアクセスする時に使用します。

今回、以下のような説明が記載されていました。

API Level23で非推奨
MODE_MULTI_PROCESSは、異なったプロセス間での同時修正を両立するためのメカニズムを提供しません。さらにアンドロイドの一部のバージョンでは確実に動作しません。
アプリケーションは、これを使用しないでください。その代りにContentProviderのようなクロスプロセスでのデータ管理手法を使用してください。
....
確実に動作していなかったようです。



プリファレンスのアクセスモードには、他には
MODE_WORLD_WRITERABLE,MODE_WORLD_READABLE等他のアプリから読み書き可能アクセスモード指定もありましたが、これらは、API Level17で非推奨になっています。

API Level17で非推奨

他の全てのアプリから書き込み可能なファイルを作成するのは非常に危険です、またセキュリティホールをアプリケーションに引き起こす事があります。
代わりにアプリケーションは、ContentProviderや、BroadcastReceiverやServiceのような、相互通信のための正式な機能を使用する事を強くお勧めします。
このアクセスモードは、バックアップやリストアした時に、ファイルアクセスモードがそのままである事はは保証されません。
という事で、今まで以下の4つあったアクセスモードですが

  • MODE_PRIVATE
  • MODE_WORLD_READABLE(非推奨)
  • MODE_WORLD_WRITEABLE(非推奨)
  • MODE_MULITI_PROCESS(非推奨)

MODE_PRIVATE=0x00のみになりました。

最後に


小ネタでしたが、WORLDモードを使っているアプリは結構あり、セキュリティ的に問題でした。アプリ間のデータ共有は、ContentProviderとか他の物でもできるし、サーバーでも良いわけなので、自分用のファイルしか作れなくなったのはシンプルで良くなったと思ってます。

ただ、シェアードプレファレンスの、「シェアード」という名前が浮いてしまうことになってしまったのがかわいそうです。




がく

がく

アンドロイドアプリの脆弱性検査ツールのRiskFinder株式会社 代表取締役 スマフォのセキュリティ色々やってます。

リスクファインダーはAndroidアプリのセキュリティホールを見つけます!

Androidスマートフォンが急速に普及するとともにアプリの脆弱性報告も急増しています。
リスクファインダーは、Androidアプリの脆弱性診断WEBサービスです。
500項目以上のチェックでアプリの脆弱性や問題を検出し、セキュアなアプリ開発をサポートします。

  • ブラウザでファイルをアップロードするだけ
  • アプリの脆弱性を指摘するだけでなく対処方法も提示
  • 頻繁にバージョンアップするAndroidの最新情報に素早く対応

リスクファインダーの詳細はこちら