【发布时间】:2009-02-25 23:06:12
【问题描述】:
我们正在考虑在我们的网站中启用 SSL 的部分,但某些页面包含来自第三方供应商(如 Google AdSense)的广告。
我认为这会给我们的用户带来一个烦人的问题,因为当他们查看带有广告的页面时,他们会看到诸如“此页面包含安全和非安全项目”之类的警告消息。但是,当我使用 https 而不是 http 浏览 Gmail 时,我在 Firefox 中看不到该警告。
有人知道 Gmail 是如何隐藏这个的吗?
【问题讨论】:
我们正在考虑在我们的网站中启用 SSL 的部分,但某些页面包含来自第三方供应商(如 Google AdSense)的广告。
我认为这会给我们的用户带来一个烦人的问题,因为当他们查看带有广告的页面时,他们会看到诸如“此页面包含安全和非安全项目”之类的警告消息。但是,当我使用 https 而不是 http 浏览 Gmail 时,我在 Firefox 中看不到该警告。
有人知道 Gmail 是如何隐藏这个的吗?
【问题讨论】:
某些页面包含来自第三方供应商(如 Google AdSense)的广告
那么浏览器是对的 — 不安全。
通过 AdSense 和大多数其他广告网络,您会获得一个指向 JavaScript 的链接。当您引用任何外部
因此,外部脚本是一个信任问题,但如果您使用的供应商为其广告提供 HTTPS 接口,那么至少它只是您必须信任的一个已知方。如果广告提供商只有一个 HTTP 接口,那么您将信任发送给任何可以通过中间人或类似攻击获取控制权的人。您正在有效地将整个页面的信任级别降低到普通未加密 HTTP 的信任级别,因此浏览器抱怨该页面实际上并不比任何旧的 HTTP 站点更安全是完全正确的。
【讨论】:
Google 的文档表明这是一个已知问题并且没有提供解决方法:https://www.google.com/adsense/support/bin/answer.py?answer=10528
【讨论】:
如果您尝试包含非安全内容并控制显示的内容,您可以编写一个将 url 作为参数的处理程序。
由于处理程序托管在 SSL 中,它可以获取 html,并通过 SSL 将其流式传输回浏览器。实际上它充当了您的小代理。
我在过去的许多项目中都这样做过,以便在不暴露实际网络本身的情况下从网络内获取文件。
使用此处的信息:http://www.csharp-station.com/HowTo/HttpWebFetch.aspx 您可以轻松地对其进行调整以获取参数(您要获取的实际网址)...
因此,在您呈现的页面中,您将调用 https://my.domain.com/pages/HttpWebFetch.aspx?url=http://ads.google.com/,然后 HttpWebFetch.aspx 将检索并通过 https 中继页面内容,从而消除安全/不安全警告。
【讨论】:
由于这是 Analytic 的答案,您可以使用它来不在您的安全页面上展示广告
if ("http:" == document.location.protocol) { /*show your adds here*/ }
我是从我如何在我的网站上进行分析得到这个想法的
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
我承认这意味着您无法在安全网页上展示广告,但您可能不希望 Google 阅读您的安全网页内容并展示广告。 (这是在为谷歌找借口,但正如前面提到的,他们只是不支持它)
要回答您的 GMail 问题...(在此处使用 Firebug,因此我可能会理解错误)
Gmail 只打了两个电话。首先访问https://mail.google.com,我猜这是我的电子邮件。第二个是发给https://mail.google.com/mail/channel/的帖子
我猜(其他人都纠正我)Gmail 请求来自提供广告的代理的帖子。
GMail 将内容发送到代理,代理获取广告,代理将内容发送回 Gmail。一切安全。
总猜测
感谢您的反对,但没有解释什么没有帮助
【讨论】:
“有人知道 Gmail 是如何隐藏这个的吗?”
简短回答:他们使用 https 来获取广告。通过Firebug 中的“网络”选项卡查看 GMail 的页面加载,我在 URL https://mail.google.com/mail/?ui=2&ik=bbff8a9f5c&view=ad&ak=is00jux7yq7kgk730lqdkxklz03d9d8 的请求中看到页面上的广告,所以看起来他们确实有办法通过 https 投放广告,但只有为他们自己的网站。
【讨论】:
将我所有的 http:// 更改为 https://(或相对)后,我仍然遇到这个问题,最后我意识到这是由于缓存造成的。我刷新了浏览器缓存,一切正常。此外,您的链接(a href=whatever)似乎可以是 http,这对大多数人来说可能很明显,但一开始我不确定 :)
【讨论】: