HTTPS混合内容解析

什么是HTTPS混合内容

我们可能会有这样的经验,当我们通过HTTPS访问一个网站的时候,突然有提示:“本页面包含有不安全的内容”。这个时候会询问是否显示“不安全的内容”,这个时候,就是遇到了有混合内容的页面了。

HTTPS下的页面,几乎很少是采用单一连接,HTML标识、图片、JS脚本以及其他页面资源不仅是多个连接获取到,甚至可能是来自完全不同的服务器和网站。为了确保一个页面进行了正确的加密,所有的页面资源都通过HTTPS进去获取是必要的。但在实际情况中,全部资源都采用HTTPS却不常见,这就倒是了混合内容(mixed
content)安全问题的产生。

产生混合内容的原因

程序员

某些程序员仍然基于HTTP下的编程习惯,导致代码的不严谨。最常见的就是采用绝对路径的方式,访问网站上的资源,在HTTP的模式下这种方式可能都是正确的,但一旦这些页面要求改用HTTPS,这些元素就很可能是被通过HTTP调用,而产生错误。

Mashup

随着Mashup的发展,网站不再是自己提供全部内容,它们混合其他网站的内容,而内容的来源则被隐去。Mashup虽然对开发者来说非常有用,但也让我们的HTTPS变得不可捉摸。

Mashup主要通过在页面加载第三方的JavaScript代码来实现的,在HTTPS加密的上下文中,经常会出现第三方的内容和服务不支持HTTPS加密,前几年,百度和Goolge的很多服务业也都不支持HTTPS,最近2、3年,才开始支持全网SSL,但有些小的服务商依然不能做到全部支持HTTPS。

CDN

CDN在全球建立大量的服务器,可以通过对用户访问IP地址的判断,选择最优的网络访问位置,为用户提供大量的(主要是静态)数据文件。通常CDN要支持用户通过HTTPS访问内容的成本比较高,因为CDN通常使用BDNS的域名解析技术,这会对一个网站在全球的各个不同的分发站点分配不同的主机名,所以我们经常必须采用Wildcard通配符证书,甚至Wildcard
San证书来支持,同时因为SNI的兼容性还不够完善,每个分发点最好都具体自己独立的IP地址,这也导致运维的复杂性和成本的提高。

混合内容的影响

混合内容的影响主要与没有被加密的内容性质所决定,目前主要有两种性质的内容:
混合被动内容(Mixed passive content),混合主动内容(Mixed active conttent)。前者也叫混合显示(Mixed Display),它们是低风险的内容,例如图片; 后者也叫作混合脚本(Mixed Scripting),它们是高风险的内容,常见的有JavaScript脚本。

混合主动内容是威胁的真正来源。一个不被加密的JavaScript文件的引用,可能会被主动攻击者劫持,并用来获取对页面的完全控制,已经使用受害者的身份在网站上执行任意的动作。对于其他危险的资源类型也是如此,包括:HTML(框架)、CSS、FLASH和JAVA应用程序等。

混合被动内容虽然不是那么的危险,但依然会破坏页面的完整性。在某些情况下,攻击者可以通过在图片中插入信息来玩弄受害者,可能导致钓鱼攻击的发生。

浏览器的处理

Android浏览器

Android的浏览器对混合内容没有任何限制。

Chrome

Chrome从版本38开始,会阻止所有的混合主动内容。

Firefox

Firefox很久以前就可以对混合内容进行检测并发出警告,但一直到版本23以后,开始对所有的混合主动内容进行阻断。

IE

IE从IE5(1999年)开始就支持对混合内容的检测,当IE检测到同一个页面上存在加密和明文内容的时候,它将提示用户来决定如何处理。但一直到IE9以后,才开始对混合主动内容进行阻断,同时开始对混合的被动内容采取了默许的方式。

Safri

Safri目前不阻断任何混合内容,这是它与其他浏览器相比的一个很大的区别。

 Images   CSS   Scripts XHR   Websockets   Frames
 Android Brower 4.4  Y Y Y Y Y Y
 Chrome    41  Y N N N N N
 Firefox 30  Y N N N N N
 IE 11  Y N N N N N
 Safari Y Y Y Y Y Y

查找混合内容

查找网页是否存在混合内容,推荐使用Chrome的“开发者工具”:

访问需要测试网页,然后打开,开发者工具,选择“Security”-"Non-Secure Origin",就可以看到Mixed Content:

解决办法

检查代码

新的网站开发,在搭建测试环境时,建议直接在测试环境部署HTTPS,以确保网站在测试时就能及时发现混合内容问题,并及时纠正。

程序员在代码开发时,可以采用以下方式:

  • 本地的图片和脚本通过HTTP显示方式直接调用。可以检索所有通过http://绝对路径方式调用的元素,改用本地相对路径。
  • 访问了一些外网的图片和脚本。譬如某网站www.domain.com,将图片放在另外一个站点img.domain.com,将脚本访问js.domain.com上,请在每个站点都部署HTTPS,然后将原先的http://的引用方式调整为//的引用方式。例如:原先的代码
    <img src="http://img.domain.com/image/1.jpg" /> 修改为 <img
    src="//img.domain.com/image/1.jpg" />
    。调整后,浏览器会自动选择http还是https来访问外网资源。
  • 如需要使用第三方系统提供的应用服务,请寻求支持HTTPS的服务商,目前百度和Google都已经支持全网HTTPS,而且正规的应用服务上,都会开始支持HTTPS了。

HTST

HTST是一种强制浏览器获取安全资源的机制,即使在面对用户错误(譬如用户用80端口访问到你的网站)以及实现错误(网站开发人员在HTTPS页面上加了不安全的元素)也依然有效。这个特性有效的消除了混合内容的问题,但仅能在你能控制的域名下工作。

HTST要求通过301跳转的方式,一下仅就IIS简要介绍一下:

首先在网站上配置1个HTTP的网站,和一个HTTPS的网站,选择HTTP重定向:

状态代码设置为:永久(301)。重定向到相同域名的HTTPS站点上。

有关HTST的详细使用,我们将另外发文介绍。

CSP

为了阻断从第三方网站获取到的不安全资源,可以使用安全内容策略(Content Security Policy,CSP)。这个安全特性可以对不安全的资源进行阻断。它同时还有很多其他有用的特性来处理应用层安全问题。

FYI:https://www.myssl.cn/home/article-56.html

时间: 2024-12-21 14:22:45

HTTPS混合内容解析的相关文章

文件内容解析

下面是我的第一个React Native程序,也是自己对该程序的文件内容解析一些理解,注释很清楚哟,相信你一看就懂!!!! /** * Sample React Native App * https://github.com/facebook/react-native * @flow */ // 1.引入组件 import React, { Component } from 'react'; import { AppRegistry, // 注册 StyleSheet, // 样式 Text,

YOLOv1-darknet 内容解析

目录 YOLOv1-darknet 内容解析 1. 核心思想 2. 特点 3. 缺点 4. 算法流程 5. 详细内容 6. 主要参考 YOLOv1-darknet 内容解析 1. 核心思想 目标检测分为二阶段和一阶段的方法,二阶段方法主要有Fast R-CNN系列,Mask R-CNN等,主要方法是用算法生成一些列作为样本的候选框,然后再使用卷积神经网络进行样本的分类: 一阶段方法(End to End方法)主要有SSD系列,YOLO系列,这种方法是将目标边框的定位问题转化为回归问题处理. 由于

++和+的运算优先级和++i和i++混合用法解析

近日碰到一个技术交流的地方,发现出了一道基础知识的题,刚一看题目确实有点晕,仔细分析如下: int i = 5; int k = i+++(++i)+(++i);           也可以写成(i++)+(++i)+(++i) 其实这个是k=(5++)+(++6)+(++7)=5+7+8=20 得出结果为20 ++和+的运算优先级和++i和i++混合用法解析,布布扣,bubuko.com

SSDP协议内容解析

SSDP(Simple Service Discovery Protocol),简单服务发现协议,用于发现局域网里面的设备和服务. SSDP消息分为设备查询消息.设备通知消息两种,通常情况下,使用更多地是设备查询消息. 1.设备查询消息: 格式例子如下: M-SEARCH * HTTP/1.1 HOST: 239.255.255.250:1900 MAN: "ssdp:discover" MX: 5 ST: ssdp:all 其中第一行是消息头,固定:HOST对应的是广播地址和端口,2

php将某一模板内容解析过后,并获取其返回值

在PHP中,将一个模板文件(.php)文件定义过后,如果要将参数传入,并且将该文件解析过后的内容作为返回值,可以php操作缓冲区来获取该模板文件的结果 //打开缓冲区 ob_start(); //引入所需要的模板文件 include('file_name.tpl.php');          //获取缓冲区中的内容,并且将该内容赋值给一个变量 $return_info = ob_get_contents(); //清空(擦除)缓冲区并关闭输出缓冲                     ob_

内容提供者ContentProvider和内容解析者ContentResolver

简介 ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider 对你应用中的数据进行添删改查.关于数据共享,以前我们学习过文件操作模式,知道通过指定文件的操作模式为Context.MODE_WORLD_READABLE 或Context.MODE_WORLD_WRITEABLE同样也可以对外共享数据.那么,这里为何要使用ContentProvider 对

Web 前端性能优化相关内容解析[转]

Web 前端性能优化相关内容,来源于<Google官方网页载入速度检测工具PageSpeed Insights 使用教程>一文中PageSpeed Insights 的相关说明.大家可以对照着去优化自己的网站或者相关项目.本文由Jeff 整理. 0.提高服务器的响应速度 砸钱的东西,但却最根本:搞好这一项,甚比下面任何一项. 1.优化样式表和脚本的排列顺序 正确地排列外部样式表与外部和内嵌脚本的顺序,可增加下载时同时加载的数据量,并提高浏览器显示网页的速度. 将样式表放在顶部,将脚本放在底部

把界面内容解析成XML(用DOM模式)

第一步,修改AndroidManifest.xml,添加sdcara写入权限 1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 2 3 <application 4 android:allowBackup="true" 5 android:icon="@drawable/ic_launcher" 6 android:labe

转: 数字证书原理 https 完整过程解析

点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解密的一些基础知识和概念,然后通过一个加密通信过程的例子说明了加密算法的作用,以及数字证书的出现所起的作用.接着对数字证书做一个详细的解释,并讨论一下windows中数字证书的管理,最后演示使用makecert生成数字证书.如果发现文中有错误的地方,或者有什么地方说得不够清楚,欢迎指出! 1.基础知识