CodeZineの次の記事で、「このContentProviderを持っているアプリケーションだけがアクセスできるように制限するには、android:exportedプロパティを明示的にfalseにします。」との記述がありますが、個人で調べた範囲ではAndroidのバージョンに依存しているようです。 - ContentProviderのアクセス範囲 ――Dropboxにおける脆弱性の修正:CodeZine -- http://codezine.jp/article/detail/6286 [[997]] にて、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以降で有効との結果になっています。 - Taosoftware: Android ContentProviderのexport指定が使えない -- http://www.taosoftware.co.jp/blog/2011/10/android_contentproviderexport.html 端末メーカー側できちんと修正してリリースしている可能性もありますが、そこまでは調査しきれていません。 解決策としてはタオソフトウェアの記事でも紹介されていますが、signatureレベルのpermissionを使うことで、署名が異なる=外部アプリからの呼び出しをブロック出来るようになります。 一点気になるのが、記事中でのDropboxの修正内容で、exported="false"にしているだけです。これはAPI Level 8以前ではナンセンスです。もしかしたらメジャーな実機端末では2.2以前でも修正されていて問題ないのかもしれません。或いはgrant-uri-permissionを指定しているようなのでそれが影響しているのかもしれません。 一応宣伝ですが、[[997]] で公開している実験結果の追加検証(API Levelや実機など)を手伝っていただける方募集です。gmailを教えて頂ければ、編集レベルで共有します。実験に使ったアプリのソースもbitbucketでMercurialにて公開してますので、興味のある方は試してみてください。