WebView JS安全问题
来源:互联网 发布:叮咚智能音箱软件 编辑:程序博客网 时间:2024/06/07 10:27
通常我们都可以使用JS调用java的代码,但在android4.2之前这存在着安全隐患,JS可以通过注入的方式调用java的函数。
这里看一下乌云漏洞的一个例子:点击打开链接
1,WebView添加了JavaScript对象,并且当前应用具有读写SDCard的权限,也就是:android.permission.WRITE_EXTERNAL_STORAGE
2,JS中可以遍历window对象,找到存在“getClass”方法的对象的对象,然后再通过反射的机制,得到Runtime对象,然后调用静态方法来执行一些命令,比如访问文件的命令.
3,再从执行命令后返回的输入流中得到字符串,就可以得到文件名的信息了。然后想干什么就干什么,好危险。核心JS代码如下:
function execute(cmdArgs){ for (var obj in window) { if ("getClass" in window[obj]) { alert(obj); return window[obj].getClass().forName("java.lang.Runtime") .getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs); } }}
它遍历所有window的对象,然后找到包含getClass方法的对象,利用这个对象的类,找到java.lang.Runtime对象,然后调用“getRuntime”静态方法方法得到Runtime的实例,再调用exec()方法来执行某段命令。
如:var p = execute(["ls","/mnt/sdcard/"]);
解决方法:
android4.2之后提出了@JavascriptInterface JS只能访问带有@JavascriptInterface的方法。如果您的应用android:targetSdkVersion数值为17或者大于17记得添加 @JavascriptInterface 注解
对于4.2以下的版本,首先,我们肯定不能再调用addJavascriptInterface方法了。关于这个问题,最核心的就是要知道JS事件这一个动作,JS与Java进行交互我们知道,有以下几种,比prompt, alert等,这样的动作都会对应到WebChromeClient类中相应的方法,对于prompt,它对应的方法是onJsPrompt方法
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)通过这个方法,JS能把信息(文本)传递到Java,而Java也能把信息(文本)传递到JS中
【1】让JS调用一个Javascript方法,这个方法中是调用prompt方法,通过prompt把JS中的信息传递过来,这些信息应该是我们组合成的一段有意义的文本,可能包含:特定标识,方法名称,参数等。在onJsPrompt方法中,我们去解析传递过来的文本,得到方法名,参数等,再通过反射机制,调用指定的方法,从而调用到Java对象的方法。
【2】关于返回值,可以通过prompt返回回去,这样就可以把Java中方法的处理结果返回到Js中。
【3】我们需要动态生成一段声明Javascript方法的JS脚本,通过loadUrl来加载它,从而注册到html页面中
javascript:(function JsAddJavascriptInterface_(){ if (typeof(window.jsInterface)!='undefined') { console.log('window.jsInterface_js_interface_name is exist!!');} else { window.jsInterface = { onButtonClick:function(arg0) { return prompt('MyApp:'+JSON.stringify({obj:'jsInterface',func:'onButtonClick',args:[arg0]})); }, onImageClick:function(arg0,arg1,arg2) { prompt('MyApp:'+JSON.stringify({obj:'jsInterface',func:'onImageClick',args:[arg0,arg1,arg2]})); }, }; }})()
说明:
1,上面代码中的jsInterface就是要注册的对象名,它注册了两个方法,onButtonClick(arg0)和onImageClick(arg0, arg1, arg2),如果有返回值,就添加上return。
2,prompt中是我们约定的字符串,它包含特定的标识符MyApp:,后面包含了一串JSON字符串,它包含了方法名,参数,对象名等。
3,当JS调用onButtonClick或onImageClick时,就会回调到Java层中的onJsPrompt方法,我们再解析出方法名,参数,对象名,再反射调用方法。
4,window.jsInterface这表示在window上声明了一个Js对象,声明方法的形式是:方法名:function(参数1,参数2)
4,window.jsInterface这表示在window上声明了一个Js对象,声明方法的形式是:方法名:function(参数1,参数2)
文章参考:http://blog.csdn.net/leehong2005/article/details/11808557
http://blog.csdn.net/leehong2005/article/details/11808557
0 0
- WebView JS安全问题
- js --- 安全问题
- webview与js交互
- webview与js交互
- webview js 交互问题
- android WebView js 交互
- webview与js交互
- webview与js交互
- WebView调用JS失败
- WebView和js交互
- js android webview
- webView js 交互
- webview与js交互
- webview与js交互
- WebView与JS交互
- WebView Js注入
- webView与js交互
- webView与js交互
- 开发一个完整的JavaScript组件
- 各种语言中的urlencode方法
- android 网络的工具类
- Android事件机制之二:onTouch详解 - Windstep
- 右左法则看指针
- WebView JS安全问题
- 使用 FileSystem JAVA API 对 HDFS 进行读、写、删除等操作
- 第四章---SpringMVC----Controller详解
- SSH 框架中 service 里面有 sql 和 对象存储,执行顺序问题 Spring 事务提交顺序
- 网易资源提取步骤
- 【转载】五大常用算法之一:分治算法
- dll导出函数名称和系统API名字相同冲突问题
- ffmpeg 解码 到 opencv 之间传递
- Adnroid上的简单图像合成类——PorterDuffXfermode