如何使用内容安全策略元标记允许混合内容(http与https)?

30

我正在强制使用 https 访问我的网站,但有些内容必须通过 http 加载(例如视频内容不能通过 https),但浏览器因为 mixed-contents 策略而阻止请求。

经过数小时的搜索,我发现可以使用 Content-Security-Policy,但我不知道如何在其中允许混合内容。

<meta http-equiv="Content-Security-Policy" content="????">

我有同样的问题。我认为在服务器端提供启用混合内容的方法不是问题。开发人员可以对加载的数据进行校验和,以确定内容是否被篡改。就像例如Debian软件包通过HTTP下载然后进行校验和一样,我不明白为什么我的CDN必须是HTTPS。程序员(有时)知道自己在做什么。 - jg6
3个回答

30

无法实现。

CSP是用来限制网站内容的,而不是放宽浏览器的限制。

安全的HTTPS网站为用户提供了一定的保障,如果允许在其上加载HTTP内容(因此会出现混合内容警告),这就不太公平了,如果您可以未经用户同意隐藏这些警告,那就更加不公平了。

您可以使用CSP来帮助迁移到HTTPS,例如:

  1. 您可以将它用于自动升级HTTP请求到HTTPS(尽管浏览器支持并不普遍)。这有助于防止您错过将HTTP链接更改为HTTPS等效的情况。但是,这假设资源可以通过HTTPS加载,看起来您无法通过HTTPS加载它们,因此这不是一个选择。

  2. 您还可以使用CSP来帮助您识别您错过的网站上的任何HTTP资源,通过向您可以监视的服务返回消息来报告尝试加载HTTP资源。这使您可以识别和修复HTTP链接以便转换为HTTPS,因此您不必依赖于上述自动升级。

但这都不是您真正想要的。


安全性是否可以通过源响应头放宽?我正在研究meta标签,因为听起来更容易添加。 - Harry Moreno
不。它只用于加强安全策略 - 不是放松它。正如我在我的回答中提到的那样。 - Barry Pollard

15

你不应该...但是你可以,该功能在这里演示,一个HTTP PNG图片会动态转换为HTTPS。

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

此外还有一个新的权限API在这里描述,可以允许Web服务器检查用户对地理位置、推送、通知和Web MIDI等功能的权限。


5
我认为这种方法对你的情况没有帮助,该解决方案假定您已经拥有有效的安全URL,其中包含“https”,那么此标签将帮助浏览器自动调用那些使用“https”而不是“http”的URL,而无需手动在页面代码中更改。但如果您没有安全的URL,我相信您不能使用这种方法。 - Green
2
巨大的-1,因为upgrade-insecure-requests与允许混合内容无关,它只是将请求方案更改为https,这就是附加示例中发生的事情,而不是“即时转换为HTTPS”。 - lucifer63
无关的,OP 想知道如何使用 meta 标签。 - nodws
1
不,他问的是“如何允许混合内容”。那个元标记并不能允许它。 - stt
是的,它将允许您在使用有效SSL的同时使用旧的URL。 - nodws
显示剩余2条评论

1
虽然您无法在浏览器中允许混合内容,但您可以尝试将终点包装在本地终点上,并通过HTTPS提供服务。因此,HTTP/HTTPS的混合发生在后端到后端之间,这是被允许的,并且应该足够安全。在PHP中,包装器终点可能如下所示:

<?php
    $endp = !isset($_GET['endp']) ? '' : $_GET['endp'];
    if ($endp === 'doit') {
        header('Content-Type: application/json');
        echo file_get_contents('http://problematic-server/doit');
    } else {
        echo '{"err":"unsupported-endpoint"}';
    }
// Don't close php tag to avoid unwanted whitespace in response.

在您的情况下,针对视频内容可能是不可能的。

这是一个聪明的解决方案,但意味着服务器上的流量增加,如果您无法控制problematic-server,那么会打开许多新的潜在攻击面。在使用这个解决方案之前,请注意这一点。 - Freedom_Ben

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接