标签:port mux src 添加 通信 scoket sock 申请 问题
WebScoket协议是基于TCP协议建立的全双工通信,所谓的全双工通信就是双向同时通信。
WebSocket协议使客户端和服务器之间的数据交换更加简单,允许服务器主动向客户端推送数据。
在WebSoket协议中客户端只需要和服务器建立一次握手,俩者之间就可以直接建立持久性的连接。
Socket协议:全双工
Socket协议:服务端可以主动推送,进行轮询
WebSoket协议握手只需要进行一次,即可进行数据传输。
基于HTTP/1.1进行请求,成功后服务端返回101。
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]"
WebSocket协议没有规定服务器在握手阶段应该如何认证客户端身份。
也就是说无论是哪个客户端都可以尝试与之进行握手,尝试建立WebSocket连接。
WebSocket协议没有指定任何授权方式,应用程序中用户资源访问授权问题取决于服务端和系统开发者。
WebSocket应用也会存在和传统Web应用相同的安全风险,如:垂直权限提升和水平权限提升。
在发起WebSocket握手请求时,浏览器会在请求中添加一个名为Origin的HTTP头,Oringin字段表示发起请求的源,以此来防止未经授权的跨站点访问请求。
WebSocket 的客户端不仅仅局限于浏览器,因此 WebSocket 规范没有强制规定握手阶段的 Origin 头是必需的,并且WebSocket不受浏览器同源策略的限制。如果服务端没有针对Origin头部进行验证可能会导致跨站点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机制。
客户端发起超多的WebSocket连接(不同浏览器的限制数不同)
WebSocket建立的是持久连接,只有客户端或服务端其中一发提出关闭连接的请求,WebSocket连接才关闭,因此攻击者可以向服务器发起大量的申请建立WebSocket连接的请求,建立持久连接,耗尽服务器资源,引发拒绝服务。
在即时通讯等应用中,WebSocket具有很大的性能优势, 并且非常适合全双工通信,但是,和任何其他技术一样,开发WebSocket应用也需要考虑潜在的安全风险。
标签:port mux src 添加 通信 scoket sock 申请 问题
原文地址:https://www.cnblogs.com/Kat-sec/p/12312969.html