如何解决"Remediation for JavaScript Interface Injection Vulnerability"?

How to address "Remediation for JavaScript Interface Injection Vulnerability"?

Google 要求我在我的 Android 应用程序中解决 https://support.google.com/faqs/answer/9095419,这基本上意味着不要对通过 HTTP 加载的网页使用 JavaScript 注入机制.

不使用此机制(选项 1)对我不起作用。将 android:usesCleartextTraffic 设置为 false 也不起作用,因为该应用在其他地方使用非 HTTPS 流量。因此,我只剩下 "you can ensure that any affected WebViews do not load any URLs with HTTP schemes via loadUrl" - 我很乐意这样做,因为我的应用程序仅使用 file:/// URL 将内容加载到 WebView 中,这在安全方面应该很好。但是我需要如何编写 shouldOverrideUrlLoading 方法的代码,以便 Google 的检查器识别出我只使用了 file:/// URL?

请注意,这个问题不同于 (because I'm clear what is being asked) and In Android, JavaScript Interface Injection Vulnerability(因为我使用的不是 HTTP,而是 file:/// URL)。

编辑:添加我的 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;
    }

我还没有找到以满足 Google 代码检查器的方式将 file:// URL 与资产一起使用的方法。虽然这可以解决问题,但我仍然不清楚人们可能需要如何对其进行编码。

我最后做的是通过 WebView.evaluateJavascript 方法调用 JavaScript 方法,这解决了我眼前的问题。当从 WebViewClient.onPageFinished 中调用时,页面已完成加载,因此所有元素都可以访问。虽然对我的情况并不重要,但此方法还可以 return 为 Java 代码赋值。因此,虽然它不是 JavascriptInterface 的一般替代品,但它解决了它的一些用例。