12

我收到了来自 Google 的电子邮件,主题如下:Google Play Warning: SSL Error Handler Vulnerability". In this email, Google explains that my app has an ["unsafe implementation of the WebViewClient.onReceivedSslError handler"

这是我的方法(WebView Client)的实现:

 public class MyBrowser extends WebViewClient {
    boolean timeout;
    public MyBrowser() {
        timeout = true;
    }
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        try {

                progressBar.setVisibility(View.VISIBLE);                   

        }catch(Exception e){
            e.printStackTrace();
        }
    }
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    public void onPageFinished(WebView view, String url) {

        try{

        progressBar.setVisibility(View.GONE);
        webView.setVisibility(View.VISIBLE);

        }catch(Exception e){
            Log.e("Exception", e.toString());
            Crashlytics.logException(e);
        }

    }

    @Override
    public void onReceivedError(WebView view, int errorCode,
                                String description, String failingUrl) {
        isBack=true;
        if (!CommonUtility.isNetworkAvailable()) {

            view.loadUrl("file:///android_asset/error.html");
        }
    }

}

在第一次警告之后,我从 WebClient 中删除了 onReceivedSslError 方法并上传了新版本,但我再次从 Google Play 收到了相同的警告。他们建议我:-“看起来版本 18 仍然存在漏洞。请重新检查您的应用程序的清单文件,这次更仔细,以确保漏洞已得到解决。”

这是我的清单文件:-(请帮助我摆脱这个问题)

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="in.test"
android:installLocation="auto"
android:versionCode="18"
android:versionName="2.0" >

<uses-sdk
    android:minSdkVersion="14"
    android:targetSdkVersion="21" />

<!-- GCM Permisssions -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

<!--
 Creates a custom permission so only this app can receive its messages.

 NOTE: the permission *must* be called PACKAGE.permission.C2D_MESSAGE,
       where PACKAGE is the application's package name.
-->
<permission
    android:name="in.Sptest.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />



<application
    android:name=".application.TestApplication"
    android:hardwareAccelerated="true"
    android:icon="@drawable/logo"
    android:label="@string/app_name"
    tools:replace="android:icon,android:name" >
    <activity
        android:name=".LauncherScreen"
        android:hardwareAccelerated="true"
        android:label="@string/title_activity_main"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".MainActivity"
        android:hardwareAccelerated="true"
        android:label="@string/title_activity_main"
        android:noHistory="false"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".URLActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".SplashActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".activities.ActivityIntro"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".Login_test"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".fragment.FragmentActivityNumberVerification"
        android:icon="@drawable/app_icon"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".BrowserScreen"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".activities.TermsActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".DataCardRecharge"
        android:label="@string/title_activity_launcher_screen"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".UserFeedBack"
        android:label="@string/title_activity_launcher_screen"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".PostpaidMobileRecharge"
        android:label="@string/title_activity_launcher_screen"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".PrepaidMobileRecharge"
        android:label="@string/title_activity_launcher_screen"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".Recharge"
        android:label="@string/title_activity_launcher_screen"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".RailBooking"
        android:label="@string/title_activity_launcher_screen"
        android:screenOrientation="portrait"

        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ProfileDetails"
        android:label="@string/title_activity_profile_details"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".RailTransactionhistory"
        android:label="@string/title_activity_transactionhistory"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".GetPhoneContact"
        android:label="@string/title_activity_get_phone_contact"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".TariffPlans"
        android:label="@string/title_activity_tariff_plans"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".TrnsactionHistory_Details"
        android:label="@string/title_activity_trnsaction_history__details"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".RailTrnsactionHistory_Details"
        android:label="@string/title_activity_trnsaction_history__details"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".MyProfile"
        android:label="@string/title_activity_trnsaction_history__details"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ZaakPAyResponse"
        android:label="@string/title_activity_trnsaction_history__details"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ZaakPAyResponseRailBooking"
        android:label="@string/title_activity_trnsaction_history__details"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".RailTicket_PNR"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".PNRStatusDetails"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".RailTicket_History"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".activities.ActivityFavouriteDialog"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    <activity
        android:name=".PassenderHistory"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" />

    <!-- Copy below Activity Declarations inside <application></application> tag in AndroidManifest.xml of your application -->
    <!-- Wallet SDK Activity Classes Start Here -->

    <!-- Wallet SDK Activity Classes End Here -->
    <activity
        android:name=".TariffPlansActivity"
        android:label="@string/title_activity_tariff_plans"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Tariff_plans" >
    </activity>
    <activity
        android:name=".TransactionMessageActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".AboutActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ShareActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
        android:windowSoftInputMode="stateHidden" >
    </activity>
    <activity
        android:name=".ActivityLastRechargeList"
        android:label="@string/title_activity_activity_last_recharge_list"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ActivityNewInfo"
        android:screenOrientation="portrait" >
    </activity>
    <activity
        android:name=".ActivitySendMoney"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
        android:windowSoftInputMode="stateHidden" >
    </activity>
    <activity
        android:name=".ActivitySetTransactionPassword"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ActivityReceivedMoneyDetails"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ActivityTransactionHistory"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ActivityRailBookingHistory"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ActivityNotificationDialog"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Holo.Light.Dialog.NoActionBar" >
    </activity>


    <activity
        android:name=".FirstActivity"
        android:exported="true"
        android:hardwareAccelerated="true"
        android:label="@string/title_activity_main"
        android:launchMode="singleTop"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".activities.OffersFragmentActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Transparent" >
    </activity>
    <activity
        android:name=".RechargeActivity"
        android:exported="true"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".RailActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
    android:windowSoftInputMode="stateHidden|adjustPan" >
    </activity>
    <activity
        android:name=".InviteActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" />
    <activity
        android:name="in.Sptestdeals.DealsActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.test" >
    </activity>
    <activity
        android:name=".ActivityNotification"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name="in.Sptestdeals.DealDetailsActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.test"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name="com.Spdealmodule.activities.ActivityTransactionMessageTest"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
    </activity>
    <activity
        android:name=".ActivityPaymentOptionsSelection"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.test"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".activities.OpenURLInWebViewActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.test"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".activities.OpenInterestURLInWebViewActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Transparent" >
    </activity>
    <activity
        android:name=".activities.ActivityOfferDetail"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".activities.ActivityAskFriend"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".activities.ActivityNoOffer"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name=".ActivitySavedCard"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.test"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>
    <activity
        android:name="com.facebook.FacebookActivity"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

    <service android:name=".service.AppInstallIntentService" >
    </service>
    <service android:name=".service.FetchtestListService" >
    </service>

    <receiver android:name="com.broadcastreceiver.WakefullReceiverAppInstall" >
        <intent-filter android:priority="2147483647" >
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />

            <data android:scheme="package" />
        </intent-filter>
    </receiver>
    <receiver
        android:name="com.broadcastreceiver.ServiceStarter"
        android:exported="true" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="android.intent.action.QUICKBOOT_POWERON" />
            <action android:name="android.intent.action.REBOOT" />
        </intent-filter>
    </receiver>
    <receiver android:name="com.broadcastreceiver.NetworkChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

    <service android:name=".service.NetworkChangeIntentService" />

    <!--
      WakefulBroadcastReceiver that will receive intents from GCM
      services and hand them to the custom IntentService.

      The com.google.android.c2dm.permission.SEND permission is necessary
      so only GCM services can send data messages for the app.
    -->
    <receiver
        android:name="com.Sptest.gcm.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>

            <!-- Receives the actual messages. -->
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />

            <category android:name="in.Sptest" />
        </intent-filter>
    </receiver>
    <receiver
        android:name="com.broadcastreceiver.ReferrerCatcher"
        android:exported="true" >
        <intent-filter android:priority="2147483647" >
            <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
    </receiver>

    <service android:name="com.Sptest.gcm.GcmIntentService" />
    <service android:name=".service.ReferralIntentService" />
    <service android:name="com.google.analytics.tracking.android.CampaignTrackingService" />
    <service android:name=".service.SmsReadService" />

    <provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.app.FacebookContentProvider1450001738595564"
        android:exported="true" />

    <service android:name=".service.InAppNotificationService" />
    <service android:name="com.Sptest.gcm.GCMRegistrationService" />




    <!-- <meta-data -->
    <!-- android:name="com.google.android.gms.version" -->
    <!-- android:value="@integer/google_play_services_version" /> -->
    <meta-data
        android:name="io.fabric.ApiKey"
        android:value="5423ec39674b4ed2b5891b52a2a7738b1fe69317" />
    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />
    <meta-data
        android:name="com.facebook.sdk.ApplicationName"
        android:value="@string/app_name" />

    <activity
        android:name=".SMSVerifyActivity"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Sherlock.Light.NoActionBar" >
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="www.Sptest.com"
                android:pathPrefix="/scomm/vf"
                android:scheme="https" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="smsverify"
                android:scheme="Sptest" />
        </intent-filter>
    </activity>
    <activity
        android:name="in.Testsdk.TestOffersListActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent" >
    </activity>

    <service android:name="in.Testsdk.services.TestAppInstallIntentService" >
    </service>
    <service android:name="in.Testsdk.services.TestAppOpenService" >
    </service>

    <activity
        android:name="in.Testsdk.TestOpenInterestActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.Transparent" />
    <activity
        android:name="in.Testsdk.TestOpenURLInWebViewActivity"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
        android:screenOrientation="portrait" >
    </activity>

    <receiver android:name="in.Testsdk.broadcastreceiver.WakefullReceiverAppInstall" >
        <intent-filter android:priority="2147483647" >
            <action android:name="android.intent.action.PACKAGE_ADDED" />
            <action android:name="android.intent.action.PACKAGE_INSTALL" />
            <action android:name="android.intent.action.PACKAGE_REMOVED" />

            <data android:scheme="package" />
        </intent-filter>
    </receiver>

    <activity
        android:name=".RailPaymentWebViewActivity"
        android:label="@string/title_activity_rail_payment_web_view"
        android:screenOrientation="portrait">
    </activity>
</application>

4

2 回答 2

2

尽管您已删除 onReceivedSslError 方法,但某些或其他库(如支付网关等)可能仍在使用内置 web 视图,因此您仍然会收到该警告。检查所有库或更新它们。我希望这能解决你的问题!

于 2016-04-12T05:46:20.667 回答
-1

您必须为 onReceivedSslError 方法提供正确的实现。此处已回答Webview 在实施 onReceivedSslError 时避免来自 google play 的安全警报

于 2016-03-31T06:53:46.237 回答