HostnameVerifier正确实现

时间:2017-04-25 07:29:49

标签: android google-play android-security

我正在尝试在Google Play中发布我的应用并从Google Play收到此消息。

我们因违反我们的恶意行为或用户数据政策而拒绝了您的应用程序,包名称为xxx.xxx.xxx.xxx。如果您提交了更新,那么您之前的应用版本仍可在Google Play上使用。

此应用使用包含用户安全漏洞的软件,或允许在没有正确披露的情况下收集用户数据。

以下是问题

的HostnameVerifier 您的应用正在使用HostnameVerifier接口的不安全实现。您可以在此Google帮助中心文章中找到有关如何解决问题的详细信息。

以下是我如何使用它:

static HostnameVerifier hostnameVerifier = new HostnameVerifier() {

    @Override
    public boolean verify(String hostname, SSLSession session) {
        if(hostname.equalsIgnoreCase("staging.hostname") || hostname.equalsIgnoreCase("production.sostname")){
            return true;
        }else{
            return false;
        }
    }

};

并且这样称呼它:

HttpsURLConnection conn = (HttpsURLConnection) requestURL
            .openConnection();

    conn.setHostnameVerifier(hostnameVerifier);

请让我知道我做错了什么。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您的验证器确实不安全。查看默认验证程序执行的检查范围:OkHostnameVerifier。这实际上是最佳实践 - 将此验证留给平台。

您可以在上面添加额外的检查,例如限制主机名。如果您的服务器缺少服务器名称指示,您可以查看 Google 在 2014 年之前是如何解决这个问题的:https://android.googlesource.com/platform/external/okhttp/+/cc0952ec282184914a6153e9deff458c94785fd1%5E%21