앤드류스 방송 브로드 캐스트 리시버의 해결 보안 문제

다음과 같이 브로드 캐스트 리시버 안드로이드 널리 안드로이드 구성 요소 사이의 통신 시스템으로 사용, 네 가지 구성 요소 중 하나이며, 주로 사용되는 장면은 다음과 같습니다 :

  • 동일한 앱 내부 동일한 메시지 통신 구성 요소 (단일 또는 복수의 스레드 사이)
  • 앱 내부의 다양한 구성 요소 사이에 동일한 메시지 통신 (단일 프로세스)
  • 프로세스 응용들을 갖는 동일한 다른 구성 요소 간의 메시지 통신
  • 다른 응용 프로그램과 구성 요소 간의 메시지 통신
  • 앱 사이 특정 상황에서 메시지를 전달하기위한 안드로이드 시스템

그러나, 우리는 방송 메시지 통신 프로세스를 사용하여, 보안 문제를 간과하기 쉽다. 다른 사람이 악의적 인 데이터 우리의 방송 수신기에 방송 보낼 수있는, 당신은 또한 우리가 전달하는 데이터, 우리가보고 싶지 않아 두 경우 모두를 수신하기 위해 방송 수신기를 등록 할 수 있습니다.
그렇다면이 두 가지 상황을 피할 수 있습니까? 이 문제를 해결하기 전에 우리는 먼저 방송을 봐주세요.

원리 방송

안드로이드 정보 공개에 따라, 관찰자 ​​패턴을 사용하여 방송 / 이벤트 모델을 가입. 따라서, 크게 복제 된 라디오 방송 수신기 및 송신기의 구현 관점에서, 안드로이드, 그래서 그 시스템이 쉽게 통합 될 수 있고, 확장 성에서 더. 다음과 같이 구체적인 구현 프로세스 지점은 대략 요약 :

  1. 방송은 바인더에 의해 AMS (작업 관리자 서비스)와 메커니즘을 등록 브로드 캐스트 리시버를 수신기
  2. 방송 송신자는 바인더 메커니즘에 의해 AMS에 방송을 전송
  3. 메시지 큐를 찾기 대응 AMS 브로드 캐스트 리시버 만나는 대응 상태 (정상 환경 하에서 작업) 방송 된 브로드 캐스트를 송신하는 (로 IntentFilter / 권한 등), 루프
  4. 이 방송 메시지 루프는 콜백 브로드 캐스트 리시버 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. 동적 등록
    컨텍스트 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);  

이 다섯 방송 보안 솔루션, 당신은 자신의 이해에 따라, 자신의 프로그램 프로젝트를 선택할 수 있습니다.

대중의 관심의 코드 번호를 청소에 오신 것을 환영합니다, 더 나은 의사 소통

게시 된 115 개 원래 기사 · 원 찬양 67 ·은 10 만 + 조회수

추천

출처blog.csdn.net/meifannao789456/article/details/100079324