Hybrid App - 安全
2016-05-06 17:06
381 查看
一.addjavascriptInterface接口引起的漏洞
参考:http://blog.csdn.net/leehong2005/article/details/11808557/
说明:
js 注入方法addJavascriptInterface可能导致不安全,因为JS可能包含恶意代码。通过JavaScript,可以访问当前设备的SD卡上面的任何东西,甚至是联系人信息,短信等。
1,WebView添加了JavaScript对象,并且当前应用具有读写SDCard的权限,也就是:android.permission.WRITE_EXTERNAL_STORAGE
2,JS中可以遍历window对象,找到存在“getClass”方法的对象的对象,然后再通过反射的机制,得到Runtime对象,然后调用静态方法来执行一些命令,比如访问文件的命令.
3,再从执行命令后返回的输入流中得到字符串,就可以得到文件名的信息了
解决方案:
1,Android 4.2以上的系统
在Android 4.2以上的,google作了修正,通过在Java的远程方法上面声明一个@JavascriptInterface
2.Android 4.2以下的系统
(1)这个问题比较难解决,但也不是不能解决。
首先,我们肯定不能再调用addJavascriptInterface方法了。关于这个问题,最核心的就是要知道JS事件这一个动作,JS与Java进行交互我们知道,有以下几种,比prompt, alert等,这样的动作都会对应到WebChromeClient类中相应的方法,对于prompt,它对应的方法是onJsPrompt方法。
【1】让JS调用一个Javascript方法,这个方法中是调用prompt方法,通过prompt把JS中的信息传递过来,这些信息应该是我们组合成的一段有意义的文本,可能包含:特定标识,方法名称,参数等。在onJsPrompt方法中,我们去解析传递过来的文本,得到方法名,参数等,再通过反射机制,调用指定的方法,从而调用到Java对象的方法。
【2】关于返回值,可以通过prompt返回回去,这样就可以把Java中方法的处理结果返回到Js中。
【3】我们需要动态生成一段声明Javascript方法的JS脚本,通过loadUrl来加载它,从而注册到html页面中。
3.移除一些默认js对象 searchBoxJavaBridge_,accessibility,accessibilityTraversal
二.白名单Check
加载时作检查 重写 loadUrl,postUrl
网页跳转重定向做检查 webViewClient的shouldOverrideUrlLoading方法,对白名单之外的url进行拦截
参考:http://blog.csdn.net/leehong2005/article/details/11808557/
说明:
js 注入方法addJavascriptInterface可能导致不安全,因为JS可能包含恶意代码。通过JavaScript,可以访问当前设备的SD卡上面的任何东西,甚至是联系人信息,短信等。
1,WebView添加了JavaScript对象,并且当前应用具有读写SDCard的权限,也就是:android.permission.WRITE_EXTERNAL_STORAGE
2,JS中可以遍历window对象,找到存在“getClass”方法的对象的对象,然后再通过反射的机制,得到Runtime对象,然后调用静态方法来执行一些命令,比如访问文件的命令.
3,再从执行命令后返回的输入流中得到字符串,就可以得到文件名的信息了
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); } } }
解决方案:
1,Android 4.2以上的系统
在Android 4.2以上的,google作了修正,通过在Java的远程方法上面声明一个@JavascriptInterface
2.Android 4.2以下的系统
(1)这个问题比较难解决,但也不是不能解决。
首先,我们肯定不能再调用addJavascriptInterface方法了。关于这个问题,最核心的就是要知道JS事件这一个动作,JS与Java进行交互我们知道,有以下几种,比prompt, alert等,这样的动作都会对应到WebChromeClient类中相应的方法,对于prompt,它对应的方法是onJsPrompt方法。
【1】让JS调用一个Javascript方法,这个方法中是调用prompt方法,通过prompt把JS中的信息传递过来,这些信息应该是我们组合成的一段有意义的文本,可能包含:特定标识,方法名称,参数等。在onJsPrompt方法中,我们去解析传递过来的文本,得到方法名,参数等,再通过反射机制,调用指定的方法,从而调用到Java对象的方法。
【2】关于返回值,可以通过prompt返回回去,这样就可以把Java中方法的处理结果返回到Js中。
【3】我们需要动态生成一段声明Javascript方法的JS脚本,通过loadUrl来加载它,从而注册到html页面中。
3.移除一些默认js对象 searchBoxJavaBridge_,accessibility,accessibilityTraversal
二.白名单Check
加载时作检查 重写 loadUrl,postUrl
网页跳转重定向做检查 webViewClient的shouldOverrideUrlLoading方法,对白名单之外的url进行拦截
相关文章推荐
- Android 出现 maybe missing INTERNET permission 错误问题解决
- iOS7.0导航栏设置
- Android GridView数据绑定
- android 使用ffmpeg
- ApplicationInfo的flags属性
- android官方自带下拉刷新功能
- iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- Android 新版NDK环境搭建(免Cygwin)
- 【Cocos2d-x(1)】魔塔MagicTown第一章之游戏地图篇
- iOS开发AFNetworking的使用
- ANDROID FRAMENT的切换(解决REPLACE的低效)
- iOS 集成环信(三)
- unity 游戏物体自动循环移动脚本
- 网站桌面端和手机端不同url的设置
- 适配ios9出现的问题:-canOpenURL: failed for URL
- Android进阶之Fragment和Activity之间通过setArguments传递复杂参数
- 最全面的AndroidStudio配置指南总结-包括护眼模式
- android - Bad notification posted - Couldn't expand RemoteViews for: StatusBarNotification
- 微信支付 返回 -2
- Java中happen-before