【发布时间】:2018-01-16 06:24:12
【问题描述】:
TL;DR:网站通过 HTTPS 提供服务,需要通过未加密的通道 (ws:// url) 访问 WebSockets 服务器。浏览器不喜欢这样。
加密 websocket 是可能的,但不方便 - 没有可以签署证书的受信任机构,因此需要为每个客户端手动安装它。我想把它作为最后的手段。
网站必须通过 HTTPS 提供服务,并且不能降级为 HTTP。
还有其他方法可以绕过这个限制吗?我尝试了 Content-Security-Policy,但没有成功。
【问题讨论】:
-
如果有,这是一个安全漏洞,需要修复。
-
@JamesKPolk - 你这么认为吗?发明 CORS 是为了在合法场景中真正需要时显式绕过同源策略。为什么不用类似的东西来绕过“相同的安全级别”(或其他任何名称)?
-
嗯,我认为困难在于用户界面设计。浏览器应该如何向用户表明他们不再安全?混合内容警告?
-
@JamesKPolk - 我认为开发人员应该有责任确保安全,然后告诉浏览器“是的,即使它不是通过加密通道加载的,它仍然是安全的” .同样,与 CORS 相同 - 开发人员明确并付出额外的努力告诉浏览器“是的,毕竟这没关系”。然后不需要额外的用户界面。
-
CORS 通过允许在受控、允许的制度下穿越站点来维护安全性。从受 SSL 保护的页面中使用非 SSL websocket 会破坏安全性。开发人员不能说没关系,因为它不是 - 开发人员无法采取任何措施来阻止已打开的攻击。它实际上是阻止 websocket 还是给出混合内容警告?
标签: security encryption websocket secure-context