CodeZineの次の記事で、「このContentProviderを持っているアプリケーションだけがアクセスできるように制限するには、android:exportedプロパティを明示的にfalseにします。」との記述がありますが、個人で調べた範囲ではAndroidのバージョンに依存しているようです。
技術/Android/PermissionExamples にて、Activity/Receiver/Service/ContentProviderを幾つかの組み合わせで呼べる・呼べないを網羅的に調べた資料を公開していますが、ContentProviderでの実験では以下の現象が確認されています。
タオソフトウェアの記事でも、同様の検証結果が公開されています。こちらでも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にて公開してますので、興味のある方は試してみてください。
コメント