我们自己没有添加addJavascriptInterface,甚至默认为false。但是还是有漏洞,因为在低于API17的WebView上默认添加"searchBoxJavaBridge_"到mJavaScriptObjects中。
这样就有可能通过用户信任的客户端获取SD卡的数据。
解决方法有几点:
1. 过滤本地文件的访问:
if (!url.startsWith("file://")) {
// to do.
}
2. 过滤未知网站(可以非本站点的都不允许加载)
3. 删除默认添加的"searchBoxJavaBridge_"
// in WebView setting:
if (Build.VERSION.SDK_INT > 10&&Build.VERSION.SDK_INT < 17) {
fixWebView();
}
// fixWebView like this:
@TargetApi(11)
private void fixWebView() {
// http://50.56.33.56/blog/?p=314
// http://drops.wooyun.org/papers/548
// We hadn't use addJavascriptInterface, but WebView add "searchBoxJavaBridge_" to mJavaScriptObjects below API 17 by default:
// mJavaScriptObjects.put(SearchBoxImpl.JS_INTERFACE_NAME, mSearchBox);
mWebView.removeJavascriptInterface("searchBoxJavaBridge_");
}