WebSocket协议分析
Posted kat-sec
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebSocket协议分析相关的知识,希望对你有一定的参考价值。
WebSocket协议分析
1.什么是WebSocket协议
WebScoket协议是基于TCP协议建立的全双工通信,所谓的全双工通信就是双向同时通信。
2.WebSocket协议优点
WebSocket协议使客户端和服务器之间的数据交换更加简单,允许服务器主动向客户端推送数据。
在WebSoket协议中客户端只需要和服务器建立一次握手,俩者之间就可以直接建立持久性的连接。
3.与HTTP协议对比
- HTTP协议:半双工协议(同一时刻流量只能单向流动)
Socket协议:全双工
- HTTP协议:如果需要进行轮询只能客户端不断的进行请求服务端信息,消耗了系统大量的带宽资源
Socket协议:服务端可以主动推送,进行轮询
4.WebSoket协议握手
WebSoket协议握手只需要进行一次,即可进行数据传输。
基于HTTP/1.1进行请求,成功后服务端返回101。
5.WebSoket协议特性
WebSocket定义了两种URI格式
“ws://“和“wss://”,类似于HTTP和HTTPS, “ws://“使用明文传输,默认端口为80,”wss://“使用TLS加密传输,默认端口为443。
ws-URI : "ws://host[:port]path[?query]"
wss-URI : "wss://host[:port]path[?query]"
6.WebSoket协议安全性问题
6.1 认证问题
WebSocket协议没有规定服务器在握手阶段应该如何认证客户端身份。
也就是说无论是哪个客户端都可以尝试与之进行握手,尝试建立WebSocket连接。
6.2 授权问题
WebSocket协议没有指定任何授权方式,应用程序中用户资源访问授权问题取决于服务端和系统开发者。
WebSocket应用也会存在和传统Web应用相同的安全风险,如:垂直权限提升和水平权限提升。
6.3 跨域请求
在发起WebSocket握手请求时,浏览器会在请求中添加一个名为Origin的HTTP头,Oringin字段表示发起请求的源,以此来防止未经授权的跨站点访问请求。
WebSocket 的客户端不仅仅局限于浏览器,因此 WebSocket 规范没有强制规定握手阶段的 Origin 头是必需的,并且WebSocket不受浏览器同源策略的限制。如果服务端没有针对Origin头部进行验证可能会导致跨站点WebSocket劫持攻击。
什么是WebSocket劫持攻击?
1、用户A正常登陆一个需要建立WebSocket的应用B 。
2、攻击者诱导用户A访问网页(该网页上存在JS代码,当用户A访问时会系统建立WebSoket连接,同时由于用户A已经成功登陆B,当建立连接时浏览器会自动的带上存储的Cookie信息,这样攻击者即可绕过身份认证从而建立WebSocket连接。)
3、由于WebSocket是全双工通信,服务端会主动发送数据给客户端。从而攻击者可被动获取数据和主动发起请求。
如何防范?
1、在服务器端的代码中增加 对Origin头的检查,如果客户端发来的 Origin 信息来自不同域,服务器端可以拒绝该请求。
2、仅仅是检查是不够的,因为Origin头可以进行伪造,绕过对Origin头的检查。
3、可以参考CSRF加Token机制。
6.4 拒绝服务
客户端拒绝服务攻击
客户端发起超多的WebSocket连接(不同浏览器的限制数不同)
服务端拒绝服务攻击
WebSocket建立的是持久连接,只有客户端或服务端其中一发提出关闭连接的请求,WebSocket连接才关闭,因此攻击者可以向服务器发起大量的申请建立WebSocket连接的请求,建立持久连接,耗尽服务器资源,引发拒绝服务。
7. 总结
在即时通讯等应用中,WebSocket具有很大的性能优势, 并且非常适合全双工通信,但是,和任何其他技术一样,开发WebSocket应用也需要考虑潜在的安全风险。
以上是关于WebSocket协议分析的主要内容,如果未能解决你的问题,请参考以下文章