簡體   English   中英

如何限制從命令行啟動活動

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM