1. 程式人生 > >Android 安全--WebView不校驗證書漏洞

Android 安全--WebView不校驗證書漏洞

繼承關係

java.lang.Object
繼承者 android.os.Handler
繼承者 android.webkit.SslErrorHandler

問題方法

cancel( )

停止載入問題頁面

proceed( )

忽略SSL證書錯誤,繼續載入頁面

觸發條件:
1. 呼叫SslErrorHandler類的proceed方法
【1】對應到smali語句中的特徵:Landroid/webkit/SslErrorHandler;->proceed()V
2. 方法名:onReceivedSslError

Android WebView元件載入網頁發生證書認證錯誤時,會呼叫WebViewClient類的onReceivedSslError方法,如果該方法實現呼叫了handler.proceed()來忽略該證書錯誤,則會受到中間人攻擊的威脅,可能導致隱私洩露

修復

  1. 不呼叫android.webkit.SslErrorHandler的proceed方法
  2. 當發生證書認證錯誤時,採用預設的處理方法SslErrorHandler.cancel(),停止載入問題頁面

Cordova問題程式碼

    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {

        final String packageName = parentEngine.cordova.getActivity().getPackageName();
        final
PackageManager pm = parentEngine.cordova.getActivity().getPackageManager(); ApplicationInfo appInfo; try { appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA); if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) { // debug = true
//handler.proceed(); 這裡是問題程式碼 handler.cancel(); return; } else { // debug = false super.onReceivedSslError(view, handler, error); } } catch (NameNotFoundException e) { // When it doubt, lock it out! super.onReceivedSslError(view, handler, error); } }