Как решить проблему «Исправление уязвимости интерфейса JavaScript» - PullRequest
0 голосов
/ 10 декабря 2018

Google попросил меня указать адрес https://support.google.com/faqs/answer/9095419 в моем приложении для Android, что в основном означает не использовать механизм внедрения JavaScript для веб-страницы, загружаемой через HTTP.

Не использовать этот механизм (вариант 1) не работает для меня.Установка android: используетCleartextTraffic в false также не работает, так как приложение использует не-HTTPS-трафик в других местах.Поэтому у меня остается «вы можете убедиться, что любые затронутые WebViews не загружают какие-либо URL-адреса со схемами HTTP через loadUrl», что я с радостью делаю, поскольку мое приложение использует только URL-адреса file: /// для загрузки содержимого в WebView., что должно быть хорошо с точки зрения безопасности.Но как мне нужно кодировать метод shouldOverrideUrlLoading, чтобы программа проверки Google распознала, что я использую только файл: /// URLs?

Обратите внимание, что вопрос отличается от обоих Исправление для внедрения интерфейса JavaScriptУязвимость (потому что я понимаю, о чем идет речь) и В Android уязвимость интерфейса JavaScript, связанная с внедрением (потому что я не использую HTTP, а file: /// URLs).

Редактировать: добавление моего метода shouldOverrideUrlLoading.(Это не весь метод, но его существенная часть.)

    @Override
    public boolean shouldOverrideUrlLoading (WebView browser, String url) {
        if (url.startsWith("file:///")) {
            // This is my web site, so do not override; let my WebView load the page
            browser.loadUrl(url);
            return true;
        }

        // Otherwise, the link is not for a page on my site, or is an entirely different kind of URI
        // (like tel:, geo: or mailto:), so launch another Activity that handles URLs
        act.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        return true;
    }

1 Ответ

0 голосов
/ 15 декабря 2018

Я не нашел способа использовать file: // URL-адреса с активами таким образом, чтобы это соответствовало проверке кода Google.Хотя это решило бы проблему, я до сих пор не понимаю, как можно ее кодировать.

Что я в итоге сделал - что решает мою непосредственную проблему - это вызов метода JavaScript через WebView.evaluateJavascriptметод.При вызове из WebViewClient.onPageFinished страница закончила загрузку, поэтому все элементы доступны.Хотя этот метод не важен для моего случая, он также может возвращать значение в код Java.Так что, хотя это не общая замена для JavascriptInterface, он обращается к некоторым из его вариантов использования.

...