2014-02-22 41 views
1

我是Node.JS的新手,这个问题可能有点微不足道。 我使用像这样的客户端: -如何防止跨域连接并仅允许从我的域访问?

var sock = io.connect('http://www.mydomain.com:3000'); 
      sock.on('connect', function() { 
       console.log("Connected successfully"); 
       sock.emit("_rK",{}); 
      }); 

我的问题是:如何防止跨域连接?或者干脆,我如何防止用户不使用网站连接到网络套接字?

根据此:Cross-domain connection in Socket.IO,在socket.io中允许跨域连接。

回答

0

您可以在服务器上的套接字连接时检查originating url。但这并不安全,很容易被欺骗。

,我用它来验证网络插座的技术是一个令牌发送到客户端,并追加到socket服务器的这样

ws://mysocket.server/tokenws://mysocket.server?token="somerandomtoken"

的URL,然后在验证此令牌套接字连接的时间一次。如果令牌无法验证,服务器只会拒绝套接字连接。

+0

凭什么你检查令牌?您必须将它们存储在用户的ip/user-agent上。如果是的话,他们也可能被欺骗,对吗?所以基本上我只需要标记化的URL来连接到套接字服务器。 – AnuragD

+0

是的,我认为随机令牌是做这件事的最好方法。验证套接字时只需要一次。 –

+0

但是您会将令牌发送给客户端,您怎么知道它是授权客户端? –

2

您可能会发现origins选项很有用(wiki page):

server.js:

io.set('origins', 'www.mydomain.com:3000'); 

你可以找到更多信息有关origins格式here

+0

安全吗?或者它可以被欺骗? – AnuragD

+0

它依赖'origin'(或'referer')请求头,所以在浏览器中没问题。但是攻击者可能会通过'curl'或其他东西发送虚假头文件。如果你想防止这种攻击,你需要使用[CSRF](http://owasp.com/index.php/CSRF)保护来实现认证系统 – Curious

0

简单和安全!

在主文件的地方它io.on(“连接”)之前,添加行:

io.set('origins', 'yoursite.com:*'); 

io.on('connection', function (socket) {