2014-02-22 42 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) {