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

时间:2016-09-09 23:27:04

标签: node.js sockets https socket.io wss

所以我是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发出?

目前控制台显示: bye bye ws over https

我想我可以弄清楚如何配置网络侧面阅读器以寻找超过https的websocket,但是让它发送并不是我知道如何弄清楚的。 请用简单的词语我不是一个聪明的cookie。 :(

2 个答案:

答案 0 :(得分:2)

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

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

关于SSL连接,有几种方法可以存档:

  1. Config 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
  4. 第三个选项是要归档的最简单方法。您只需要指向您的域CloudFlare并为您的ws服务器配置一条记录,CloudFlare将免费为websocket提供ssl,并自动对您的原始websocket服务器进行SSL终止。

答案 1 :(得分:0)

我找到了解决方案。

在安全配置(*: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]