websocket网络层详解_【技术分享】WebSocket漏洞与防护详解
2017-05-02 14:15:48 閱讀:1889次
預估稿費:120RMB
投稿方式:發送郵件至linwei#360.cn,或登陸網頁版在線投稿
socket簡介
一個socket是一次網絡通信中的一個端點。socket總是分為兩部分:一個IP地址和一個端口。
例如:當您訪問www.securelayer7.net時,你的計算機和網站的服務器正在使用socket(端點)進行通信。網站的端點將是:www.securelayer7.net:80,你的計算機的端點將是你的IP地址,后跟任何隨機端口號,如192.168.0.111:6574
關于WebSocket
傳統上,HTTP活動是由客戶端請求資源而服務器來提供服務。服務器不能自己與客戶端通話。但這個限制已經被新技術WebSocket消除了。
WebSockets提供持久連接,也稱為客戶端和服務器之間的全雙工連接,雙方可以隨時使用該連接開始發送數據。
它是如何工作的?
客戶端,如瀏覽器,加載具有WebSocket功能的網頁。
頁面的源代碼負責創建WebSocket連接。
該腳本通過WebSocket握手建立WebSocket連接。此過程從客戶端向服務器發送常規HTTP請求開始。此請求中包含upgrade請求頭,通知服務器客戶端希望建立WebSocket連接。
請求如下所示:
值得注意的是,WebSocket使用ws作為訪問方案而不是http。所以,上面的請求訪問了:ws://127.0.0.1:9000 / websocket
如果服務器支持WebSocket(針對上述請求),則它將在其響應中使用upgrade請求頭進行回復。
響應如下所示:
在這個階段,協議將從HTTP切換到WS。并且在瀏覽器和服務器之間建立全雙工連接。
在這個例子中,我們有一個WebSocket功能,它回傳客戶端發送的所有單詞。例如:如果用戶鍵入單詞“Hiii”,那么服務器也會用“Hiii”來回復。
請求:
響應:
用戶界面:
WebSockets的安全隱患
A.跨站WebSocket劫持
注意下面的請求。Origin頭有不同的來源127.0.0.1:5555。該請求是使用受害者的cookie發送到WebSocket服務器。這意味著可以使用WebSocket發送類似于CSRF的攻擊。
但是,這種攻擊不止像CSRF將POST數據發送到WebSocket服務器,它還會讀取服務器響應。這是因為默認情況下WebSocket服務器不檢查“Origin”頭,它只是使用cookies檢查經過身份驗證的用戶會話,并將響應發送回請求的“Origin”。
因此,在上述情況下,攻擊者也可以讀取響應,從而代表受害者控制雙向通信。
防護:
檢查請求的“Origin”頭。既然,這個標題是為了防止跨源攻擊。如果“Origin”不被信任,那么只需拒絕該請求。例如:如果您的網站的域名為www.example.com,請檢查請求是否源自該來源,如果是,則處理該請求。如果否,則拒絕。
另一個解決方案是使用基于會話的個人隨機令牌(就像CSRF-Tokens)。生成服務器端,并將它們放在客戶端的隱藏字段中。并要求驗證。
B.網絡敏感信息泄露
就像HTTP是純文本協議一樣,WebSockets協議也稱為純文本。這導致攻擊者捕獲和修改網絡上的流量。
防護:
建議使用加密(TLS)WebSockets連接。它的URI方案是wss://。默認端口為443。
如下演示,請求訪問ws://127.0.0.1:900/websocket/。如果它是一個安全連接,那么請求將訪問wss://127.0.0.1:900/websocket/。
C.拒絕服務
默認情況下,WebSockets允許無限制的連接導致DOS。以下是無限次連接到WebSocket服務器的小腳本。
執行此腳本后,讓我們看看WebSocket服務器的日志:
我們可以看到,幾秒鐘內就已經完成了475個連接。這將耗盡服務器資源,最終導致DOS攻擊。
防護:
使用基于IP的速率限制將有助于解決這個問題。
速率限制應允許5-10連接自由,即不進行任何安全檢查。但在10個連接之后,如果同一個IP嘗試連接,那么應該向用戶顯示驗證碼,以確保自動化工具不會產生惡意請求,同時合法用戶不會被拒絕服務。
結論
WebSockets非常適合全雙工通信,有許多聊天應用程序和社交網站使用。實現WebSockets使應用程序更具可用性和吸引力。但就像任何其他技術一樣,也需要在考慮安全性的情況下使用。
參考文獻
總結
以上是生活随笔為你收集整理的websocket网络层详解_【技术分享】WebSocket漏洞与防护详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018-10-28
- 下一篇: 平滑数据迁移,不影响服务