今天早上,当我将Firefox浏览器升级到最新版本(从22升级到23)时,我的后台办公室(网站)的一些关键方面停止了工作。

查看Firebug日志,报告了以下错误:

Blocked loading mixed active content "http://code.jquery.com/ui/1.8.10/themes/smoothness/jquery-ui.css"
Blocked loading mixed active content "http://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"`

在其他错误中,由上述两个中的后者未加载引起。

上述问题是什么意思?我该如何解决?


我发现这篇博客文章澄清了一些事情。引用最相关的部分:

Mixed Active Content is now blocked by default in Firefox 23! What is Mixed Content? When a user visits a page served over HTTP, their connection is open for eavesdropping and man-in-the-middle (MITM) attacks. When a user visits a page served over HTTPS, their connection with the web server is authenticated and encrypted with SSL and hence safeguarded from eavesdroppers and MITM attacks. However, if an HTTPS page includes HTTP content, the HTTP portion can be read or modified by attackers, even though the main page is served over HTTPS. When an HTTPS page has HTTP content, we call that content “mixed”. The webpage that the user is visiting is only partially encrypted, since some of the content is retrieved unencrypted over HTTP. The Mixed Content Blocker blocks certain HTTP requests on HTTPS pages.

在我的例子中,解决方案是简单地确保jquery包含如下(注意去除协议):

<link rel="stylesheet" href="//code.jquery.com/ui/1.8.10/themes/smoothness/jquery-ui.css" type="text/css">
<script type="text/javascript" src="//ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"></script>

请注意,临时的“修复”是点击地址栏左上角的“屏蔽”图标,并选择“禁用此页面上的保护”,尽管出于明显的原因,不建议这样做。

更新:这个来自Firefox (Mozilla)支持页面的链接在解释什么是混合内容方面也很有用,正如上面一段所给出的,它实际上提供了如何显示页面的细节:

Most websites will continue to work normally without any action on your part. If you need to allow the mixed content to be displayed, you can do that easily: Click the shield icon Mixed Content Shield in the address bar and choose Disable Protection on This Page from the dropdown menu. The icon in the address bar will change to an orange warning triangle Warning Identity Icon to remind you that insecure content is being displayed. To revert the previous action (re-block mixed content), just reload the page.


这意味着你从https调用http。你可以在你的脚本标签中使用src="//url.to/script.js",它会自动检测。

或者你可以在你的src中使用https,即使你将它发布到一个http页面。这将避免评论中提到的潜在问题。


在没有白名单功能的情况下,你必须做出“全部”或“一无所有”的选择。您可以完全禁用混合内容阻塞。


无选择

您需要永久禁用当前活动概要文件的混合内容阻塞。

在“Awesome Bar”中,输入“about:config”。如果这是您的第一次,您将收到“这可能使您的保修无效!”消息。

是的,你要小心。是的,你答应我!

找到security.mixed_content.block_active_content。将其值设置为false。


所有的选择

iDevelApp的答案非常棒。


如果你的应用服务器是weblogic,那么确保WLProxySSL ON条目存在(也要确保它不应该被注释)在webserver的conf目录下的weblogic.conf文件中。然后重新启动web服务器,它将工作。


我也有同样的问题,因为我买了一个CSS模板,它通过http://whatever.js.com/javascript.js抓取了一个外部javascript文件。我在浏览器里打开了那个页面,然后把它改成了https://whatever……使用SSL,它工作,所以在我的HTML javascript标签,我只是改变了URL使用https而不是http,它工作。


如果您通过AJAX使用内部服务,请确保url指向https,这为我清除了错误。

最初阿贾克斯网址:“http://XXXXXX.com/Core.svc/ +。”这是ApiName 由AJAX ApiName网址:“https://XXXXXX.com/Core.svc/ +,


我发现,如果你在包含或混合http://www.example.com之类的页面时遇到问题,你可以通过放置//www.example.com来解决


由于安全性,它给出了误差。 为此,请在网站url中使用“https”而不是“http”。

例如:

   "https://code.jquery.com/ui/1.8.10/themes/smoothness/jquery-ui.css"
   "https://ajax.aspnetcdn.com/ajax/jquery.ui/1.8.10/jquery-ui.min.js"

在https协议上强制重定向,你也可以在根文件夹的。htaccess中添加这个指令

RewriteEngine on

RewriteCond %{REQUEST_SCHEME} =http

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

当我的网站从http到https时,我也遇到了同样的问题。我们已经添加了规则,所有请求重定向http到https。

你需要添加站点间请求重定向规则,但你必须删除外部js/css的重定向规则。


将下面的<meta>标记放入文档的<head>部分,强制浏览器将不安全连接(http)替换为安全连接(https)。如果连接能够使用https,这可以解决混合内容的问题。

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

如果你想要阻塞,那么将下面的标签添加到<head>标签中:

<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content">

@Blender评论是最好的方法。永远不要在代码的任何地方硬编码协议,因为如果你从http转移到https,它将很难改变。因为您需要手动编辑和更新所有文件。

这总是更好的,因为它自动检测协议。

src="//code.jquery.com

在相关页面,使混合内容https到http调用,这是不可访问的,我们可以添加以下条目在相关和摆脱混合内容错误。

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

我只是通过在头部添加以下代码来修复这个问题:

    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">

简单地将HTTP更改为HTTPS就解决了这个问题。

错误的:

<script src="http://code.jquery.com/jquery-3.5.1.js"></script>

正确的:

<script src="https://code.jquery.com/jquery-3.5.1.js"></script>

我已经设法修复这个使用这些:

Firefox用户

在地址栏中打开新选项卡,输入about:config,进入配置界面。 搜索security.mixed_content.block_active_content 将TRUE改为FALSE。

Chrome用户

单击URL旁边的“不安全警告” 在弹出框中单击“站点设置” 将不安全内容更改为允许 关闭并刷新页面


@if (env('APP_DEBUG'))
        <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
@endif

Laravel Blade的语法,请记住仅用于调试以避免MITM攻击和窃听

也使用

http -> https

对于Ajax或普通JS脚本或CSS也将解决这个问题。