WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
为了让webview可执行JS脚本,需要添加如上代码行。但同时需要注意以下:
1.远程代码执行漏洞
移除以下默认接口以确保应用安全:
mWebView.removeJavascriptInterface("searchBoxJavaBridge_");
mWebView.removeJavascriptInterface("accessibility");
mWebView.removeJavascriptInterface("accessibilityTraversal");
2.Android4.2以后,为JS暴露的接口,都需要加@JavascriptInterface
mWebView.addJavascriptInterface(new MyPicJavaScript(getApplicationContext()), "imagelistner"); // JS回调
private class MyPicJavaScript {
private MyPicJavaScript(Context context) {
}
@JavascriptInterface
public void openImage(String img) {
Intent intent = new Intent(getApplicationContext(), PicNoContentActivity.class);
intent.putStringArrayListExtra("picList", picList);
intent.putExtra("currentImg", img);
startActivity(intent);
}
}
例如如上所示,使用JS回调去实现某功能。
这个接口允许JavaScript 控制宿主应用程序,在4.2的版本前存在重大安全隐患。因为JavaScript 可以使用反射访问注入webview的java对象的public fields。在一个包含不信任内容的WebView中使用这个方法,会允许攻击者去篡改宿主应用程序,使用宿主应用程序的权限执行java代码。
所以openImage()
方法需要额外的注解@JavascriptInterface
,这样,这个Java对象的fields 将不允许被JS访问。
参考链接:
https://blog.csdn.net/zgjxwl/article/details/9627685
http://nickycc.lofter.com/post/23e2a6_29f4fdf
网友评论