IE6和7的原因"此页面包含安全和非安全项目"

Kei*_*ith 8 https fiddler internet-explorer-7 internet-explorer-6

我有一个HTTPS站点,在IE6和7中显示(错误)一个对话框,内容如下:

此页面包含安全和非安全项目

要显示不安全的项目吗?

这在任何适当的浏览器中都不会发生,但该站点是公司的,许多客户仍然在Windows 2000和IE6上.

我熟悉(并已消除)此消息的以下可能原因:

  1. 加载页面的一个或多个资源http://而不是https://- 这是显示错误的唯一合理理由,并且在工作浏览器中也会导致相同的消息.Fiddler可以识别加载的非安全资源,因此很容易修复.

  2. .htc加载IE行为文件以提供DHTML功能 - 这些通常被视为未加密,即使从https://URL 传递也是如此,这使得它们甚至在IE6是新的时候也毫无用处.首先使用这些并不是一个好主意.

  3. IE将空帧视为非安全资源,因此<iframe src=""或<iframe src="about:blank"两者都会导致此错误.这很容易在代码中找到并修复.

  4. IE5用于在使用ActiveX XMLHTTP组件时将AJAX请求发送为非安全.我不认为这是IE6及以上版本的问题.

  5. IE 6或7不支持数据URI,也不会显示,但如果CSS中包含任何数据URI,也会导致非安全警告.对于不使用它们的IE,我们有不同的CSS.

  6. 脚本标记源中的Javascript协议链接报告为不安全:<script type="text/javascript" src="javascript:void(0)">通过清除src属性轻松避免(感谢Eric!)

  7. 没有外部库,页面或动态加载,也没有使用CDN.我们确实使用了一些第三方插件,但它们是安全交付的,不会动态加载任何其他内容.

这里有关于这个IE漏洞的很多内容,但到目前为止我发现的所有问题都指出了我已经消除过的上述问题之一.

IE6和7中是否还有其他错误可能是导致此错误的原因?

有没有办法确定IE认为哪个资源是不安全的?

Kei*_*ith 6

我找到了问题的根源,但需要进行一些挖掘.

首先,Eric Law在另一个有助于识别问题的答案中提出了一个原型工具(exe).

不安全的资源是:

data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=
Run Code Online (Sandbox Code Playgroud)

问题是IE6不支持数据URI,所以我们不使用它们.那么它来自哪里?

事实证明,jQuery UI 1.8是问题,特别是对CSS中的另一个bug的修复:

.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;
    /* http://bugs.jqueryui.com/ticket/7233
     - Resizable: resizable handles fail to work in IE if transparent and content overlaps
    */
    background-image:url(data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=);
}
Run Code Online (Sandbox Code Playgroud)

看起来其他人也发现了这个问题,它已在最新的jQuery UI CSS(1.9或更高版本)中得到修复.

我的解决方法是用空白gif的常规URL替换它,问题解决了.

  • 除了你提到的罪魁祸首之外,使用javascript:作为协议在过时的IE版本中导致这个问题.更多详情:http://blogs.msdn.com/b/ieinternals/archive/2009/06/22/https-mixed-content-in-ie8.aspx (4认同)