アンドリュース放送BroadCastReceiver解決のセキュリティ問題

BroadCastReceiverアンドロイドが広くAndroidのコンポーネント間の通信方式として使用される4つの成分の一つである、シーンが主に使用されている以下の通りであります:

  • 同じアプリケーション内の同じメッセージ通信コンポーネント内(単一または複数のスレッド間)
  • アプリ内部の様々な構成要素間で同じメッセージ通信(単一のプロセス)
  • 処理アプリを複数有する同一のさまざまなコンポーネント間のメッセージ通信
  • 異なるアプリケーション間のコンポーネント間のメッセージ通信
  • アプリケーション間および特定の状況下でメッセージを通信するためのAndroidシステム

しかし、我々はブロードキャストメッセージの通信プロセスを使用し、セキュリティ上の問題を見落とすことは容易です。その他の悪意のあるデータ、当社の放送受信機にブロードキャストで送信することができ、あなたはまた、我々は通過したデータ、我々は見たくないの両方のケースを受け取るために私達の放送受信機を登録することができます。
それでは、どのようにこれら二つの状況、それを避けるのですか?この問題を解決する前に、我々は最初の放送を見てください。

原則として放送

Androidの情報のリリースに基づいて、オブザーバーパターンを使用して放送されている/イベントモデルをサブスクライブします。したがって、大幅にデカップリングラジオ放送受信機と送信側における実装の観点、アンドロイド、その結果、システムを容易に統合することができ、より良好なスケーラビリティから。次のように大まかに要約具体的な実施プロセスポイント:

  1. 放送は、バインダーにより、AMS(活動マネージャサービス)のメカニズムに登録するBroadcastReceiverを受信機
  2. ブロードキャスト送信者はバインダー機構によってAMSにブロードキャストを送信します
  3. 発見AMS BroadcastReceiver満たし対応する条件(IntentFilter /許可、等)、ブロードキャストを送信するBroadcastReceiver(通常の状況アクティビティ下)ループ対応するメッセージ・キュー
  4. このブロードキャストメッセージループは、コールバックBroadcastReceiver onReceive()メソッドを実行します

したがって、放送送信及び放送受信機は、メッセージ配信と観察モードが終了すると、中央に属するAMS処理センターをサブスクライブするために属します。送信者と受信者の放送の実装は非同期放送され、受信者が受信したか否かを気にしない私たちが受け取ったことができたときに、最後に受信機が確認されていませんブロードキャストを送りました。

ブロードキャスト登録方法

静的登録と動的登録:登録方法二つのカテゴリーに放送します。

  1. 静的登録
    AndroidManifest.xmlファイルに直接登録する次のように、例を示します。
<receiver android:name=".MyBroadcastReceiver" >
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
    </intent-filter>
</receiver>
  1. 動的登録
    BroadcastReceiverを動的にプログラムに登録し、コンテキストregisterReceiver関数を呼び出すことにより、以下のように、例を示します。
mBroadcastReceiver = new MyBroadcastReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
intentFilter.addAction("android.intent.action.BOOT_COMPLETED");
registerReceiver(mBroadcastReceiver, intentFilter);

ブロードキャスト・セキュリティ・ソリューション

  1. 静的放送登録で追加することであるandroid:exported="false"ブロードキャスト、他のアプリケーションには、この放送受信機の応答の適用を禁止するプロパティを。
<receiver android:name="com.xiuxiuing.MyBroadCastReceiver" android:exported="false">  
            <intent-filter >  
               ...
           </intent-filter>  
       </receiver>  
  1. 設定によりブロードキャストの動的登録、登録するとintent.setPackage("com.xiuxiuing.demo")、あなたの放送を決定するためには、そのアプリケーションに対して有効です。
Intent intent=new Intent("com.xiuxiuing.action");  
intent.setPackage("com.xiuxiuing.demo");  
this.sendBroadcast(intent);  
  1. 使用はLocalBroadcastManagerまた、報知情報を受信することはできません同じアプリケーションの他のプロセス:他のプロセスがブロードキャスト情報のメモを受け取ることができない、ブロードキャストプロセス内に実装されます。
// 发送广播
Intent intent = new Intent("com.xiuxiuing.action");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

// 接收广播
 IntentFilter filter = new IntentFilter();    
 filter.addAction("com.xiuxiuing.action");    
 mReceiver = new MyBroadCastReceiver();    
 mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);  
 mLocalBroadcastManager.registerReceiver(mReceiver, filter);  
  1. 使用sendBroadcast(Intent intent, receiverPermission)この権限を持つ唯一のアプリケーションは、この放送を扱うことができ、放送権を送信します。
// 广播发送
Intent intent = new Intent("com.xiuxiuing.action");
sendBroadcast(intent,"com.xiuxiuing.custom.permission");

// 广播接收
// 在接收广播的APP 的 Manifest.xml文件中添加自定义权限
 <uses-permission android:name="com.xiuxiuing.custom.permission" />
 <permission
        android:name="com.xiuxiuing.custom.permission"
        android:protectionLevel="normal"></permission>

// 注册广播接收器
 IntentFilter filter = new IntentFilter();    
 filter.addAction("com.xiuxiuing.action");    
 mReceiver = new MyBroadCastReceiver();    
 registerReceiver(mReceiver, filter);  
  1. 使用registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)登録放送は、放送契約はAPPを送信する権限を有します。
// 广播发送
// 在发送广播的APP 的 Manifest.xml文件中添加自定义权限
 <uses-permission android:name="com.xiuxiuing.custom.permission" />
 <permission
        android:name="com.xiuxiuing.custom.permission"
        android:protectionLevel="normal"></permission>

// 发送广播
Intent intent = new Intent("com.xiuxiuing.action");
sendBroadcast(intent);

// 广播接收
 IntentFilter filter = new IntentFilter();    
 filter.addAction("com.xiuxiuing.action");    
 mReceiver = new MyBroadCastReceiver();    
 registerReceiver(mReceiver, filter, "com.xiuxiuing.custom.permission", null);  

これらの5つのブロードキャスト・セキュリティ・ソリューションは、あなたが自分自身の理解によると、自分のプログラムのプロジェクトを選択することができます。

世間の注目のコード番号を掃引するためにようこそ、より良いコミュニケーション

公開された115元の記事 ウォン称賛67 ビュー10万+

おすすめ

転載: blog.csdn.net/meifannao789456/article/details/100079324