WebView,我已经长大了,知道自己区分能否安全了!

作者 : 开心源码 本文共2144个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共220人阅读

一、前言

假如你在用 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,我已经长大了,知道自己区分能否安全了!

发表回复