Firefox Websocket 安全问题
Posted
技术标签:
【中文标题】Firefox Websocket 安全问题【英文标题】:Firefox Websocket security issue 【发布时间】:2012-07-30 21:05:35 【问题描述】:我们在 Linode 盒子上设置了端口 8080 上的 websocket 服务器。 Chrome 和 Opera 运行良好。然而,Firefox 抱怨该操作不安全。
“操作不安全:代码 18”
如果我尝试在页面加载之前在 Web 控制台中创建一个新的 WebSocket 对象,一切都很好。但是,在页面加载后有些东西很糟糕,然后我就无法再创建对象了。见附件截图。
我不知道什么操作是不安全的,甚至不知道如何诊断。
【问题讨论】:
我应该注意,这在连接到本地主机的开发模式下工作正常。 Websocket 服务器在 Linode 上直接暴露给互联网 这是 Firefox 的新版本吗?由于安全问题,他们禁用了几个版本的 Websockets。 @Dreen 这是最新的,但正如您在屏幕截图顶部看到的那样,我能够在加载页面之前毫无问题地建立 Websoccket 连接 【参考方案1】:除了安全的 ssl 上下文和跨域策略之外,分配一些端口也会触发错误。
什么是 Firefox 的有效 http 端口?具体我不知道,但必须在1500
和64000
之间,否则控制台会显示:
SecurityError: The operation is insecure.
http 链接会说:
This address is restricted
This address uses a network port which is normally used for purposes other than Web browsing.
Firefox has canceled the request for your protection.
【讨论】:
【参考方案2】:在 Firefox 中打开“about:config”网址。搜索 allowInsecureFromHTTPS 并将其设置为 true
【讨论】:
【参考方案3】:遇到同样的问题并尝试通过将network.websocket.allowInsecureFromHTTPS
更改为about:config
来解决,但没有成功。
最终找到这篇文章 => Unhandled Rejection (SecurityError): The operation is insecure. On a fresh create-react-app project
在 index.js 中更改它最终对我有用
serviceWorker.register();
//serviceWorker.unregister();
【讨论】:
【参考方案4】:正如您在另一个答案中指出的那样,默认情况下,Firefox 不允许 https://
到 ws://
。
转到 Firefox 的 about:config
并切换 network.websocket.allowInsecureFromHTTPS
将摆脱 SecurityError
。
【讨论】:
是的,这有效!至少有一种解决方法可以解决 Firefox 的讨厌限制。 @FaisalMushtaq:这不是“讨厌的限制”,而是真正的安全最佳实践。 是的,但是它使本地开发有点麻烦。很高兴他们可以选择配置它!【参考方案5】:我解决了这个问题。应用程序本身在 SSL 下,但正在访问的 websocket 不是。 Chrome 和 Opera 不在乎,但 Firefox 不在乎。根据:
https://bugzilla.mozilla.org/show_bug.cgi?id=303952
这是已知的,不被视为错误。 Mozilla 的回应:不会修复
解决办法,将websocket服务器置于SSL下,使用wss://
【讨论】:
您能否提供有关如何put websocke server under SSL and use wss://
的信息?我不确定您的具体意思。
@Leeish 要使用安全的 websocket 客户端,只需使用 wss://
指定 url。要在服务器上启用 SSL/TLS,您需要参考您正在使用的任何 websocket 服务器的文档。可能不支持 TLS。
我不认为这个 bugzilla 链接是正确的,它(当前)指向使用 SSL 隧道时 HTTPS 证书不匹配的问题。该解决方案在技术上仍然是正确的,尽管恕我直言,更好的解决方法是打开allowInsecureFromHTTPS
,这样 Firefox 的行为就像其他浏览器一样......
不幸的是,您不能要求您的(测试)用户为此更改 Firefox 配置,也不能总是要求安装自定义证书(如果您买不起)。
非常感谢您的回答。把我的头发拉出来,解决方案归结为在前端添加一个字符('ws://'到'wss://')。【参考方案6】:
这是基于有限信息的预感,我可能应该将其放入评论中,但我还没有足够的声望点来做到这一点。
查看您的日志,似乎从收到[object Websocket]
(时间 17:46:36.683)到您收到 The connection to ws://.....
(时间 17:47:00:952)错误消息过去了 24 秒。长时间的延迟让我相信服务器可能会超时并关闭 websocket 连接。查看this answer 寻找潜在的解决方案。
【讨论】:
如果是这样,那为什么 Chrome 和 Opera 运行良好? 好点,可能不是服务器端超时,除非服务器对不同用户代理的响应不同,这不太可能...... 实际上,无论浏览器如何,都可能发生相同的超时,但只有 Firefox 报告了安全错误。其他浏览器是否在重新建立 websocket?顺便说一句,Linode 是否支持 websocket?快速的谷歌搜索没有提供任何确凿的信息 应用程序在 Chrome 和 Opera 上运行良好,websocket 服务器按预期运行。我们有多个同时使用这些浏览器的用户,而且没有任何问题。 就 Linode 的 websocket 支持而言,没有对 Websockets 的“支持”,因为 Linode 只是提供了一个 VPS。由我们来构建服务器。 websocket 服务器本身直接暴露在互联网上,中间没有代理。以上是关于Firefox Websocket 安全问题的主要内容,如果未能解决你的问题,请参考以下文章