7

2つのアプリケーションがあります。
サービスを使用する場合、許可を設定して、app1インテントを にのみ送信できるようにすることができますapp2: ( ) で
許可を定義し、 でその許可を使用します。 のサービスはその許可によって保護されています。 このように、 のみが のサービスにインテントを送信でき、他のアプリは (私の署名が漏洩しない限り) のサービスにインテントを送信できません。app2protection level: signatureapp1
app2
app1app2app2

ブロードキャスト レシーバーでも同じことができますか?

  • app1: sendBroadcast(意図、許可)
  • app2: パーミッションを定義し、そのパーミッションを使用します。

sendBroadcast(intent, permission) の使用に関する私の理解では、アプリケーションは許可を「使用」する必要はありません。つまり、どのアプリケーションでもインテントを に送信できますapp2app2これらの許可パラメーターは、他のアプリケーションがこのインテントを受け取らないようにするため、に対してのみチェック されました。( を削除し、定義された同じパーミッション文字列でapp2fake をインストールすると、 fakeは からインテントを取得できますが、これは予想外です)app2app2app1

ところで、アプリケーションがパーミッションを定義してそれ自体を使用する場合、protectionLevel(signature) は意味がないようです。これは本当ですか?

これで、追加のアクセス許可を設定できます。

  • app1: パーミッションを定義し、そのパーミッションを使用します。
  • app2: 受信者はその権限のみに制限されます。

繰り返しますが、 を削除し、まったく同じ権限でapp1fake をインストールすると、 fakeは に偽のインテントを送信できます。偽のインテントを受信しないようにするにはどうすればよいですか?app1app1app2app2

ありがとう

4

2 に答える 2

6

このタグは、ブロードキャスターが持つべきパーミッションを定義することもできます。http://developer.android.com/guide/topics/manifest/receiver-element.html#prmsnを参照してください。

次のようにコーディングすることで、無許可のブロードキャストから受信機を保護できるということです。

...
<permission android:name="com.yourapp.PERMISSION"
    android:protectionLevel="signature"
        android:label="@string/permission_label"
        android:description="@string/permission_desc">
</permission>
...

<receiver android:name=".MyReceiver"
    android:permission="com.yourapp.PERMISSION">
    <intent-filter>
        <action android:name="com.yourapp.ACTION" />
    </intent-filter>
</receiver>
...
于 2012-03-02T09:40:09.293 に答える