如何清除评估Javascript

时间:2019-06-07 17:21:13

标签: android

我从Google Play控制台收到一条消息,说

  

您的应用程序包含一个易受跨应用程序脚本攻击的WebView。有关详细信息,请参阅此Google帮助中心文章。脆弱的类别:com.company.main.company.MainActivity-> onCreate

该错误将我引向this document,以解决此问题

它给了我2个选择。我无法使用选项1,因为它在更改android:exported=false

时会杀死我的应用

所以我坚持使用选项2。它说的一件事是

  

确保评估Javascript的参数始终受信任。使用来自不受信任的Intent的未经消毒的输入来调用valuateJavascript,攻击者可以在受影响的WebView中执行有害的脚本。

我在WebView中使用evaluateJavascript的方式是获取ID为user_id_firebase的div的HTML以确定应用程序状态,即用户是否注销了我的应用程序或已登录。然后使用firebase ID,可以使用用户/应用令牌更新通知数据库。

代码

             webView.evaluateJavascript(
                        "(function() { return (document.getElementById('user_id_firebase').innerHTML); })();",
                        new ValueCallback<String>() {
                            @Override
                            public void onReceiveValue(String html) {
                                html = html.replaceAll("[\"]+", "");
                                StringTokenizer currentString = new StringTokenizer(html, "|");
                                final String first = currentString.nextToken().trim();
                                final String second = currentString.nextToken().trim();
                                // Write a message to the database
                                database = FirebaseDatabase.getInstance().getReference();

                                FirebaseInstanceId.getInstance().getInstanceId().addOnSuccessListener( MainActivity.this,  new OnSuccessListener<InstanceIdResult>() {
                                    @Override
                                    public void onSuccess(InstanceIdResult instanceIdResult) {
                                        String newToken = instanceIdResult.getToken();
                                        if (first.equals("gone")) {
                                            database.child("users").child(second).child("android").child(getMacAddr()).removeValue();
                                        } else if (first.equals("none")) {
                                            database.child("users").child(second).child("android").child(getMacAddr()).removeValue();
                                        } else if (first.equals("active")) {
                                            database.child("users").child(second).child("android").child(getMacAddr()).setValue(newToken);
                                        }
                                    }
                                });

                            }
                        });

因为我从document.getElementById获取了该div的HTML,所以我假设它是指此输入,这是我认为需要清除的内容。

我如何清除此输入内容以使Google Gods开心?我已经看到有多种方法可以执行此操作,但是我需要执行特定的方法来使我的应用再次获得批准吗?

0 个答案:

没有答案