2012-10-01 127 views
1

我正在開發一個使用socket.io的實時網絡應用程序。我關心的是,在客戶端通過<script>/socket.io/socket.io.js</script>加載socket.io js文件時,它將io實例公開爲全局對象。現在,如果你打開Chrome開發者工具,現在可以創建如何在客戶端保護socket.io?

var socket = io.connect(); 

人到服務器的連接,現在可以發出事件和發送惡意數據到服務器正在監聽到客戶端發出 事件。我有這個在我的客戶端代碼爲例:

(function (sio) { 
    var socket = sio.connect(); 
    // some code here... 
    // once a user submitted the comment, it will emit an comment:create event to the 
    // server 
    socket.emit("comment:create", comment); 
}(io)); 
在Chrome開發者工具

,我可以創建一個連接,然後發出了一些惡意的參數相同的事件可能會崩潰,我的應用程序一樣傳遞一個null作爲第二個論點。有沒有辦法來防止這種問題?

編輯:我目前的解決方案是在我的客戶端代碼中創建io實例的本地副本,然後將全局io對象設置爲null以防止發生另一個連接。

回答

1

當客戶端初始化(HTTP)連接並將其存儲爲會話變量時,服務器端代碼是否創建某種(相當隨機的)令牌。要求客戶端將令牌作爲其發送的每個socket.io消息的一部分,並拒絕任何不匹配的消息。

+0

謝謝你!因爲我使用的是socket.io,io.set('authorization')是我應該在會話中存儲令牌的時候。 – James

+0

@詹姆斯你能給我一些例子嗎? –