home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2011/12/04/ContentProviderのアクセス範囲について

日記/2011/12/04/ContentProviderのアクセス範囲について

日記 / 2011 / 12 / 04 / ContentProviderのアクセス範囲について
id: 1041 所有者: msakamoto-sf    作成日: 2011-12-04 19:00:42
カテゴリ: Android セキュリティ 

CodeZineの次の記事で、「このContentProviderを持っているアプリケーションだけがアクセスできるように制限するには、android:exportedプロパティを明示的にfalseにします。」との記述がありますが、個人で調べた範囲ではAndroidのバージョンに依存しているようです。

技術/Android/PermissionExamples にて、Activity/Receiver/Service/ContentProviderを幾つかの組み合わせで呼べる・呼べないを網羅的に調べた資料を公開していますが、ContentProviderでの実験では以下の現象が確認されています。

API Level 8 (Android 2.2)
android:exported="false"でも他のアプリ(署名も別)からアクセス可能。
API Level 10 (Android 2.3)
android:exported="false"で他のアプリからアクセス不可能("java.lang.SecurityException: Permission Denial"発生)

タオソフトウェアの記事でも、同様の検証結果が公開されています。こちらでもAPI Level 8以前はNG、API Level 9以降で有効との結果になっています。

端末メーカー側できちんと修正してリリースしている可能性もありますが、そこまでは調査しきれていません。

解決策としてはタオソフトウェアの記事でも紹介されていますが、signatureレベルのpermissionを使うことで、署名が異なる=外部アプリからの呼び出しをブロック出来るようになります。

一点気になるのが、記事中でのDropboxの修正内容で、exported="false"にしているだけです。これはAPI Level 8以前ではナンセンスです。もしかしたらメジャーな実機端末では2.2以前でも修正されていて問題ないのかもしれません。或いはgrant-uri-permissionを指定しているようなのでそれが影響しているのかもしれません。

一応宣伝ですが、技術/Android/PermissionExamples で公開している実験結果の追加検証(API Levelや実機など)を手伝っていただける方募集です。gmailを教えて頂ければ、編集レベルで共有します。実験に使ったアプリのソースもbitbucketでMercurialにて公開してますので、興味のある方は試してみてください。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2011-12-04 22:18:38
md5:905f7a4d6df329f446946502fb917add
sha1:fcc56b3457fdf1537e0d5ea8459ae036224a333d
コメント
コメントを投稿するにはログインして下さい。