Магазин Google Play: приложение Android отклонено из-за уязвимостей Intent Redirection

Мы получили уведомление об отклонении приложения из-за перенаправления намерения и для учета тех, которые мы применили некоторые проверки в нашем коде, но все же приложение было отклонено сегодня. Не могли бы вы прочитать ниже подробную информацию о требованиях к приложению, а также изменения, внесенные для учета ошибок / предупреждений.

Краткая информация о приложении: наше приложение использует комбинацию TWA (PWA Wrapper) и собственного кода Android, при этом аутентификация в основном выполняется в собственном коде, а затем при успешном входе в систему пользователь будет перенаправлен в PWA с использованием активности TWA Launcher. А чтобы вернуться к машинному коду из TWA, мы используем фильтры Intent. Мы рассмотрели варианты, указанные в письме в разделе Перенаправление намерения (здесь), но ни один из трех трех точно не подходит для нашего случая, то есть от веб-URL-адреса TWA Launcher до собственной активности Android в том же приложении. Хотя мы добавили несколько дополнительных проверок, как показано во фрагменте ниже с веб-страницы в собственный код (который вызывается Depplink:


if (intent.`package` == null || !intent.`package`.equals(packageName)) {
    finish()
}else {
    //Business logic
    // Open new activity from here
}

Подробная информация ниже получена с портала консоли Google Play.

Подробная информация о предварительном отчете

Перенаправление намерения
Errorbrightness_1Security
Ваше приложение содержит уязвимость перенаправления намерения. Подробную информацию см. в этой статье Справочного центра Google. • androidx.activity.ComponentActivity.startActivityForResult.

Также в одном месте мы использовали startActivityForResult, который сейчас устарел, и мы заменили его новым API (например, registerForActivityResult). См. Фрагмент кода ниже:
// фрагмент кода
Старый код:

val intent = Intent(this, TwaImplicationActivity::class.java)
 startActivityForResult(intent, AppConstants.RequestCode.TWA_IMPLICATION)

Новые изменения:

twaActivityStartForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
    if(result.resultCode == Activity.RESULT_OK){
        if(viewModel.showEnrolment.get()!!){
            navigateToEnrolment()
        } else {
            navigateToLogin()
        }
    }
}



val intent = Intent(this, TwaImplicationActivity::class.java)
 twaActivityStartForResult?.launch(intent)

Во всяком случае, я пропустил. Сообщите, пожалуйста, правильное место, где я пропустил проверку безопасности в нашем приложении?


person krishna kant gupta    schedule 08.04.2021    source источник
comment
Вы что-нибудь экспортируете из AndroidManifest?   -  person Abhishek Bansal    schedule 08.04.2021
comment
Да, Абхишек, у одного из действий есть deeplink, но если мы используем export = false, то deeplink не будет работать в нашем случае.   -  person krishna kant gupta    schedule 11.04.2021


Ответы (1)


Я думаю, что ваша startActivityForResult является проблемой, в прошлый раз я также столкнулся с этой проблемой, поэтому я предлагаю изменить startActivityForResult на startActivity (это, TwaImplicationActivity :: class.java)

person Siru malayil    schedule 23.04.2021