保护 Socket.IO Websocket 并将其限制在域中

Securing a Socket.IO Websocket and restricting it to a domain

所以我是 Socket.IO 的绝对初学者,但我有一个预构建的应用程序需要通过两种方式进行保护:它需要通过 HTTPS 传输并且需要仅限于服务器数据到特定域。

到目前为止,这是发射器的代码:https://github.com/Bitzz/Pokemon-Go-Coords/blob/master/discord-bot/index.js 我该如何保护它? 我假设

io.set('origins', 'https://example.com:*');

第 156 行会将其限制为一个域... 我可以只将特定域列入黑名单吗? 除此之外,如何让它通过 wss 通过 https 发出?

目前控制台显示:

我想我可以弄清楚如何配置 Web 端 reader 以查找通过 https 的 websocket,但我不知道如何发送它。 请用简单的话我不是聪明的饼干。 :(

要限制Socket.IO为多个域,我相信你只需要将每个域分隔一个space。

io.set('origins', 'https://example.com:* https://anotherdomain.com:*');

关于 SSL 连接,有几种存档方式:

  1. 配置Socket.IO在NodeJS中使用ssl(wss://而不是ws://),这里有一个答案:node.js, socket.io with SSL
  2. 用Nginx创建反向代理,这里有教程:https://www.exratione.com/2013/06/websockets-over-ssl-with-nodejs-and-nginx/
  3. 使用第 3 个服务的反向代理,例如 https://www.cloudflare.com

第三个选项最简单的归档方式。您只需要指向您的域 CloudFlare 并配置一个记录到您的 ws 服务器,CloudFlare 将免费为 websocket 提供 ssl 并自动对您的原始 websocket 服务器执行 SSL 终止。

我找到了解决方案。

在安全配置 (*:443) 的 apache2 站点配置文件中,添加以下内容:

#This enables polling over https. Painfully inefficient but a good fallback
SSLProxyEngine on
ProxyPass /socket.io http://127.0.0.1:49002/socket.io/ 
ProxyPassReverse /socket.io http://127.0.0.1:49002/socket.io/

#This upgrades and rewrites the ws to wss
RewriteEngine on
RewriteCond %{HTTP:UPGRADE} ^WebSocket$ [NC]
RewriteCond %{HTTP:CONNECTION} ^Upgrade$ [NC]
RewriteRule .* ws://localhost:49002%{REQUEST_URI} [P]