Javascript Can";“显示不安全的内容”;是否检测到浏览器提示?

Javascript Can";“显示不安全的内容”;是否检测到浏览器提示?,javascript,security,ssl,web,Javascript,Security,Ssl,Web,我们都熟悉页面上混合模式(http/https)内容的问题 我在一个网站上工作,这是不可避免的。我不想阻止这种情况发生。我知道这方面有很多问题/答案 我需要的只是检测这一点(通过JavaScript?),这样我就可以调整页面行为(显示降级行为的通知或其他内容)。有什么帮助吗?使用jQuery,您可以使用以下代码找出页面上是否存在任何不安全的项: var flag = false; if($("script[src^='http:']").length > 0 || $("link

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

我在一个网站上工作,这是不可避免的。我不想阻止这种情况发生。我知道这方面有很多问题/答案


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

使用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都是我能想到的不安全内容。也许还有更多,但你可以很容易地把它们加起来。

这很有黑客味,但我设法用JavaScript在所有浏览器中解决了这个问题。让我看看能不能画出来

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

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

$(document).ready(function(e) {
    $("#secureWarn").remove();
});
所以它是这样工作的

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

    干杯,
    迈克尔

    我想我不明白?您正在提供一个包含混合内容的页面,但不知道它?你怎么会不知道页面是否包含不安全的内容?你不是在为网页提供服务吗?嘿,布拉德!我提供了一个页面,其中有一个iframe,其中包含可变内容。所以
    。我不控制可以是http的
    一些随机网站的值。这很好,但我想确保用户知道他们缺少iframe中的内容,直到媒体“显示所有内容”。有意义吗?你是说你想在本机安全警报中附加一些信息,说“这就是你缺少的东西”?不是字面上的附加,而是通过js警报等方式。嗨,goldenparrot。不,不完全是。页面中的另一个元素是“请允许不安全的内容完全使用此页面”。请记住,“显示所有内容”选项可能不存在于某些当前或未来的浏览器中。例如,一些移动浏览器可能没有这样的选项,Chrome正朝着删除它的方向发展。很酷,谢谢。我肯定知道内容是不安全的。我想知道的是两件事。1.是显示此提示的浏览器(仅适用于IE)2。用户是否已单击它或它仍在显示。然后我可以显示一个警报,在IFRAME附近的屏幕上添加一点注释等。这不是一个坏方法,但捕获动态内容可能很棘手:XHR请求或稍后异步加载的内容。问题是,它无论如何都会尝试加载一些可能不安全的内容:这在所有情况下都会触发浏览器警告(除非用户已禁用它们)。这通常是个坏主意。“我想告诉用户,在他们单击“允许”之前,该页面已被破坏。由于我无法进入的原因,我知道所有网站都是可信的。”:不幸的是,你的推理在这里有缺陷:你无法知道你的用户和其他内容提供商之间是否存在MITM。鼓励用户点击“允许”从来都不是一个好主意,因为你无法控制他们的网络。你好,布鲁诺。我确实听到了您关于鼓励用户跳过安全提示的说法。但是你忽略了“这在任何情况下都会触发浏览器警告”这一点,这根本不是真的。当底层内容也是HTTP over HTTPS时,它仅通过HTTPS添加HTTP脚本。当内容是HTTPS时,则不添加任何内容,一切正常。干杯,迈克尔。
    
    $(document).ready(function(e) {
        $("#secureWarn").remove();
    });