可以“检测不安全内容”浏览器提示?

时间:2012-08-30 19:01:40

标签: javascript security ssl web

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

enter image description here

我正在开发一个不可避免的网站。我不想阻止此。我知道有很多问题/答案。

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

2 个答案:

答案 0 :(得分: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是我能想到的所有不安全的内容。也许还有更多,但你可以很容易地添加你的发现。

答案 1 :(得分: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将加载内容,除非用户确定不安全/混合内容。我想告诉用户页面有点被破坏,直到他们点击允许。由于我无法进入的原因,我知道所有网站都值得信赖。其中一些不支持SSL,父站点需要。

AFAIK,我无法用JS检测到这个对话框/半加载状态。但我能做的就是在他们允许的情况下在不安全的连接上运行JS(这也使iframe成为可能)。当URL_WHICH_IS_MAYBE_INSECURE是http&amp;时,该网站是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&amp;火狐。
  2. 如果他们什么也不做(例如,在IE中不允许),它会使警告div保持可见。
  3. 如果他们点击它,iframe加载,现在脚本也运行(因为它不安全回到我的服务器),这将从页面中删除警告。
  4. 幸福开始......
  5. 希望这有助于某人。

    干杯, 迈克尔