[英]How to restrict launching activities from command line
目前我在應用程序清單文件中添加了android:exported="false"
以限制對導出活動的訪問。 使用此解決方案,我已經在設備(Android 8)和 android 工作室模擬器(Android 10)上進行了測試,並嘗試使用adb shell am start -n
從命令行啟動活動。 該解決方案運行良好並且給出了權限被拒絕錯誤,該解決方案僅在我在模擬器上運行應用程序時失敗(Android 5.1.1)
問題:我采用了相同的 apk 並在 genymotion 模擬器(Android 9)上進行了測試,並嘗試從命令行啟動活動。 這次它沒有給出任何錯誤,並且意圖啟動了活動
請給出解決方案。
目前我正在閱讀此不正確的 Android 應用程序組件導出
Activity 充當應用程序的表示層。它們的安全性和權限非常簡單,只包含可以啟動 Activity 的人。 要啟動一個 Activity 需要一定的權限,需要在 AndroidManifest.xml 中的特定 Activity 的條目中添加權限屬性。 例如,如果您有一個 HomeActivity,並且要啟動此 Activity,您需要 LoginActivity 的權限,那么您的 Manifest 文件將如下所示:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.appname">
<permission android:name="com.example.appname.permission.LoginActivity" android:protectionLevel="signature" />
<application>
<activity
android:name=".ui.homecreen.HomeActivity"
android:exported="false"
android:permission="com.example.appname.permission.LoginActivity" />
</application>
</manifest>
從上面的例子你可以看到,如果你想從命令行使用 adb 啟動 Homeactivity,那么它會給出錯誤,說它是受保護的並且需要權限。 但是,如果黑客以任何方式啟動 LoginActivity,然后嘗試啟動 HomeActivity,那么他將被授予訪問權限,因為他可以訪問 LoginActivity。
為了解決這個問題,我使用了以下代碼:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.appname">
<permission android:name="com.example.appname.permission.HomeActivity" android:protectionLevel="signature" />
<application>
<activity
android:name=".ui.homecreen.HomeActivity"
android:exported="false"
android:permission="com.example.appname.permission.HomeActivity" />
</application>
</manifest>
你可以看到,我已經給了這個活動,它自己的許可。 所以現在這個活動不會被任何第三方應用程序(如命令行)訪問。 黑客將無法闖入您的活動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.