【问题标题】:How can I avoid the "This page contains both secure and non secure items" warning in my browser?如何避免浏览器中出现“此页面包含安全和非安全项目”警告?
【发布时间】:2009-02-25 23:06:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: security ssl gmail


    【解决方案1】:

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

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

    通过 AdSense 和大多数其他广告网络,您会获得一个指向 JavaScript 的链接。当您引用任何外部

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

    【讨论】:

      【解决方案2】:

      Google 的文档表明这是一个已知问题并且没有提供解决方法:https://www.google.com/adsense/support/bin/answer.py?answer=10528

      【讨论】:

      • 如果google不支持,我通过https登录gmail时如何看到google的广告?
      • Google 将广告直接嵌入页面,不使用任何机制将其包含在外部。
      • Gmail 被视为另一种 Google 产品。
      • 这似乎是回答此页面上问题的唯一正确答案。
      【解决方案3】:

      如果您尝试包含非安全内容并控制显示的内容,您可以编写一个将 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 中继页面内容,从而消除安全/不安全警告。

      【讨论】:

      • 有趣...您对这种方法有什么参考吗?你有任何代码示例吗?这是通过 javascript 完成的吗?
      • @Mauro:您的回答会将您的网站变成一个开放的代理。我认为您必须找到一个更好的解决方案,而不是简单地将 URL 作为参数传递。然而,除了这个漏洞之外,这个想法还有优点:-)
      • @Scraimer,是的,它显然会考虑一些安全问题,例如,您可以将 url 存储在配置文件中,对其进行加密,不传递实际的 url,而是传递一个参考/id url 等。为简单起见,我使用 URL 作为参数。
      【解决方案4】:

      由于这是 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,因此我可能会理解错误)

      1. 我使用始终安全的连接登录 gmail。没有广告。
      2. 我打开控制台查看 gmail 建立了哪些连接。
      3. 我清除了控制台
      4. 我点击右侧显示广告的消息。

      Gmail 只打了两个电话。首先访问https://mail.google.com,我猜这是我的电子邮件。第二个是发给https://mail.google.com/mail/channel/的帖子

      我猜(其他人都纠正我)Gmail 请求来自提供广告的代理的帖子。

      GMail 将内容发送到代理,代理获取广告,代理将内容发送回 Gmail。一切安全。

      总猜测

      感谢您的反对,但没有解释什么没有帮助

      【讨论】:

        【解决方案5】:

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

        简短回答:他们使用 https 来获取广告。通过Firebug 中的“网络”选项卡查看 GMail 的页面加载,我在 URL https://mail.google.com/mail/?ui=2&amp;ik=bbff8a9f5c&amp;view=ad&amp;ak=is00jux7yq7kgk730lqdkxklz03d9d8 的请求中看到页面上的广告,所以看起来他们确实有办法通过 https 投放广告,但只有为他们自己的网站

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-13
            • 2010-10-01
            • 2012-11-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多