1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wizardforcel-android-app-sec-guidebook

Клонировать/Скачать
4.9.md 7.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 27.11.2024 20:24 c13bfb7

webView.loadUrl("https://url.to.your.contents/");

}

**private AlertDialog createSslErrorDialog(SslError error)** {
    // Error message to show in this dialog
    String errorMsg = createErrorMessage(error);
    // Handler for OK button
    DialogInterface.OnClickListener onClickOk = new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            setResult(RESULT_OK);
        }
    };
    // Create a dialog
    AlertDialog dialog = new AlertDialog.Builder(
    WebViewTrustedContentsActivity.this).setTitle("SSL connection error")
        .setMessage(errorMsg).setPositiveButton("OK", onClickOk)
        .create();
    return dialog;
}

**private String createErrorMessage(SslError error)** {
    SslCertificate cert = error.getCertificate();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    StringBuilder result = new StringBuilder()
        .append("Сертификат сайта НЕ действителен. Соединение было разорвано.¥n¥nОшибка:¥n");
    switch (error.getPrimaryError()) {
        case SslError.SSL_EXPIRED:
            result.append("Срок действия сертификата истёк.¥n¥nДата истечения:")
                .append(dateFormat.format(cert.getValidNotAfterDate()));
            return result.toString();
        case SslError.SSL_IDMISMATCH:
            result.append("Имя хоста не совпадает. ¥n¥nCN=")
                .append(cert.getIssuedTo().getCName());
            return result.toString();
        case SslError.SSL_NOTYETVALID:
            result.append("Сертификат ещё не действителен.¥n¥nОн будет действителен с ")
                .append(dateFormat.format(cert.getValidNotBeforeDate()));
            return result.toString();
        case SslError.SSL_UNTRUSTED:
            result.append("Центр сертификации, выдавший сертификат, не является надёжным.¥n¥nЦентр сертификации¥n")
                .append(cert.getIssuedBy().getDName());
            return result.toString();
        default:
            result.append("Произошла неизвестная ошибка. ");
            return result.toString();
    }
}

}


#### 4.9.1.3 Отображение не внутреннего управления содержимым

Если содержимое вашего приложения не управляется внутри компании, рекомендуется не включать JavaScript, поскольку существует потенциальный риск доступа к вредоносным материалам.

Приведённый ниже пример кода демонстрирует отображение содержимого, которое не управляется изнутри.

Этот пример кода отображает содержимое, указанное пользователем через адресную строку. Обратите внимание, что при возникновении ошибки JavaScript JavaScript отключается и соединение прерывается. Подробные сведения о HTTPS-коммуникации, обработке ошибок соответствуют «4.9.1.2 Отображать только внутреннее управляемое содержимое». Для получения подробной информации см. «5.4 Связь через HTTPS».

Ключевые моменты:

1) Правильно обрабатывать SSL-ошибки от WebView.

2) Отключить JavaScript в WebView. onReceivedSslError(WebView webview,
        SslErrorHandler handler, SslError error) {
            // *** POINT 1 *** Handle SSL error from WebView appropriately
            AlertDialog errorDialog = createSslErrorDialog(error);
            errorDialog.show();
            handler.cancel();
            textUrl.setText(webview.getUrl());
            buttonGo.setEnabled(true);
        }

        // After loading Web page, show the URL in EditText.
        @Override
        public void onPageFinished(WebView webView, String url) {
            textUrl.setText(url);
            buttonGo.setEnabled(true);
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webView = (WebView) findViewById(R.id.webview);
        webView.setWebViewClient(new WebViewUnlimitedClient());

        // *** POINT 2 *** Disable JavaScript of WebView
        // Explicitly disable JavaScript even though it is disabled by default.
        webView.getSettings().setJavaScriptEnabled(false);
        webView.loadUrl(getString(R.string.texturl));
        textUrl = (EditText) findViewById(R.id.texturl);
        buttonGo = (Button) findViewById(R.id.go);
    }

    public void onClickButtonGo(View v) {
        webView.loadUrl(textUrl.getText().toString());
    }

    private AlertDialog createSslErrorDialog(SslError error) {
        // Error message to show in this dialog
        String errorMsg = createErrorMessage(error);

        // Handler for OK button
        DialogInterface.OnClickListener onClickOk = new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                setResult(RESULT_OK);
            }
        };

        // Create a dialog
        AlertDialog dialog = new AlertDialog.Builder(
            WebViewUntrustActivity.this).setTitle("SSL connection error")
            .setMessage(errorMsg).setPositiveButton("OK", onClickOk)
            .create();
        return dialog;
    }

    private String createErrorMessage(SslError error) {
        SslCertificate cert = error.getCertificate();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        StringBuilder result = new StringBuilder()
            .append("The site's certification is NOT valid. Connection was disconnected.¥n¥nError:¥n");

        switch (error.getPrimaryError()) {
            case SslError.SSL_EXPIRED:
                result.append("The certificate is no longer valid.¥n¥nThe expiration date is ")
                    .append(dateFormat.format(cert.getValidNotAfterDate()));
                return result.toString();

            case SslError.SSL_IDMISMATCH:
                result.append("Host name doesn't match. ¥n¥nCN=")
                    .append(cert.getIssuedTo().getCName());
                return result.toString();

            case SslError.SSL_NOTYETVALID:
                result.append("The certificate isn't valid yet.¥n¥nIt will be valid from ")
                    .append(dateFormat.format(cert.getValidNotBeforeDate()));
                return result.toString();

            case SslError.SSL_UNTRUSTED:
                result.append("Certificate Authority which issued the certificate is not reliable.¥n¥nCertificate Authority¥n")
                    .append(cert.getIssuedBy().getDName());
                return result.toString();

            default:
                result.append("Unknown error occured. ");
                return result.toString();
        }
    }

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/wizardforcel-android-app-sec-guidebook.git
git@api.gitlife.ru:oschina-mirror/wizardforcel-android-app-sec-guidebook.git
oschina-mirror
wizardforcel-android-app-sec-guidebook
wizardforcel-android-app-sec-guidebook
master