能“显示不安全内容”提示浏览器进行检测?(Can “Show Insecure Content” B

2019-07-31 06:41发布

我们都熟悉的混合方案的网页上(HTTP / HTTPS)内容的问题。

我工作的一个网站上,这是不可避免的。 我并不想阻止这一点 。 我知道有一吨在该问题/答案。

我需要的是简单地检测到这种(通过JavaScript?),所以我可以调整页面的行为(表现出退化的行为或某事的通知)。 任何帮助吗?

Answer 1:

使用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是所有我能想到的不安全内容。 也许还有更多,但你可以很容易地add'em了,你找到。



Answer 2:

这是哈克,但我设法与刚刚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将加载,除非用户确定的不安全/混合内容的内容。 我想告诉页有点儿破获,直到他们点击允许用户。 至于原因,我不能去成,我知道所有的网站都值得信赖。 只是他们中的一些不支持SSL和父站点需要。

据我所知,我不能检测与JS此对话框/半负载状态。 但我所能做的就是在不安全的连接,如果他们允许它(这也使得IFRAME GO)运行JS。 所以, 只有URL_WHICH_IS_MAYBE_INSECURE是http:该网站是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. 幸福开始......

希望这可以帮助别人。

干杯,迈克尔·



文章来源: Can “Show Insecure Content” Browser Prompt Be Detected?