WebView,我已经长大了,知道自己区分能否安全了!
一、前言
假如你在用 Android 原生系统(Google Play 服务),在使用 WebView 加载某些网页时,肯定遇到过以下的安全警告红屏。
image
这是 WebView 的安全浏览保护策略,在 Android 8.0(API Level 26)开始的默认策略,被应用在所有 App 的 WebView 当中。
Google 会自己维护一套“不安全”网站的列表,并通过 Google Play 服务,同步到所有的设施上。当你要访问某些被标记为“不安全”的网站时,它就会以此“红屏”警告客户。
注意这是默认策略,尽管出发点是为了保护客户,但是有时候我们自己的 App 还是要有自主管控的权利。
那我们有办法在自己的 App 内,关闭此项保护吗?毕竟我的应用我做主,安不安全自己来管控。
今天就来聊聊,如何在 Android 8.0(API Level 26)中,关闭此安全保护策略。
二、什么是WebView的安全策略
自 2018 年 4 月起,随着 WebView 66 发布,Google Play 保护机制,将在 WebView 中默认开始此安全浏览策略。
而 Android 开发者在使用 WebView 时,无需再进行任何更改,就可享受此项保护服务。自 Android 8.0 开始,WebView 中即已经集成安全浏览功能,并且与 Android 版的 Chrome 采用相同的底层技术。
一旦触发 WebView 的安全机制,就会出现相似下图这样的“红屏”警告。
image
Google 会自维护一套不良网站的列表,以确保客户可以在浏览之前,发出警告。为了同步这部分列表,Google 花费了很大的努力,就是为了保护客户的安全。
三、如何控制安全策略
在 Android 8.0 及以上的设施中,WebView 的安全浏览策略,是默认生效的。
也就是说,假如我们想要使用它,我们什么额外的工作都不需要做,但是我们假如不想采用它,就需要通过一个方法将其关闭。
3.1 如何监控开启
WebView 的安全浏览,是依赖于 Google Play 和 Chrome 升级的,也就是说,尽管你的设施是 Android 8.0,但是此策略也是有可能没有生效的。
那么如何确定此功能能否生效呢?
WebView 提供了一个方法 startSafeBrowsing()
方法,来主动开启安全浏览策略,在回调中,我们可以知道当前设施能否准备好了,符合开启安全浏览的条件。
WebView.startSafeBrowsing(this, object : ValueCallback<Boolean> { override fun onReceiveValue(value: Boolean?) { val isOpen = value ?:false if (isOpen) { Log.i("cxmy_dev", "Safe browsing. On") } else { Log.i("cxmy_dev", "Safe browsing. Off") } }})
注意回调内的 value 可能为 null。
3.2 如何关闭安全策略
WebView 的安全策略是默认开始的,假如想要关闭它,需要通过 WebSettings 这个类,其中有 setSafeBrowsingEnabled(boolean)
方法,可以用于设置能否开启安全模式。
webSettings.safeBrowsingEnabled = false
此方法是一种全局的策略,也就是要么开启、要么关闭。
3.3 配置白名单
使用 setSafeBrowsingEnable()
方法,只能做二态的设置,要么开启要么关闭。假如我们想设置,只允许某些 Host 不经过安全策略校验,如何设置呢?
WebView 还提供了一个 setSafeBrowsingWhiteList()
的方法,用于设置一个安全策略的白名单。
var array = ArrayList<String>()array.add("example.com")WebView.setSafeBrowsingWhitelist(array, object : ValueCallback<Boolean> { override fun onReceiveValue(value: Boolean?) { }})
setSafeBrowsingWhiteList()
方法很灵活,可以通过配置指定域名及其子域名,或者者仅此域名不包含其子域名。还可以直接配置 IP 地址,支持 IPV4 和 IPV6。
image
四、小结时刻
今天我们聊到如何关闭 WebView 的安全浏览策略,本文涉及的 API,一律仅支持 API Level 27,使用的时候注意判断。
当然,WebView 的安全浏览是有必要的,所以假如你的域名被 Google 误认为是危险链接,可以通过申诉的方式解封,申诉地址。
本文对你有帮助吗?留言、点赞、转发是最大的支持,谢谢!
references:
protecting-hundreds-of-millions-mores
Webkit-WebView
whitepaper
公众号后端回复成长『成长』,将会得到我准备的学习资料,也能回复『加群』,一起学习进步;你还能回复『提问』,向我发起提问。
推荐阅读:
关于字符编码,你需要知道的都在这里 | 图解:HTTP 范围请求 | Java 异常解决 | 安卓防止客户关闭动画导致动画失效 | Git 找回遗失的代码 | 阿里的 Alpha 助力 App 启动速度优化
image
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » WebView,我已经长大了,知道自己区分能否安全了!