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 端口?具体我不知道,但必须在150064000之间,否则控制台会显示:

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 安全问题的主要内容,如果未能解决你的问题,请参考以下文章

Jetty websocket 客户端类 WebSocketClient 线程安全吗?

多用户的春天WebSocket安全问题,怎么解决

websocket链接数限制

开放的 websocket 连接都有哪些安全问题?

WebSocket 安全 Java 配置

内容安全策略拒绝连接到 Websocket 错误