1.前言如果你使用的是原生Android系统(GooglePlayServices),那么在使用WebView加载某些网页时,一定遇到过如下安全警告红屏。这是WebView的安全浏览保护策略,是Android8.0(APILevel26)开始的默认策略,适用于所有App的WebView。Google维护自己的“不安全”网站列表,并通过GooglePlay服务将其同步到所有设备。当你想访问某些标记为“不安全”的网站时,它会用“红屏”警告用户。请注意,这是默认策略。虽然出发点是为了保护用户,但有时候我们自己的APP还是有自主可控的权利。我们有没有办法在我们自己的应用程序中关闭这种保护?毕竟,我的应用程序由我负责,它是否安全由我来控制。今天就来说说如何在Android8.0(APILevel26)中关闭这个安全保护策略。2、WebView的安全策略是什么?从2018年4月开始,随着WebView66的发布,GooglePlay保护机制会默认在WebView中启动这个安全浏览策略。Android开发者在使用WebView时无需做任何改动即可享受此保护服务。SafeBrowsing从Android8.0开始就被集成到WebView中,并使用与ChromeforAndroid相同的底层技术。WebView的安全机制一旦被触发,就会出现如下图的“红屏”警告。谷歌维护了一个不良网站列表,以确保用户在浏览之前得到警告。为了同步这部分列表,谷歌费了很大功夫,只为保护用户的安全。3、如何控制安全策略在Android8.0及以上设备中,WebView的安全浏览策略默认是有效的。也就是说,如果我们要使用它,我们不需要做任何额外的工作,但是如果我们不想使用它,我们需要通过一个方法将其关闭。3.1如何监控启用WebView的安全浏览取决于GooglePlay和Chrome的更新。也就是说,虽然您的设备是Android8.0,但本政策可能不生效。那么如何判断这个功能是否有效呢?WebView提供了一个方法startSafeBrowsing()方法来主动启用安全浏览策略。在回调中,我们可以知道当前设备是否就绪,是否满足开启安全浏览的条件。WebView.startSafeBrowsing(this,object:ValueCallback{overridefunonReceiveValue(value:Boolean?){valisOpen=value?:falseif(isOpen){Log.i("cxmy_dev","Safebrowsing.On")}else{Log.i("cxmy_dev","Safebrowsing.Off")}}})请注意,回调中的值可能为空。3.2如何关闭安全策略WebView的安全策略是默认开启的。如果要关闭,需要通过WebSettings类,它有一个setSafeBrowsingEnabled(boolean)方法,可以用来设置是否开启安全模式。webSettings.safeBrowsingEnabled=false该方法是全局策略,即要么启用,要么禁用。3.3配置白名单使用setSafeBrowsingEnable()方法,只能设置两种状态,开启或关闭。如果我们要设置,只有某些Host不允许通过安全策略验证,怎么设置呢?WebView还提供了setSafeBrowsingWhiteList()方法,用于设置安全策略白名单。vararray=ArrayList()array.add("example.com")WebView.setSafeBrowsingWhitelist(array,object:ValueCallback{overridefunonReceiveValue(value:Boolean?){}})setSafeBrowsingWhiteList()方法非常灵活,可以指定通过配置域名及其子域,或者只是没有子域的域名。也可以直接配置IP地址,支持IPV4和IPV6。4.总结时刻今天我们讲了如何关闭WebView的安全浏览策略。本文涉及的API仅支持APILevel27,使用时注意判断。当然,WebView的安全浏览是必须的,所以如果你的域名被谷歌误认为是危险链接,你可以通过申诉来解封。投诉地址(https://support.google.com/chrome/answer/99020)。参考资料:https://security.googleblog.com/2015/12/protecting-hundreds-of-millions-more.htmlhttps://developer.android.com/reference/android/webkit/WebView.htmlhttps://www.google.com/chrome/privacy/whitepaper.html【本文为专栏作家“张扬”原创稿件,转载请微信联系作者公众号获得授权】点此查看该作者更多好文
