来自 Google Play 商店的 Android React Native App HostNameVerifier 错误

Posted

技术标签:

【中文标题】来自 Google Play 商店的 Android React Native App HostNameVerifier 错误【英文标题】:Android React Native App HostNameVerifier Error from Google Play Store 【发布时间】:2021-03-28 16:53:53 【问题描述】:

请帮忙,我在 MainApplication.java 文件中有以下实现。我正在检查固定的主机名,然后相应地返回 true 或 false。

错误不安全的主机名验证器

安全性 您的应用正在使用不安全的主机名实现 验证者。有关详细信息,请参阅此 Google 帮助中心文章, 包括修复漏洞的截止日期。

Ld/a/a/a/a/c/e$1; ld/a/a/a/a/c/f$1; sv:deadline:12/10/2020

 @Override
  public void onCreate() 
    super.onCreate();
    hostnameVerifier();
    MobileCore.setApplication(this);
    SoLoader.init(this, /* native exopackage */ false);
    ReactNativeFirebaseApp.setApplicationContext(this);
  

private void hostnameVerifier()
    HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() 
      @Override
      public boolean verify(String arg0, SSLSession arg1) 
        String hostList[] = "in.appcenter.ms", "graph.facebook.com",
            "assets.adobedtm.com", "codepushupdates.azureedge.net", "app-measurement.com",
            "forter.com", "dmn1", "dmn2", "dmn3", "quantummetric.com", "urbanairship.com", "demdex.net", "search.unbxd.io",
            "monetate.net", "bazaarvoice.com", "google.com", "stylitics.com", "getcandid.com","braintreegateway.com"
          ;

          for (String host : hostList) 
            if (host.contains(arg0) || arg0.endsWith(host)) 
              return true;
            
          
        return false;
      
    );
  

我应该改变什么,请帮忙。

【问题讨论】:

发布完整的堆栈跟踪/错误消息。顺便说一句,实施不好。使用 HashSet 而不是数组,您可以在 O(1) 上进行检查而不是 O(n)。 感谢您的建议将解决这个问题。完全错误,您的应用正在使用不安全的主机名验证器实现。请参阅此 Google 帮助中心文章了解详细信息,包括修复漏洞的截止日期。 ld/a/a/a/a/c/e$1; ld/a/a/a/a/c/f$1; sv:deadline:12/10/2020 我不确定这是否是原因,但再次查看您的实现是不安全的。页面“mymalwaresite.com/google.com”会通过。至少您应该将字符串解析为 URL 并检查实际主机,而不是执行 .contains() 我尝试通过删除包含使检查非常通用,但即使这样也不起作用,得到完全相同的错误。 public boolean verify(String hostname, SSLSession arg1) if (hostname.equalsIgnoreCase("domain")) return true; 否则 返回假; 【参考方案1】:

安全警报是正确的。您的代码将用户置于风险之中,应该被 App Store 拒绝。

您为什么需要这段代码?删除它,只有在您获得有效证书时才连接到服务器。

【讨论】:

【参考方案2】:

在 google play 控制台上转到发布管理 -> 选择 apk 版本 -> 安全选项卡。在那里,您将看到该 apk 的安全问题列表以及代码中可能导致该安全问题的类。

如果您没有看到类名,而是在安全警告消息中看到了一些编码代码,请通过禁用您可能使用的任何代码压缩工具来上传另一个构建。就我而言,它是 proguard,我禁用了它并获得了库名称。仅供参考 - 就我而言,图书馆是 Braintree

【讨论】:

以上是关于来自 Google Play 商店的 Android React Native App HostNameVerifier 错误的主要内容,如果未能解决你的问题,请参考以下文章

使用来自 Visual Studio (Xamarin) 的 Google Play 商店签名始终收到“无效客户端”错误

App Annie解析Google Play商店最热门游戏应用 |头条数读

从Play商店下载时,颤动的谷歌登录无法在发布中工作

google play商店怎么使用

确定 Play 商店国家/地区

如何从 google play store 获取应用市场版本信息?