noa*_*ale 7 javascript sockets security node.js socket.io
我一直在互联网上寻找直接的答案,但大多数解决方案都涉及使用Express并提供HTTP内容以实现安全连接.我对Node.js和socket.io 的安全Web套接字连接(wss)更感兴趣
我没有将Node.js用于HTTP请求.我使用与Node.js一起使用的socket.io模块将消息实时传递给我的应用程序.我只使用节点进行Web套接字连接.
我会简单解释一下我的设置是什么.我使用Django作为我的HTTP后端.用户向Django发出请求,Django将该请求的内容转发给Redis,Node.js在Redis的一个频道上侦听,它处理内容并将消息发送给适当的收件人.
非常简单直接.一切正常.但我担心与Node.js的websocket连接是不安全的.当Node.js向收件人发送消息时,我不希望任何人在其间窥探并拦截该消息.我想确保我的用户感到安全并相信我为他们建立的服务.
我查看了CA的自签名证书和证书.两者都提供相同级别的安全性.由于我只使用Node.js作为socket.io并且不提供HTTP内容,因此自签名证书可以正常工作(我构建的服务是针对移动设备的,而不是针对浏览器的!)
下面是我对socket.io的实现:
var io = require('socket.io').listen(8000);
var redis = require('socket.io/node_modules/redis')
var redisChannelConnection = redis.createClient(6000, "12.345.678.9");
var redisServer = redis.createClient(6000, "23.456.789.1");
// Subscribe to Redis Channel
redisChannelConnection.subscribe('messages');
io.sockets.on('connection', function (socket) {
socket.emit('message', 'Hello World');
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我刚刚编写了一个简单的连接函数.它可以作为普通的websocket连接.但我想使它成为一个安全的websocket连接.我有多少这样做?
谢谢您的帮助.
首先,您需要在节点中创建HTTPS服务器(您需要证书):
http://nodejs.org/api/https.html
如何在Node.js中创建HTTPS服务器?
然后你应该使用该服务器来启动Socket.io.
var io = require('socket.io').listen(myHTTPSserver);
Run Code Online (Sandbox Code Playgroud)
基本上应该是它的全部内容.
有两种方法可以保护您与中间人攻击的连接:
您的Django/Node.js组合听起来很奇怪,是否正确理解客户端在一个通道上发出请求并在另一个通道上接收响应?
虽然它在技术上可以没问题,但它听起来像是制造奇怪漏洞的秘诀.如果必须同时使用两者,请考虑使Node成为Django内容的代理,并让Node处理所有身份验证.
在任何情况下,我都非常怀疑只加密两个频道中的一个就足够了,一旦黑客已经关注了一个频道,很可能会出现过多的升级选项.
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |