WebSocket子协议的设计与实现
2021-01-08赵娟娟刘昌华
赵娟娟 刘昌华
(武汉轻工大学数学与计算机学院 武汉 430023)
(zhaojj0228@163.com)
随着互联网的快速发展,Web应用已成为我们生活中必不可少的一部分.在实时通信方面一般对于即时性有较高的要求,目前针对实时性问题主要有轮询以及其他的服务器推送技术等方法[1],但这些方法都是基于Http请求的,使用Http协议需要不断向服务器发出请求,然而Http请求会包含较长的头部,这样会浪费很多资源.在这种情况下,W3C定义了WebSocket协议[2],相比较Http协议,WebSocket能更好地节省服务器资源和带宽,并且能够更实时地进行通信.
近年来随着WebSocket被广泛使用,也出现了一些关于WebSocket的安全漏洞[3].Wireshark1.8.7之前的1.8.x版本中WebSocket解析器中的epandissectorspacket-websocket.c的tvb_unmasked函数中存在多个整数符号错误,远程攻击者可通过恶意的数据包利用这些漏洞造成拒绝服务攻击.2013年德国的白帽黑客 Christian Schneider 发现并公开了发现跨站劫持漏洞(cross site WebSocket hijacking).跨站点WebSocket劫持相对危害较大,也更容易被开发人员忽视.针对WebSocket漏洞问题,近年来也有一些学者作了研究,朱军[4]基于Node平台提出使用自定义子协议Wsguard防御跨站劫持的策略;曾德愚[5]提出在服务器端代码中增加Origin检查机制修复漏洞,如果浏览器发送的Origin信息来源不同,则服务器端拒绝请求并发回拒绝连接403错误;Karlström[6]提出2次验证Origin防御跨站劫持,限制连接数量缓解DoS攻击,使用内容深度检测抵御注入攻击等策略.
本文在总结前人研究的基础上,针对WebSocket跨站劫持漏洞提出WebSocket子协议“Security-WebSocket”.该子协议使用typescript语言完成系统实现,协议要求每次在WebSocket连接建立完成……
