4

我们都熟悉页面上混合方案(http / https)内容的问题。

在此处输入图像描述

我正在一个不可避免的网站上工作。我不想阻止这一点。我知道有很多问题/答案。

我需要的只是检测这一点(通过 JavaScript?),这样我就可以调整页面行为(显示降级行为的通知或其他内容)。有什么帮助吗?

4

2 回答 2

4

使用 jQuery,您可以使用以下代码找出页面上是否存在任何不安全的项目:

var flag = false;
if($("script[src^='http:']").length > 0
    || $("link[type='text/css'][href^='http:']").length > 0
    || $("img[src^='http:']").length > 0
    || $("iframe[src^=http:]").length > 0)
    flag = true; // insecure content :(
else
    // yay!

图片、JS、CSS 都是我能想到的不安全内容。也许还有更多,但您可以轻松地将它们添加到您发现的地方。

于 2012-08-30T20:04:55.107 回答
3

这很 hacky,但我设法在所有浏览器中仅使用 JavaScript 解决了这个问题。让我看看我能不能把它画出来。

我们有这个基本的加密页面:

<html> 
   <body>
        <div> stuff </div>
        <iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
   </body>
</html>

什么时候URL_WHICH_IS_MAYBE_INSECURE是https,一切都很好。但是当URL_WHICH_IS_MAYBE_INSECURE是http时,IE不会加载内容,除非用户OK的不安全/混合内容。我想告诉用户该页面有点被破坏,直到他们点击允许。由于我无法进入的原因,我知道所有网站都是值得信赖的。只是其中一些不支持 SSL,而父站点需要。

AFAIK,我无法使用 JS 检测到此对话框/半加载状态。但是我能做的是在不安全的连接上运行 JS,如果他们允许的话(这也使 iframe 运行)。因此,只有URL_WHICH_IS_MAYBE_INSECUREhttp 和站点是 https(混合)时,我才添加两位代码 + HTML。

<html> 
   <body>
        <div> stuff </div>
        @if(needSpecialHandlingForMixedMode) {
            <div id="secureWarn">
                 WARNING: This page has limited functionality, allow mixed content
             </div>
        }
        <iframe src="URL_WHICH_IS_MAYBE_INSECURE"></iframe>
   </body>

   @if (needSpecialHandlingForMixedMode)
   {
      string baseUrl = Request.Url.SchemeAndHostAndPort().Replace("https", "http");
      <script src="@baseUrl/scripts/security-warning.js"></script>
   }
</html>

脚本是

$(document).ready(function(e) {
    $("#secureWarn").remove();
});

所以它是这样工作的。

  1. 如果是混合模式,则 iframe 和脚本只有在用户允许的情况下才会加载。这在 IE 中默认是不允许的,在 Chrome 和 FireFox 中默认是允许的。
  2. 如果他们什么都不做(例如,在 IE 中不允许),它将保持警告 div 可见。
  3. 如果他们确实单击它,则 iframe 会加载,并且现在脚本也会运行(因为它不安全地返回到我的服务器),这会从页面中删除警告。
  4. 幸福开始...

希望这可以帮助某人。

干杯,迈克尔

于 2012-08-30T23:09:38.267 回答