破坏绿色 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.
这里有几个问题:
- 图像 link 是 HTTP
- 图片来源正在从其他网站加载
他们的 SSL 证书已过期
但最终我的用户可以加载 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
的图像
- 创建新分配
- Select 网络传送方式
- 将 'Origin Domain Name' 设置为不安全图像的基础 URL
- 将'Origin Path'设置为/user/profile
- 将查看器协议策略设置为仅 HTTPS
- 您可以选择允许 gzip
- 设置为启用
然后您应该能够像这样访问图像:
https://{cloudfrontid}.cloudfront.net/user1.jpg
如果您想保留 url 格式,请忽略原始路径
我的网站上有一些图像 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.
这里有几个问题:
- 图像 link 是 HTTP
- 图片来源正在从其他网站加载 他们的 SSL 证书已过期
但最终我的用户可以加载 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
的图像- 创建新分配
- Select 网络传送方式
- 将 'Origin Domain Name' 设置为不安全图像的基础 URL
- 将'Origin Path'设置为/user/profile
- 将查看器协议策略设置为仅 HTTPS
- 您可以选择允许 gzip
- 设置为启用
然后您应该能够像这样访问图像:
https://{cloudfrontid}.cloudfront.net/user1.jpg
如果您想保留 url 格式,请忽略原始路径