意图重定向策略违规-通过以下提供的文档修复后被拒绝



在执行Google Play短信检索器进行双因素认证后,我们收到了以下违反政策的行为。在按照文档进行修复并重新提交后,它再次被拒绝。

步骤1:修复你的应用

违反策略的问题在审查过程中,我们发现你的应用程序…APK版本…,违反了设备和网络滥用策略:

我们不允许引入或利用安全漏洞的代码。查看应用程序安全改进计划,了解向开发人员标记的最新安全问题。您可以阅读设备和网络滥用策略页面,了解更多详细信息和常见违规示例。

例如,你的应用包含一个意图重定向问题,它可以允许恶意应用访问私有应用组件或文件。

{包名称}.modules.smsuserconsent.c.onReceive


根据文档(https://support.google.com/faqs/answer/9267555),我们决定使用:选项2:

选项2:确保提取的意图来自可靠的来源。
您可以使用getCallingActivity之类的方法验证原始Activity是否可信。例如:

if (getCallingActivity().getPackageName().equals(“known”)) {
Intent intent = getIntent();
// extract the nested Intent
Intent forward = (Intent) intent.getParcelableExtra(“key”);
// redirect the nested Intent
startActivity(forward);
}

注意:

  • 检查getCallingActivity()返回的非空值是否不足以防止漏洞。恶意程序可以为这个函数提供一个空值。
  • 在Google Play Services短信检索器认证的情况下,使用SEND_PERMISSION保护广播接收器将确保意图来自Play Services。

它明确地调用了我们的用例,并且通过传递SEND_PERMISSION,它应该足以解决策略违反。


这是我们的旧代码:

SmsRetriever.getClient(getCurrentActivity()).startSmsUserConsent(null);
broadcastReceiver = new SmsBroadcastReceiver(getCurrentActivity(), this);
getCurrentActivity().registerReceiver(
broadcastReceiver,
new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
);
这是我们的新代码:
SmsRetriever.getClient(getCurrentActivity()).startSmsUserConsent(null);
broadcastReceiver = new SmsBroadcastReceiver(getCurrentActivity(), this);
getCurrentActivity().registerReceiver(
broadcastReceiver,
new IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION),
SmsRetriever.SEND_PERMISSION,
null,
0
);

我们是否仍然需要在onReceive中实现检查调用活动,或者我们没有正确实现SEND_PERMISSION ?

我们经历了多次失败的评审。在全面实施方案2和3后,我们最终通过了审查:

Intent consentIntent = extras.getParcelable(SmsRetriever.EXTRA_CONSENT_INTENT);
if (consentIntent == null) {
//handle error
return;
}
ComponentName name = this.activity.getCallingActivity();
int flags = consentIntent.getFlags();
if (name != null && 
name.getPackageName().equals("com.google.android.gms") &&
name.getClassName().equals("com.google.android.gms.auth.api.phone.ui.UserConsentPromptActivity") &&
flags & Intent.FLAG_GRANT_READ_URI_PERMISSION) == 0) &&
flags & Intent.FLAG_GRANT_WRITE_URI_PERMISSION) == 0)) {
activity.startActivityForResult(consentIntent, SMS_CONSENT_REQUEST);
}

相关内容

最新更新