缺少BroadcastReceiver權限

概述

比如在當前 Activity 下動態(tài)注冊一個廣播,我們會這樣做

this.registerReceiver(receiver, filter)

這樣的話,這個 receiver 組件是完全公開的,不僅僅我們的應用可以向它發(fā)送數(shù)據(jù),外部應用也可以指定相應的 action 來向它發(fā)送惡意數(shù)據(jù)
為了提高安全性,則需要對其進行權限限制,有兩種措施

方案一
registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler)

該方法還是允許接收外部的廣播,但添加了權限來進行限制
在動態(tài)注冊中的代碼

BroadcastReceiver receiver = new CBroadcastReceiver();
Handler handler = new CHandler();
IntentFilter filter = new IntentFilter();
filter.addAction("com.mirror.js");
String permission = "com.mirror.js.permission";
context.register(receiver, filter, permission, handler);    

如果使用的是靜態(tài)注冊,那就是這樣

<permission android:name = "com.mirror.js.permission"/>  

...

<receiver android:name="CBroadcastReceiver" android:permission="com.mirror.js.permission">
        <intent-filter>
            <action android:name="com.mirror.js" />
        </intent-filter> 
</receiver>

這樣的話,只有擁有了 “com.mirror.js.permission” 的權限的應用才能給該 BroadcastReceiver 發(fā)廣播

Intent intent = new Intent();
intent.setAction("com.mirror.js");
sendBrocast(intent, "com.mirror.js.permission");
方案二
LocalBroadcastManager

這是一個工具類,可以用來限制 BroadcastReceiver 的使用,只能應用內(nèi)發(fā)送和接收廣播
注冊廣播

LocalBroadcastManager manager = LocalBroadcastManager.getInstance(context);
BroadcastReceiver receiver = new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("com.mirror.js");
manager.register(receiver, filter);

發(fā)送廣播

Intent intent = new Intent();
intent.setAction("com.mirror.js");
manager.sendBrocast(intent);
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容