如何處理應用中的 WebView SSL 錯誤處理程序提醒android
本文面向的是在應用中採用的 WebViewClient.onReceivedSslError 處理程序實施方式不安全的開發者。具體來講,這種實施方式會忽略全部 SSL 證書驗證錯誤,使應用容易受到中間人攻擊。攻擊者可能會更改受影響的 WebView 內容、讀取傳輸的數據(例如登陸憑據),以及執行應用中使用 JavaScript 的代碼。 從 2016 年 11 月 25 日起,Google Play 將禁止發佈任何包含此類漏洞的新應用或應用更新。您已發佈的 APK 版本不會受到影響,可是,在修復此漏洞前,您將沒法爲應用發佈任何更新。web
後續步驟安全
1. 爲了糾正此問題,請將您的應用代碼更新爲在服務器提供的證書符合您的預期時調用 SslErrorHandler.proceed(),不然調用 SslErrorHandler.cancel()。服務器
2. 若是是您使用的第三方庫致使的安全漏洞,請通知該第三方,並與其合做解決此問題。ide
3. 更改完成後,請登陸 Developer Console 並提交應用的更新版本。測試
4. 過 5 個小時後再回來查看。若是應用未正確更新,系統將會顯示相應的警告消息。請注意,即便您的應用已修復相應漏洞,處理過程也可能會有所延遲,這是很常見的狀況。 有關 SSL 錯誤處理程序的詳情,請訪問 Android 開發者幫助中心查看相關文檔。若有其餘技術問題,您能夠在 https://www.stackoverflow.com/questions 上發帖諮詢並使用「android-security」和「SslErrorHandler」標籤。 儘管這些具體問題不必定會對使用 WebView SSL 的全部應用都形成影響,但咱們仍建議您安裝全部最新的安全補丁。若是應用包含會讓用戶面臨入侵風險的安全漏洞,那麼咱們可能會將其視爲危險產品(違反《內容政策》和《開發者分發協議》第 4.4 條的相關規定)。 此外,應用還必須遵循開發者分發協議和內容政策。若是您認爲咱們發送此警告的判斷有誤,請經過 Google Play 開發者幫助中心與咱們的政策支持團隊聯繫。優化
關於上述問題的解決,其實咱們須要按照需求來思考。若是是咱們爲了實現雙向驗證問題,那麼請參考以下博文ui
Android 讓WebView完美支持https雙向認證(SSL)this
若是是解決普通問題,請參考google
StackOverflow:onReceiveSslError實現ssl證書提示
@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(); }
固然,測試環境爲了抓包,咱們能夠做以下設置
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { if(BuildConfig.DEBUG) { handler.proceed(); //可能形成中間人攻擊 }else{ super.onReceivedSslError(view, handler, error); } }
咱們這裏給出一個關於WebView的優化