我从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开心?我已经看到有多种方法可以执行此操作,但是我需要执行特定的方法来使我的应用再次获得批准吗?