我们正在考虑启用SSL的部分网站,但某些网页包含来自第三方供应商的广告(例如Google AdSense)。
我认为这会给我们的用户带来恼人的问题,因为他们在查看带有广告的网页时会看到“此页面包含安全和非安全项目”等警告消息。但是,当我使用https而不是http浏览到Gmail时,我在Firefox中看不到该警告。
有人知道Gmail如何隐藏这个内容吗?
答案 0 :(得分:19)
某些网页包含来自第三方供应商的广告(例如Google AdSense)
然后浏览器是对的 - 这不安全。
借助AdSense和大多数其他广告网络,您可以获得指向JavaScript的链接。当您引用任何外部< script>时,您将完全信任您的页面内容到外部脚本提供程序。你需要相信他们只做他们说他们要做的事情(展示一个广告),而不是像从它所在的页面上接过登录表格那样邪恶,并窃取你输入的值,或者,如果“广告”脚本包含在您的银行帐户页面中,自动清空所有资金。
因此,外部脚本是一个信任问题,但如果您使用的是为其广告提供HTTPS接口的供应商,那么至少它只是您必须信任的一个已知方。如果广告提供商只有一个HTTP接口,那么您就会向任何可以通过中间人或类似攻击获取控制权的人发送您的信任。您有效地将整个页面的信任级别降低到普通的未加密HTTP的信任级别,因此浏览器非常正确地抱怨该页面实际上不比任何旧的HTTP站点更安全。
答案 1 :(得分:15)
Google的文档表明这是一个已知问题,但未提供解决方法:https://www.google.com/adsense/support/bin/answer.py?answer=10528
答案 2 :(得分:4)
如果您尝试包含非安全内容并控制显示的内容,则可以编写一个将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检索并转发页面内容,从而删除安全/不安全警告。
答案 3 :(得分:3)
由于这是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/
的POST我在猜测(其他人都在纠正我)Gmail会向提供广告的代理发送帖子。
GMail向代理发送内容,代理获取广告,代理将内容发送回Gmail。一切都安全。
TOTAL GUESS THERE
感谢您的downvote,但没有解释什么是无用的
答案 4 :(得分:2)
“有人知道Gmail如何隐藏这个内容吗?”
简短回答:他们使用https来抓取广告。通过Firebug中的网络标签查看GMail的网页加载情况,我看到网页上的广告位于包含网址https://mail.google.com/mail/?ui=2&ik=bbff8a9f5c&view=ad&ak=is00jux7yq7kgk730lqdkxklz03d9d8
的请求中,因此看起来他们确实可以通过https < strong>但仅限于他们自己的网站。
答案 5 :(得分:0)
将我的所有http://更改为https://(或相对)之后我仍然遇到此问题,最后我意识到这是由于缓存。我刷新了我的浏览器缓存,很好。此外,似乎您的链接(一个href =无论什么)可以是http,这对大多数人来说可能是显而易见的,但我起初并不确定:)