详细问题描述
webview.style.plusrequire='none' 无法阻止添加了 <script src="html5plus://ready"></script> 的页面使用html5+对象。
这个问题,在之前我发起的提问中已经得到官方人员的确认!
但是 本来,使用plusrequire:'none'是防止在应用内打开外部链接时被别有用心的人获取到plus对象,进而对应用造成危害。
假设一个场景:
一个app,允许用户(假设安全起见游客无权)添加外部链接,并且该链接可以在app中开一个webview打开。
本来打开外部链接的新窗口设置了requireplus:'none'目的是防止恶意网站执行获取plus对象执行破坏。但是,这个别有用心的用户自制了一个网页,并在网页中加入了<script src="html5plus://ready"></script>。
那么,是不是相当于 requireplus: 'none'是一把锁,而<script src="html5plus://ready"></script>是开这把锁的钥匙?
恐怖的是,这把钥匙就放在锁的旁边,任何人都能得到。
所以,这把锁有用吗?
UniApp的web-view组件同样存在该漏洞!!!
按照uniapp官方示例 https://uniapp.dcloud.io/component/web-view
我载入了一个本地页面 并在页面中加入了 <script src="html5plus://ready"></script> 这个 禁用 plus的 锁 也被轻易打开了。
附件是一个简版demo源码(因为uniapp打包后超过14M无法上传)
希望官方重视起来。毕竟不是所有人都了解这个 plus禁用可被绕过的问题!!!
<template>
<view>
</view>
</template>
<script>
var wv;//计划创建的webview
export default {
onLoad() {
// #ifdef APP-PLUS
wv = plus.webview.create("","custom-webview",{
plusrequire:"none", //禁止远程网页使用plus的API,有些使用mui制作的网页可能会监听plus.key,造成关闭页面混乱,可以通过这种方式禁止
'uni-app': 'none', //不加载uni-app渲染层框架,避免样式冲突
top:uni.getSystemInfoSync().statusBarHeight+44 //放置在titleNView下方。如果还想在webview上方加个地址栏的什么的,可以继续降低TOP值
})
wv.loadURL("/hybride/html/local.html")
var currentWebview = this.$mp.page.$getAppWebview() //获取当前页面的webview对象
currentWebview.append(wv);//一定要append到当前的页面里!!!才能跟随当前页面一起做动画,一起关闭
setTimeout(function() {
console.log(wv.getStyle())
}, 1000);//如果是首页的onload调用时需要延时一下,二级页面无需延时,可直接获取
// #endif
}
};
</script>
重现步骤
[步骤]
1 安装附件apk
2 打开app
3 点击首页右上角 图标 打开 about页面
4 等待2秒
5 会弹出alert 内容是JSON.stringify(plus)
[结果]
禁用plus无效
[期望]
能够做到 真正禁用plus
或 调高webview.style.plusrequire='none' 的优先级。无论加载的网页是否包含<script src="html5plus://ready"></script>,都要确保已经设置plusrequire为'none'的webview中的网页无法获取并使用html5+对象。
[如果语言难以表述清晰,拍一个视频或截图,有图有真相]
IDE运行环境说明
[HBuilder 或 HBuilderX。如果你用其他工具开发uni-app,也需要在此说明]
[IDE版本号]
[windows版本号]
[mac版本号]
uni-app运行环境说明
[运行端是h5或app或某个小程序?]
[运行端版本号]
[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]
[编译模式是老模板模式还是新的自定义组件模式?]
App运行环境说明
[Android版本号]
[iOS版本号]
[手机型号]
[模拟器型号]
附件
[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]
[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]
[App安装包或H5地址]
[可重现代码片段]
联系方式
[QQ]
jimmy_zejia
disablePlus:true之后如何进行通信?
2021-08-12 15:22