我正在製作一個使用WebSockets進行瀏覽器和節點服務器之間通信的web應用程序。您如何防止客戶端發送巨大的websocket數據包?
如果打開調試控制檯(F12),則可以訪問套接字實例並寫入它。
例如,socket.send('packetname', 'data')
是什麼阻止從打開控制檯,寫這樣的人嗎?
socket.send(new Array(99999));
所有這些數據被髮送到服務器可以是壓倒性的,並通過它到達那裏的時候,已經使用的帶寬,它已經處理過。當然有驗證,但是現在已經太晚了,資源已經用於處理它了。
你也不能只檢查數組的長度,因爲有人可以發送一個數組,其中第一個元素是一個巨大的數組,而不是真的。我不認爲有一種方法可以計算字節大小,所以我猜最好的選擇是將數據串化以檢查其大小(這非常慢)?
我所有的數據包都很小。我正在尋找一種防止超過一定大小的數據包被髮送到服務器的方法。這可能嗎?
你可以讓你的套接字在其他東西里面使其私人化 –
如果你使用[Socket.io](http://socket.io/),然後像['socket.io-stream'](https:/ /www.npmjs.com/package/socket.io-stream)可用於切斷濫用的連接。 – tadman
@tadman:我正在使用primus而不是socket.io –