WebView HTTPS页面引用HTTP资源的问题

问题

WebView页面图片无法显示;
log报错:

chromium: [INFO:CONSOLE(0)] "Mixed Content: The page at xxx was loaded over HTTP

原因

如果不单独设置,WebView是不支持在Https域名下加载Http资源的。

设置办法:

 //允许混合模式(http与https)
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
           settings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
 }

深入一点

  • 为什么不允许?

    当用户访问HTTPS页面时,与WEB服务器之间的连接是使用SSL加密的,从而保护连接不受嗅探器和中间人攻击。

    如果HTTPS页面包含由普通明文HTTP连接的内容,那么连接只是被部分加密,非加密的内容可以被嗅探者入侵,并且可以被中间人攻击者修改,因此连接不再受到保护。

    当一个网页出现这种情况时,它被称为混合内容页面。

  • 混合内容页面的类型

    • 混合被动/显示内容

      使用HTTP内容包含在一个HTTPS页面,但它不能改变网页的其他部分。

      攻击者可以用一张不恰当的图片替换掉原始的图片,并根据替换的图片内容判断用户正在访问的页面等。

      这些内容包括:<img>,<audio>,<video>,<object>(进行http请求时)等标签

    • 混合活动内容

      访问全部或部分HTTPS页面文档对象模型的内容。这种类型的混合内容可以改变HTTPS页面的行为并可能向用户窃取敏感数据

      在混合活动内容情况下,中间人攻击者可以拦截HTTP请求的内容。攻击者也可以重写响应来包含恶意的JavaScript代码。恶意的活动内容可以窃取用户的凭据,获得关于用户的敏感数据,甚至在用户的系统上安装恶意软件(例如,通过浏览器漏洞或插件)。

      混合内容的风险取决于用户访问网站的类型和网站数据暴漏的的敏感程度。网页可能有公共访问数据或需有通过身份验证的私有数据。如果网页是公开的并且没有关于用户的敏感数据,使用混合活动内容仍可能为攻击者提供将用户重定向到其他HTTP页面并从那些网站上窃取HTTP cookie的机会。

      混合活动内容包括:

      • <script>
      • <link>
      • XMLHttpRequest
      • <iframe>
      • 所有在CSS中用到url的场景,如@font-face, cursor, background-image
      • <object>用data属性时

参考链接

https://developer.mozilla.org/zh-CN/docs/Security/MixedContent

《WebView HTTPS页面引用HTTP资源的问题》 公众号

    原文作者:姜康
    原文地址: https://www.jianshu.com/p/be2e62747483
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞