<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
前言:
在看這個變更之前,我們需要回憶下 Android 12 的一個安全性變更, 即宣告了 <intent-filter>
的Activity、BroadcastReceiver、Service 必須宣告 android:exported
, 否則將會無法被啟動。
Android 12 的這個變更是為了防止開發者在不知情的情況下,宣告了一個 intent-filter 就會使得這些元件對外公開,一定程度下強化了安全性。
但是卻漏掉了顯式 Intent 啟動和 Broadcast Receiver 動態註冊兩種情況,便在 13 中分別推出了兩項變更來進行加強。
Android 13 開始 Intent 過濾器會遮蔽不匹配的 intent,即便是指定了 Component 的顯式啟動。
在 13 以前:
也許你覺得這並沒有什麼,但是如果 App 只針對 過來的 Route 做了安全校驗,就造成了校驗上的疏漏。
假如我們提供了的 Activity 像如下一樣宣告:
<activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.TEST" /> <data android:mimeType="vnd.android.cursor.dir/event"/> </intent-filter> </activity>
在 13 之前,其他 App 採用了顯式啟動,即便是錯誤的 ACTION 是可以正常啟動我們的 Activity。
private fun testIntentFilters() { Intent().setComponent( ComponentName("com.example.demoapplication", "com.example.demoapplication.MainActivity") ).apply { action = "android.intent.action.TEST_A" startActivity(this) } }
而執行在 13 上的話,將無法啟動並會發生如下錯誤:
PackageManager: Intent does not match component's intent filter: Intent { act=android.intent.action.TEST_A cmp=com.example.demoapplication/.MainActivity }
PackageManager: Access blocked: ComponentInfo{com.example.demoapplication/com.example.demoapplication.MainActivity}
除了 ACTION 修改正確以外,data 也要滿足即 Intent-filter 完全符合才可以啟動。
private fun testIntentFilters() { Intent().setComponent( ComponentName("com.example.demoapplication", "com.example.demoapplication.MainActivity") ).apply { action = "android.intent.action.TEST" data = CalendarContract.Events.CONTENT_URI startActivity(this) } }
如下的幾種場景下的 Intent 並不在本次變更的影響範圍內:
<intent-filter>
SystemServer
、採用 System UID 的系統 AppRoot
程序發出的 Intent如果目標執行的版本基於 Android 13,並且不是上述豁免物件的話,需要做些檢查和必要的修改。
按照啟動方和目標方兩種情況進行適配辦法的探討:
<intent-filter>
<intent-filter>
<intent-filter>
的資訊13 上實測發現 Service 元件在顯式啟動下,即便是錯誤的 ACTION,仍能被正常啟動。這是有意為之還是 Beta 版漏洞,原始碼尚未公開,原因未知。
為了幫助提高執行時接收器的安全性,Android 13 允許您指定您應用中的特定廣播接收器是否應被匯出以及是否對裝置上的其他應用可見。
如果匯出廣播接收器,其他應用將可以向您的應用傳送不受保護的廣播。此匯出設定在以 Android 13 或更高版本為目標平臺的應用中可用,有助於防止一個主要的應用漏洞來源。
TargetSDK 升級到 Android13 的 App 在動態註冊 Receiver 的時候不指明該 flag,那麼會收到如下的 crash:
java.lang.SecurityException: com.example.demoapplication: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
目前上述限制不是預設生效的,需要開啟如下相容性變更:
DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED
另外,當你的 Receiver 宣告了 RECEIVER_NOT_EXPORTED 的話,其他 App 向其傳送廣播會失敗,並列印如下紀錄檔提醒你的 Receiver 需要公開:
BroadcastQueue: Exported Denial: sending Intent { act=com.example.demoapplication.RECEIVER flg=0x10 }, action: com.example.demoapplication.RECEIVER from com.example.tiramisu_demo (uid=10161)
due to receiver ProcessRecord{8e5f11c 16942:com.example.demoapplication/u0a158} (uid 10158) not specifying RECEIVER_EXPORTED
需要留意的是,系統級廣播是受保護的,普通 App 沒有許可權傳送。
所以只是監聽系統廣播的話,動態註冊的 Receiver 無需指定上述 flag。即便指定了 RECEIVER_NOT_EXPORTED,和靜態註冊方式一致也能正常接收、不受影響。
找到所有動態註冊 Broadcast Receiver 的程式碼。如果監聽的包含非系統廣播,請根據是否公開給其他 App 的需要使用來新增 flag 的宣告。
RECEIVER_EXPORTED
RECEIVER_NOT_EXPORTED
context.registerReceiver(sharedBroadcastReceiver, intentFilter, RECEIVER_EXPORTED) context.registerReceiver(privateBroadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED)
無論是針對 Intent Fitler 匹配的要求升級還是動態註冊的 Receiver Flag,都是為了增強元件安全。希望開發者在對待這些習以為常的三大元件時,多些思考、避免漏洞百出。
到此這篇關於Android13 加強Intent filters 的安全性的文章就介紹到這了,更多相關Android Intent filters 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45