1 , WebView跨域访问漏洞
问题描述:
该漏洞产生的原因是在Android应用中,WebView开启了file域访问,且允许file域对http域进行访问,同时未对file域的路径进行严格限制所致。攻击者通过URL Scheme的方式,可远程打开并加载恶意HTML文件,远程获取APP中包括用户登录凭证在内的所有本地敏感数据
问题解决:
在laodurl方法之前,加入如下代码
try {
if (Build.VERSION.SDK_INT >= 16) {
Class<?> clazz = webView.getSettings().getClass();
Method method = clazz.getMethod(
"setAllowUniversalAccessFromFileURLs", boolean.class);
if (method != null) {
method.invoke(webView.getSettings(), true);
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
2,程序数据任意备份
问题描述:
安卓AndroidManifest.xml文件中android: allowBackup为true,app数据可以被备份导出
解决办法:
AndroidManifest.xml 配置文件中中设置为android:allowBackup=”false”
3,硬编码风险
问题描述:
硬编码是指将可变变量用一个固定值来代替的方法,用这种方法编译后,如果以后需要更改此变量就非常困难了。最好的方法是,将一个固定数值定义为一个标记,然后用这个特殊标记来取代变量名称。当标记名称改变时,变量名不变。这样,当重新编译整个程序时,所有变量都不再是固定值,这样就更容易的实现了改变变量的目的。
解决办法:
不要在类中使用直接的url而是要配置在values中
4,WebView明文储存密码漏洞
问题描述:
WebView默认开启密码保存功能mWebView.setSavePassword(true),如果该功能未关闭,在用户输入密码时,会弹出提示框,询问用户是否保存密码,如果选择"是",密码会被明文保到/data/data/com.package.name/databases/webview.db
解决办法:webSettings.setSavePassword(false);
5,WebView远程代码执行漏洞
问题描述:
Android API level 17以及之前的版本,由于程序没有正确限制使用addJavascriptInterface方法,远程攻击者可通过使用Java Reflection API利用该漏洞执行任意Java对象的方法。通过addJavascriptInterface给WebView加入一个JavaScript桥接接口,JavaScript通过调用这个接口可以直接与本地的Java接口进行交互。导致手机被安装木马程序,发送扣费短信,通信录或者短信被窃取,甚至手机被远程控制。
解决办法:
if(Build.VERSION.SDK_INT=<17){
webView.removeJavascriptInterface("searchBoxJavaBridge_");
webView.removeJavascriptInterface("accessibility");
webView.removeJavascriptInterface("accessibilityTraversal");
}
6,Activity最小化特权
7,Sevice最小化特权
网友评论