修复Google Play安全警报-您的应用使用了不安全的HostnameVerifier实现-可变主机链接

时间:2018-12-29 06:47:25

标签: android android-security

我正在使用HostnameVerifier验证我的主机URL。

首先,我使用下面的代码行来验证主机名,

        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession arg1) {
            return true;
        }

    });

我从Google Play控制台收到以下错误消息,

Your app(s) are using an unsafe implementation of the HostnameVerifier interface. You can find more information about how resolve the issue in this Google Help Center article.

通过下面的链接,我知道如果我的预期主机名与verify()方法不匹配,我需要返回false

在我的情况下,主机名不是固定主机,它是变量,我的流程如下所示,这是不可更改的。

  1. 客户端服务器向其员工发送一条包含INVITATION CODE的SMS,该代码包含客户端服务器的加密URL,这会因客户端而异,例如

  2. 用户在EditText字段中输入邀请代码,然后在我的应用中单击“验证”按钮。

  3. 我从该邀请代码中获取服务器URL,该URL可能因客户端而异,并且在整个应用中用于所有下一个屏幕中的所有服务器调用。

总而言之,我的主机名不是固定的,而是可变的。

因此,我使用下面的代码行来验证主机,

        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
        @Override
        public boolean verify(String hostname, SSLSession arg1) {

            // Utility.getServerUrl() is the url which I get from invitation code, for ex. https://sony.com/ess
            String url = Utility.getServerUrl();   

            String[] arr = url.split("//");    // To remove https:// 
            url = arr[1];                      // Now  url = sony.com/ess
            url = url.split("/")[0];           // To get link excluding /ess

            //Now url = "sony.com", which may be vary by client to client

            if (hostname.equalsIgnoreCase(url) ||
                    hostname.equalsIgnoreCase("api.crashlytics.com") ||
                    hostname.equalsIgnoreCase("settings.crashlytics.com")) {
                return true;
            } else {
                return false;
            }
        }

    });

我建立了一个签名的apk并再次上传到Google Play商店,但是半个小时后,我的最新apk再次由于相同的原因而被拒绝。

请帮助我解决这个问题。预先感谢。

0 个答案:

没有答案