如何使用addJavaScriptInterface

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用addJavaScriptInterface相关的知识,希望对你有一定的参考价值。

参考技术A android代码中:
mWebView.addjavascriptInterface(new Object()

@JavascriptInterface
public boolean isOnline()
return 1;

@JavascriptInterface
public boolean test(String msg)
return "hello "+ msg;


, "AndroidMain");

在js代码中调用:
var online=window.AndroidMain.isOnline();
var test=window.AndroidMain.test("ttt");本回答被提问者采纳

每日日报2021.3.12

今天完成内容:

1.学习android webview

3.3 WebView与JavaScript的交互

3.3.1 JS注入漏洞

addJavascriptInterface 接口引起远程代码执行漏洞

webView.addJavascriptInterface(new JSObject(), “myObj”);

参数1:Android的本地对象

参数2:JS的对象

通过对象映射将Android中的本地对象和JS中的对象进行关联,从而实现JS调用Android的对象和方法

产生原因: JS拿到Android这个对象后,可以调用这个Android对象中的所有方法,包括(java.lang.Runtime类),从而进行任意代码执行.

eg: 执行对应命令获取本地设备SD卡中的文件信息造成信息泄漏

解决方案:

第一种: 4.2 版本之后, 在被调用的函数上加上@JavascriptInterface 注解,避免漏洞攻击

第二种: 4.2版本之前. 采用拦截prompt()进行漏洞修复.

步骤:

(1) 先继承自WebView,重写addJavascriptInterface方法,在内部维护一个对象映射关系的Map, 将要添加的JS接口放入该Map

(2) 在Webview加载前时,加载一段本地JS代码

a.让JS调用 提供的javascript方法, 通过调用prompt()把JS中的信息传给Android端

b.在Android端的onJsPrompt()中,解析传递过来的信息,再通过反射机制调用Java对象中的方法.有个中间层来保证安全调用.

3.3.2 JSBridge

定义: 就是给JavaScript 提供调用Native功能的接口

核心: 构建Native 和非Native间消息通信的通道,双向通信的通道.

双向通信:

JS向Native发送消息,调用相关功能,通知Native当前JS的相关状态

Native向JS发送消息,回溯调用结果,消息推送,通知JS当前Native的状态

3.看视频

遇到问题:

明日目标:

学习Android studio的开发

以上是关于如何使用addJavaScriptInterface的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 上使用 addJavascriptInterface() 传递 JavaScript 对象

了解Android的webview addjavascriptinterface

appView.addJavascriptInterface() 不适用于 API 17

Android 4.2版本以下使用WebView组件addJavascriptInterface方法存在JS漏洞

UWP webView 相当于 Android 中的 addJavascriptInterface()

为啥说addjavascriptinterface漏洞