如何解决“ JavaScript接口注入漏洞的修复”?

时间:2018-12-10 12:38:15

标签: android android-webview android-security

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

不使用此机制(选项1)对我不起作用。将android:usesCleartextTraffic设置为false也不起作用,因为该应用在其他地方使用了非HTTPS流量。这样就给我留下了“您可以确保任何受影响的WebView都不会通过loadUrl通过HTTP方案加载任何URL”的消息,我很高兴,因为我的应用仅使用file:/// URL将内容加载到WebView中,这应该是安全的明智选择。但是,我需要如何编码shouldOverrideUrlLoading方法,以便Google的检查器可以识别出我仅使用file:/// URL?

请注意,这个问题与Remediation for JavaScript Interface Injection Vulnerability(因为我很清楚所要询问的内容)和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;
    }

1 个答案:

答案 0 :(得分:0)

我还没有找到一种可满足Google代码检查器要求的将file://网址与资产一起使用的方法。尽管这可以解决问题,但我仍然不清楚人们可能需要如何编码。

我最终要做的-解决了我的紧迫问题-是通过WebView.evaluateJavascript方法调用JavaScript方法。从WebViewClient.onPageFinished中调用时,页面已完成加载,因此可以访问所有元素。尽管对于我的情况而言并不重要,但是此方法也可以将值返回给Java代码。因此,尽管它不是JavascriptInterface的一般替代品,但却可以解决其一些用例。