最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android13?加強Intent?filters?的安全性

 更新時間:2022年05月26日 11:30:39   作者:??TechMerger????  
這篇文章主要介紹了Android13?加強Intent?filters?的安全性,文章基于Android13?展開Intent?filters?安全性加強的詳細介紹,需要的小伙伴可以參考一下

前言:

在看這個變更之前,我們需要回憶下 Android 12 的一個安全性變更, 即聲明了 <intent-filter> 的Activity、BroadcastReceiver、Service 必須聲明 android:exported, 否則將會無法被啟動。

Android 12 的這個變更是為了防止開發(fā)者在不知情的情況下,聲明了一個 intent-filter 就會使得這些組件對外公開,一定程度下強化了安全性。

但是卻漏掉了顯式 Intent 啟動和 Broadcast Receiver 動態(tài)注冊兩種情況,便在 13 中分別推出了兩項變更來進行加強。

  • Intent filters block non- -matching intents
  • Safer exporting of context- -registered receivers

Intent filters block non-matching intents

Android 13 開始 Intent 過濾器會屏蔽不匹配的 intent,即便是指定了 Component 的顯式啟動。

在 13 以前:

  • 開發(fā)者想給 Component 添加 支持
  • 這個 需要公開給外部 App 使用,便設(shè)定了 Component exported 為 true
  • 這時候該 Component 就出現(xiàn)了一個安全漏洞:外部 App 使用不同于 中聲明的 Action,甚至 mimeType 都不匹配均可以啟動它

也許你覺得這并沒有什么,但是如果 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 上的話,將無法啟動并會發(fā)生如下錯誤:

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 并不在本次變更的影響范圍內(nèi):

  • 目標 Component 沒有聲明 <intent-filter>
  • 同一個 App 內(nèi)部發(fā)出的 Intent
  • 系統(tǒng)發(fā)出的 Intent,包括 SystemServer、采用 System UID 的系統(tǒng) App
  • Root 進程發(fā)出的 Intent

適配辦法

如果目標運行的版本基于 Android 13,并且不是上述豁免對象的話,需要做些檢查和必要的修改。

按照啟動方和目標方兩種情況進行適配辦法的探討:

  • 作為啟動方:
    • 是否存在采用顯式 Intent 方式啟動其他 App 或發(fā)送廣播的情況
      • startActivity()
      • startActivityForResult()
      • sendBroadcast()
    • 該 Component 是否聲明了 <intent-filter>
    • 防止其 Target 升級到了 Android 13 無法正常啟動,需要注意 Intent 的 action、data 等信息是否準確
  • 作為目標方:
    • Target 是否需要升級到 Android 13
    • 是否對外提供了 Component 并聲明了 <intent-filter>
    • 防止無法被正常啟動,需要告知啟動方 <intent-filter> 的信息

殘留

13 上實測發(fā)現(xiàn) Service 組件在顯式啟動下,即便是錯誤的 ACTION,仍能被正常啟動。這是有意為之還是 Beta 版漏洞,源碼尚未公開,原因未知。

  • startService()
  • startForegroundService()
  • bindService()

Safer exporting of context-registered receivers

為了幫助提高運行時接收器的安全性,Android 13 允許您指定您應(yīng)用中的特定廣播接收器是否應(yīng)被導(dǎo)出以及是否對設(shè)備上的其他應(yīng)用可見。

如果導(dǎo)出廣播接收器,其他應(yīng)用將可以向您的應(yīng)用發(fā)送不受保護的廣播。此導(dǎo)出配置在以 Android 13 或更高版本為目標平臺的應(yīng)用中可用,有助于防止一個主要的應(yīng)用漏洞來源。

具體變更

TargetSDK 升級到 Android13 的 App 在動態(tài)注冊 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

目前上述限制不是默認生效的,需要開啟如下兼容性變更:

  • 開發(fā)者選項 -> App Compatibility Changes -> Your App -> DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED

另外,當你的 Receiver 聲明了 RECEIVER_NOT_EXPORTED 的話,其他 App 向其發(fā)送廣播會失敗,并打印如下日志提醒你的 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

豁免

需要留意的是,系統(tǒng)級廣播是受保護的,普通 App 沒有權(quán)限發(fā)送。

所以只是監(jiān)聽系統(tǒng)廣播的話,動態(tài)注冊的 Receiver 無需指定上述 flag。即便指定了 RECEIVER_NOT_EXPORTED,和靜態(tài)注冊方式一致也能正常接收、不受影響。

適配辦法

找到所有動態(tài)注冊 Broadcast Receiver 的代碼。如果監(jiān)聽的包含非系統(tǒng)廣播,請根據(jù)是否公開給其他 App 的需要使用來添加 flag 的聲明。

  • RECEIVER_EXPORTED
  • RECEIVER_NOT_EXPORTED
context.registerReceiver(sharedBroadcastReceiver, intentFilter,
    RECEIVER_EXPORTED)
context.registerReceiver(privateBroadcastReceiver, intentFilter,
    RECEIVER_NOT_EXPORTED)

結(jié)語

無論是針對 Intent Fitler 匹配的要求升級還是動態(tài)注冊的 Receiver Flag,都是為了增強組件安全。希望開發(fā)者在對待這些習以為常的三大組件時,多些思考、避免漏洞百出。

到此這篇關(guān)于Android13 加強Intent filters 的安全性的文章就介紹到這了,更多相關(guān)Android Intent filters 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android 中 ActivityLifecycleCallbacks的實例詳解

    Android 中 ActivityLifecycleCallbacks的實例詳解

    這篇文章主要介紹了Android 中 ActivityLifecycleCallbacks的實例詳解的相關(guān)資料,希望通過本文大家能掌握這部分內(nèi)容,需要的朋友可以參考下
    2017-09-09
  • Android中Activity常用功能設(shè)置小結(jié)(包括全屏、橫豎屏等)

    Android中Activity常用功能設(shè)置小結(jié)(包括全屏、橫豎屏等)

    這篇文章主要介紹了Android中Activity常用功能設(shè)置小結(jié)(包括全屏、橫豎屏等),以簡單實例形式分析了Android實現(xiàn)全屏、豎屏及一直顯示等的技巧與注意事項,需要的朋友可以參考下
    2015-10-10
  • 深入了解Android中GestureDetector的定義與使用

    深入了解Android中GestureDetector的定義與使用

    Android中的GestureDetector?可以使用?MotionEvents?檢測各種手勢和事件,非常的好用。本文將會通過幾個具體的例子來講解一下GestureDetector的具體使用方法,需要的可以參考一下
    2023-01-01
  • SQLSERVER實現(xiàn)更改表名,更改列名,更改約束代碼

    SQLSERVER實現(xiàn)更改表名,更改列名,更改約束代碼

    這篇文章主要介紹了SQLSERVER實現(xiàn)更改表名,更改列名,更改約束代碼的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Android自定義加載圈的方法

    Android自定義加載圈的方法

    這篇文章主要為大家詳細介紹了Android自定義加載圈的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android Studio OkHttpClient使用教程詳解

    Android Studio OkHttpClient使用教程詳解

    這篇文章主要介紹了Android Studio OkHttpClient使用教程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09
  • Android Studio實現(xiàn)簡單計算器功能

    Android Studio實現(xiàn)簡單計算器功能

    這篇文章主要為大家詳細介紹了Android Studio實現(xiàn)簡單計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • react native android6+拍照閃退或重啟的解決方案

    react native android6+拍照閃退或重啟的解決方案

    android 6+權(quán)限使用的時候需要動態(tài)申請,那么在使用rn的時候要怎么處理拍照權(quán)限問題呢?本文提供的是一攬子rn操作相冊、拍照的解決方案,需要的朋友可以參考下
    2017-11-11
  • android實現(xiàn)可上下回彈的scrollview

    android實現(xiàn)可上下回彈的scrollview

    這篇文章主要為大家詳細介紹了android實現(xiàn)可上下回彈的scrollview,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android存儲權(quán)限兼容問題解析

    Android存儲權(quán)限兼容問題解析

    在?Android?開發(fā)中,存儲權(quán)限是一個常見且重要的權(quán)限,不同版本的?Android?系統(tǒng)對于存儲權(quán)限的管理和處理方式存在差異,這就導(dǎo)致了開發(fā)者在處理存儲權(quán)限時會遇到各種兼容問題,本文將詳細介紹?Android?各版本存儲權(quán)限的變化,以及如何進行兼容處理,并給出具體的代碼示例
    2025-02-02

最新評論

江陵县| 库尔勒市| 乐平市| 瑞丽市| 民勤县| 大悟县| 新余市| 凤庆县| 内江市| 普定县| 新丰县| 青冈县| 临清市| 红桥区| 太湖县| 内江市| 东台市| 永仁县| 江达县| 孟津县| 山阴县| 元谋县| 江阴市| 酒泉市| 南安市| 西乡县| 阳山县| 社会| 资兴市| 肃北| 靖西县| 灵石县| 黄冈市| 泽普县| 建昌县| 连州市| 灵丘县| 饶平县| 姚安县| 探索| 黑河市|