Android ContentProviderのexport指定が使えない
8月の記事 Android ContetProviderを非公開にする方法にて、非公開にするには、android:exported=”false”を記載するだけでよく、別記事で書いたAndroid ContentProviderの制限 同じ証明書を持ったアプリのみアクセス可能にするのような手法は取る必要はないです的な記事を書きましたが、なにか違和感を持ってました。
それは、ContentProviderの、exportって何故全然知られていないんだろう?ということです。
これだけ簡単なのにぐぐってもあまり情報は出てきません。
よくよく検証した結果、Android 2.2以下ではexport指定が無視されて、falseに設定されても外部からアクセス可能な事がわかりました。
以下実際に動かしてみた検証結果です。
1.6(API Level4) | × |
---|---|
2.1(API Level7) | × |
2.2(API Level8) | × |
2.31(API Level9) | ○ |
2.33(API Level10) | ○ |
3.0(API Level11) | ○ |
3.1(API Level12) | ○ |
こんな感じで修正されたのが、2.3.1からですので結構最近です。複数端末対応を考えると、しばらくはexport指定は使用せずに、signature permissionを使用しての実装が良さそうです。
結局今までみなさん動作確認をして、これ使えないーって事で放置されて記事になっていなかったようです。
- Android ContetProviderを非公開にする方法
- Android ContentProviderの制限 同じ証明書を持ったアプリのみアクセス可能にする。
- Android sharedUserIdの使用
コメント
コメントを投稿