Android Webiew的addJavascriptInterface带来的漏洞
【摘要】 WebView漏洞: **
WebView 中的 addJavascriptInterface()接口**
JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射:
// 参数1:Android的本地对象
// 参数2:JS的对象
// 通过对象映射将Android中的本地对象和JS中的对象进行关联,从而实现JS调用...
WebView漏洞:
**
WebView 中的 addJavascriptInterface()接口**
JS调用Android的其中一个方式是通过addJavascriptInterface接口进行对象映射:
// 参数1:Android的本地对象
// 参数2:JS的对象
// 通过对象映射将Android中的本地对象和JS中的对象进行关联,从而实现JS调用Android的对象和方法
mWebView.addJavascriptInterface(new MyJSInterface(),"androidJsInterface");
- 1
- 2
- 3
- 4
因为WebView通过addJavascriptInterface绑定了一个Java对象,根据Java的反射机制,就可以获得比更多方法,和间接获得更多的实例对象,进行操作:
try { Runtime runtime = (Runtime) this.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null); Process process = runtime.exec("date"); InputStream inputStream = process.getInputStream(); BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream); byte[] b = new byte[1024]; bufferedInputStream.read(b); String dateString = new String(b,"utf-8"); Toast.makeText(this,dateString,Toast.LENGTH_LONG).show(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
以上是Java的,它通过当前实例获得了Runtime,接着让它执行date命令。在JS中也是同样道理。
解决方案
(1) Android 4.2版本之后
Google 在Android 4.2 版本中规定对被调用的函数以 @JavascriptInterface进行注解从而避免漏洞攻击:
private static class MyJSInterface{ @JavascriptInterface public void showMessage(String msg){ Log.d("JS Interface Message#",msg); } }
- 1
- 2
- 3
- 4
- 5
- 6
(2)对于Android 4.2以前,需要采用拦截prompt()的方式进行漏洞修复,比较麻烦。
文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_40763897/article/details/97627223
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)