勇敢的浏览器屏蔽屏蔽了我的网络插座



我遇到了一个烦人的问题,我一直试图在网上搜索解决方案,但没有成功(如果我错过了什么,很乐意被指向资源)。

摘要

我的问题特别与Brave web浏览器有关,它的本地"Brave Shield"阻止了我的后端web套接字,我怀疑这是由于"指纹"造成的。

在所有其他浏览器上,我的网站都会加载,并且可以毫无问题地连接到我的后端websocket。然而,在Brave Browser和Brave Shield打开的情况下,客户端拒绝连接到我的网络套接字,并且控制台中没有显示任何错误来指示问题。

我有其他第三方网络套接字在运行,无论Brave Shield是打开还是关闭,它们似乎都能完美工作——这让我相信这可能与我创建网络套接字服务器的方式有关?

网站:https://bitcoindashy.com这与显示在"rekt"one_answers"chat"选项卡下的数据有关。

我的代码(服务器)

const https = require('https');
const {server} = require('ws');
const app = require(./app.js);  // <-- app.js holds my express() server.
//ssl info//
const privateKey  = fs.readFileSync(*omitted for privacy*)
const certificate = fs.readFileSync(*omitted for privacy*)
const credentials = {*omitted for privacy*}
const server = https.createServer(credentials, app).listen(PORT, () => {
console.log(`listening on port ${PORT}...`);
}
const wss = new Server({server}, {clientTracking: false});

我的代码(客户端)

const serverAddress = '***';
let liqWs = new WebSocket(serverAddress);
...
liqWs.onopen = (e) => console.log('testing for open') //<-- For testing
liqWs.onmessage = (e) => { *do something with the message* }

我尝试过的

  1. 尝试在Brave Sheild同时打开和关闭的两种情况下测试web套接字连接并查看"网络"选项卡
  • 当Brave Shield关闭时,连接出现并返回状态代码101-一切正常。

  • 当勇敢的盾牌打开时,连接根本不会出现在网络选项卡中,因此无法查看状态代码。

  1. 使用勇敢之盾设置四处玩耍,看看是什么具体阻止了我的连接
  • 我发现,当我允许指纹识别时,连接可以建立,网站可以按预期检索数据
  1. 考虑到以上这一点,Brave Browser似乎由于指纹识别而阻塞了我的websocket。Brave认为我的websocket可能被用来跟踪用户,因此正在阻止连接
  • 因此,在我的代码中,我尝试了以下操作:const wss = new Server({server}, {clientTracking: false});。正如ws文档所述,clientTracking选项允许我指定是否要跟踪用户。这仍然没有奏效
  1. 如果你看看上面我的客户端代码片段,我添加了一个.onpen事件监听器纯粹是为了测试
  • 当Brave Shield关闭时,控制台日志"测试打开"将按预期记录
  • 当Brave Shield打开时,没有控制台日志——考虑到这一点,我知道websocket根本没有打开

我想其他人以前也遇到过这个问题。一个解决方法是禁用Brave Shield,但这不是一个可行的解决方案,因为我的网站的访问者不应该这样做,而且由于Brave Shield是默认启用的,这是一个很大的不便。

如果我遗漏了任何重要信息,请告诉我。

如果将来有人遇到这种情况,问题是我打开的WebSockets比打开Brave Shield时允许的要多,特别是指纹屏蔽。Brave的团队很快发现了与我的代码无关的问题。

当限制为10时,我同时打开了14个websocket。Brave在即将发布的版本(1.40.x)中将此限制提高到30。

最新更新