mixed content/display——https载入http资源的绕过

来源:互联网 发布:java鱼雷评测 编辑:程序博客网 时间:2024/05/29 14:54

一、问题

本文讲述的内容是针对以下问题:在https网站中,载入http网站的资源(网页、图片等),会被浏览器阻拦的问题。比如以下代码:

<iframe src="http://xxx.com/xxx.asp?param=value" />

如果是在https的页面中插入以下代码,将被浏览器拦截(实测IE、Chrome48、FF44均阻拦),导致param参数无法传递、xxx.asp无法载入的问题。

本文中提到的浏览器,若无特别指出,则IE是指最高IE11、chrome是指48、FF是指44。

二、初步绕过

此问题其实之前已经遇到过,采用https网站自带的外送功能(比如email),将param参数通过邮件发出来。这种解决方法的弊端是只能外送,不能载入资源。需要尝试别的方法。

最开始是在chrome中调试,想到http不行,就试一下ftp。测试了一下,发现chrome真的可以。<iframe src="ftp://user:pass@1.1.1.1/xxx.txt?param=value" />可以正常执行。

但不幸的是,FF和IE都不行。


三、分析

通过FF调试,发现原来有一个“混合的被动内容(Mixed Passive/Display Content)” 和“混合的主动内容(Mixed Active Content)”的概念。前者会被警告,但是仍然能够载入,后者会被直接阻拦。

然后发现一个关键网页:https://developer.mozilla.org/zh-TW/docs/Security/MixedContent。此文介绍了FF关于混合内容的具体处理方式。明确指出只有下述4种才是“被动内容”,link、script、iframe、url方式载入的CSS、js的xmlhttprequest、data属性载入的object等是“主动内容”:

    <audio> (src attribute)
    <img> (src attribute)
    <video> (src attribute)
    <object> subresources (when an <object> performs HTTP requests)

进一步发现IE的:https://blogs.msdn.microsoft.com/ie/2011/06/23/internet-explorer-9-security-part-4-protecting-consumers-from-malicious-mixed-content/,大同小异。

再搜,发现W3的:https://www.w3.org/TR/mixed-content/,但没细看。


四、解决

既然img是被动内容,那要不用img的src传送param数据?

其实最开始是因为https的网页默认不载入图片,才使用iframe送参数的,如果采用JS动态载入img呢?

经测试,成功!问题解决。

0 1