Security 我怎样才能避免这个“错误”;此页面包含安全和非安全项目“;浏览器中的警告?

Security 我怎样才能避免这个“错误”;此页面包含安全和非安全项目“;浏览器中的警告?,security,ssl,gmail,Security,Ssl,Gmail,我们正在考虑在我们的网站中启用SSL,但有些页面包含来自第三方供应商(如Google AdSense)的广告 我认为这会给我们的用户带来一个恼人的问题,因为当他们查看带有广告的页面时,会看到类似“此页面包含安全和非安全项目”的警告消息。然而,当我使用https而不是http浏览Gmail时,我在firefox中看不到该警告 有人知道Gmail是如何隐藏这一点的吗?谷歌的文档表明这是一个已知的问题,没有提供解决办法: 某些页面包含来自第三方供应商(如谷歌AdSense)的广告 那么浏览器是对的 —

我们正在考虑在我们的网站中启用SSL,但有些页面包含来自第三方供应商(如Google AdSense)的广告

我认为这会给我们的用户带来一个恼人的问题,因为当他们查看带有广告的页面时,会看到类似“此页面包含安全和非安全项目”的警告消息。然而,当我使用https而不是http浏览Gmail时,我在firefox中看不到该警告


有人知道Gmail是如何隐藏这一点的吗?

谷歌的文档表明这是一个已知的问题,没有提供解决办法:

某些页面包含来自第三方供应商(如谷歌AdSense)的广告

那么浏览器是对的 — 那是不安全的

通过AdSense和大多数其他广告网络,您可以获得指向JavaScript的链接。当您引用任何外部脚本提供程序时,您将完全信任外部脚本提供程序对页面内容的信任。你需要相信他们只会做他们说他们要做的事情(显示广告),而不是像从页面上接管登录表单并窃取你输入的值这样的邪恶行为,或者,如果你的银行账户页面上包含了“广告”脚本,会自动清空你所有的钱


因此,外部脚本是一个信任问题,但如果您使用的是为其广告提供HTTPS接口的供应商,那么至少它是您必须信任的唯一已知方。如果广告提供商只有一个HTTP接口,那么你就向任何可以通过中间人攻击或类似攻击获得控制权的人发出了信任。您正在有效地将整个页面的信任级别降低到普通未加密HTTP的信任级别,因此浏览器抱怨该页面实际上并不比任何旧HTTP站点更安全是完全正确的。

因为这是分析的答案,所以您可以使用它在安全页面上不显示广告

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>

var gaJsHost=((“https:==document.location.protocol)?”https://ssl." : "http://www.");
write(unescape(“%3Cscript src=”+gaJsHost+“google analytics.com/ga.js”type='text/javascript'%3E%3C/script%3E”);
我承认这意味着你不能在你的安全页面上显示广告,但你可能不希望谷歌阅读你的安全页面内容并显示广告。(这是一种逃避,为谷歌找借口,但如上所述,他们就是不支持)

要回答你的GMail问题。。。(在这里使用Firebug,因此我可能会对此进行错误解释)

  • 我使用始终安全的连接登录到gmail。没有广告
  • 我打开控制台,看看gmail有什么连接
  • 我清理控制台
  • 我单击右侧显示广告的消息
  • Gmail只打了两个电话。首先,我猜是我的电子邮件。第二个是一个帖子

    我猜(其他人都在纠正我)Gmail要求一个代理发布广告

    GMail将内容发送给代理,代理接收广告,代理将内容发送回GMail。都是秘密的

    总猜测数

    谢谢你的否决票,但没有解释什么是没有帮助的

    “有人知道Gmail是如何隐藏这一点的吗?”


    简短回答:他们使用https获取广告。通过网络标签查看GMail的页面加载,我看到页面上的广告在URL
    https://mail.google.com/mail/?ui=2&ik=bbff8a9f5c&view=ad&ak=is00jux7yq7kgk730lqdkxklz03d9d8
    所以看起来他们确实有办法通过https提供广告,但仅限于对于他们自己的站点

    如果您试图包含不安全的内容并控制显示内容,则可以编写一个以url为参数的处理程序

    由于处理程序托管在SSL中,因此它可以获取html,并通过SSL将其流回浏览器。实际上,它只是你的一个小代理人

    我在过去为许多项目做过这项工作,目的是从网络中获取文件,而不暴露实际的网络本身

    使用此处的信息:您可以轻松地调整它以获取参数(您想要获取的实际url)


    因此,在呈现的页面中,您可以调用HttpWebFetch.aspx,然后通过https检索并中继页面内容,从而删除安全/不安全警告。

    将所有http://更改为https://(或相对)后,我仍然存在此问题,最后我意识到这是由于缓存造成的。我刷新了浏览器缓存,一切正常。另外,看起来你的链接(a href=where)可以是http,这对大多数人来说可能是显而易见的,但一开始我不确定:)

    如果谷歌不支持它,当我通过https登录gmail时,我怎么能看到谷歌的广告呢?谷歌将广告直接嵌入到页面上,不要使用任何机制将它们包含在外部。Gmail作为另一个谷歌产品得到特殊对待。这似乎是回答本页问题的唯一正确答案。有趣。。。你有没有参考过这种方法?你有代码样本吗?这是通过javascript完成的吗?@Mauro:你的回答会把你的网站变成一个开放的代理。我认为您必须找到一个比简单地将URL作为参数传递更好的解决方案。但是,除了这个漏洞,这个想法有优点:- @ ScRimver,是的,它显然需要考虑一些安全问题,例如,可以将URL存储在配置文件中,加密它,不传递实际URL,但是URL的引用/ ID等。为了简单起见,我使用URL作为参数。