破坏绿色 SSL 栏的不安全图像

insecure image breaking the green SSL bar

我的网站上有一些图像 links 导致将绿色 SSL 证书显示为灰色。

错误是

This content should also be served over HTTPS. 2jquery.min.js:5 Mixed Content: The page at 'https://mywebsite.com/' was loaded over HTTPS, but requested an insecure image 'http://www.otherwebsite.net/wp-content/uploads/2015/10/ALPHA.FOUNDER.png'. This content should also be served over HTTPS.

这里有几个问题:

但最终我的用户可以加载 HTTP 和 HTTPS 的任何图像

有什么方法可以覆盖这个灰色锁并使其变为绿色吗?

基本上,如果不进行一些严肃的黑客攻击,就无法解决这个问题。

HTTPS 表示该站点是安全的,并且会向用户显示一个漂亮的绿色挂锁以确认这一点。

访问者知道他们正在访问的网站是 URL 中的网站,并且他们显示的内容是网站所有者提供的内容,没有以任何方式更改。他们也知道他们正在浏览的内容是保密的。大多数用户是否真正理解到这种深度是无关紧要的 - https 意味着安全。

如果页面的一部分是通过 http 加载的,则情况不再如此,因此不会显示绿色挂锁 - 这是正确的。

现在有不同类型的混合内容:

图像是所谓的被动混合内容。由于它是通过 http 传输的,所以它是未加密的,因此可以在访问者不知情的情况下用另一个图像替换它。此外,用户要求窃听者可以看到特定图像,这意味着他们不再私下浏览。这可能会或可能不会那么糟糕,具体取决于图像是什么。例如,图像可能是构建绝密项目的示意图,将其替换为另一个可能会危及该项目。并且也会让其他人知道您正在考虑构建这个绝密项目。

所以被动混合内容可能很糟糕,但主动混合内容可能更糟。例如,一个 JavaScript 请求可能会受到干扰,因此它可能被用来更改整个页面或登录密码或其他一百万件坏事。

然而,一旦您开始允许一些混合内容,您只是在要求向用户提供复杂性和令人困惑的信息。最好不要区分它们,只说:如果你想要绿色挂锁,就不要混合内容。浏览器开始严格执行这一点,当它们只用于执行活动混合内容时,我认为这是一件好事。

那么你能做些什么来解决你的问题?

好吧,您可以将图片托管在您的网站上,而不是 link 转到其他网站。无论如何,这是一件好事,因为其他站点可能不会欣赏您使用他们的带宽来提供图像,而且如果他们更改图像,您也无法控制。参见 how this sort of thing turned out for the Huffington Post when it upset one artist over this sort of hot linking

或者您可以使用代理完成复杂的路由,该代理从 http 获取资源并通过 https 将其传送到您的站点。但是有些人会说这有点作弊(再次想象上面的内容被窃听者更改的场景)并且当有更简单的选项时(主要是不要在 https 上使用 http 资源)这听起来也很麻烦页)。

您还可以在您的站点上实施内容安全策略,以将不安全的 http 请求升级为 https。这仅在现代浏览器上受支持,并且在这个特定示例中无济于事(因为其他站点上的 https 已损坏,因此无法加载图像)但至少会停止破坏绿色挂锁,并且还可以帮助他们处理其他图像添加可在 https 和 http 上使用的内容,并添加了错误的 link。虽然有点软糖。

或者只是停止使用来自仅 http 站点的资源。特别是那些 https 证书已过期的人。无论如何听起来像是一个狡猾的网站。

使用 AWS Cloudfront 创建反向代理

对于 http://test.com/user/profile/user1.jpg

的图像
  1. 创建新分配
  2. Select 网络传送方式
  3. 将 'Origin Domain Name' 设置为不安全图像的基础 URL
  1. 将'Origin Path'设置为/user/profile
  2. 将查看器协议策略设置为仅 HTTPS
  3. 您可以选择允许 gzip
  4. 设置为启用

然后您应该能够像这样访问图像:

https://{cloudfrontid}.cloudfront.net/user1.jpg

如果您想保留 url 格式,请忽略原始路径