Как ограничить запуск действий из командной строки - PullRequest
1 голос
/ 13 июля 2020

В настоящее время я добавил android:exported="false" в файл манифеста приложения, чтобы ограничить доступ к экспортированным действиям. Используя это решение, я протестировал на устройстве (Android 8) и android студийном эмуляторе (Android 10) и попытался запустить активность, используя adb shell am start -n из командной строки. Это решение работало нормально и давало ошибку отказа в разрешении, это решение не удалось, только когда я запустил приложение на эмуляторе (Android 5.1.1)

Проблема: я взял тот же apk и протестировал на эмуляторе genymotion ( Android 9) и попытался запустить активность из командной строки. На этот раз он не выдал никаких ошибок, и намерение было запущено для действия

, пожалуйста, дайте решение, чтобы исправить это.

В настоящее время я читаю это Неправильный экспорт Android компонентов приложения

1 Ответ

0 голосов
/ 09 августа 2020

Действия служат уровнем представления для приложения. Их безопасность и разрешения довольно просты и состоят только из того, кто может запускать действие. Чтобы потребовать определенное разрешение для запуска Activity, вам необходимо добавить атрибут разрешения к указанной c записи Activity в AndroidManifest. xml. Например, если у вас есть HomeActivity, и для запуска этого действия вам необходимо разрешение LoginActivity, тогда ваш файл манифеста будет выглядеть следующим образом:

<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>

Из приведенного выше примера вы можете увидеть это, если хотите для запуска Homeactivity из командной строки с помощью adb, тогда он выдаст ошибку, говоря, что он защищен и требует разрешения. Но если хакер каким-либо образом запускает 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>

Как видите, я дал этому действию собственное разрешение. Таким образом, теперь это действие не будет доступно никаким сторонним приложениям, например командной строке. И Хакер не сможет взломать вашу деятельность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...