Google Play Warning: WebViewClient.onReceivedSslError handler

14,583

Solution 1

I hope is not too late for this.. that warning is about you should notify user is going to a page with invalid cert, you should not proceed it directly.

You can implment an alert dialog something like this:

@Override
public void onReceivedSslError(WebView view, final SslErrorHandler handler, SslError error) {
    final AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(R.string.notification_error_ssl_cert_invalid);
    builder.setPositiveButton("continue", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.proceed();
        }
    });
    builder.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            handler.cancel();
        }
    });
    final AlertDialog dialog = builder.create();
    dialog.show();
}

This was taken from sakiM answers in this link: Webview avoid security alert from google play upon implementation of onReceivedSslError

Solution 2

The problem is in your code. When you call handler.proceed(); like that, it effectively removes all the security from your connection.

You should remove your onReceivedSslError method. The default implementation will reject insecure connections.

Share:
14,583
Vivek Mittal
Author by

Vivek Mittal

Updated on June 16, 2022

Comments

  • Vivek Mittal
    Vivek Mittal about 2 years

    I recently received an email from Google with the following subject : "Google Play Warning: SSL Error Handler Vulnerability". In this email, Google explains that my app has an ["unsafe implementation of the WebViewClient.onReceivedSslError handler. Specifically, the implementation ignores all SSL certificate validation errors, making your app vulnerable to man-in-the-middle attacks. An attacker could change the affected WebView's content, read transmitted data (such as login credentials), and execute code inside the app using JavaScript."] ....................

    I am using in my code:

        webView.setWebViewClient(new WebViewClient() {
    
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {}
    
            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return super.shouldOverrideUrlLoading(view, url);
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                // My code
            }
        });
    

    // My code

    webview_ClientPost(webView, "https://secure.payu.in/_payment", mapParams.entrySet());
    

    Why the Google play sending this warning regarding SSL? Is this my code issue or PayUMoney issue?

  • YuDroid
    YuDroid over 8 years
    Did this solution worked for you? I am getting the same alert in my Google Console.
  • Vivek Mittal
    Vivek Mittal over 7 years
    Thank you very much
  • Antimony
    Antimony about 5 years
    Realistically, users won't know whether they should accept an insecure connection or not. The best solution is to just remove the onReceivedSslError method entirely and fallback to the default behavior of rejecting insecure connections.