Skip to content
ruandao edited this page Feb 6, 2017 · 6 revisions

疑问:为什么客户端发送信息给服务端的时候,需要对内容进行掩码操作
掩码的算法: result-octet-i = source-octet-i xor mask-key-octet-j ( j = i % 4)
说是可以防止恶意攻击,但是,掩码和内容是放在一起的,这样和明文有什么区别?

嗯,到v2ex问问:https://www.v2ex.com/t/337807#reply11
看下别人的想法:https://github.com/abbshr/abbshr.github.io/issues/47 蛋疼。。。这个只是翻一下RFC,没实际作用的说明
后来看RFC的时候,搜了下 找到一个 http://qd.awalun.com/html5/961.html 看了下里面的说明进一步了解了下,还是有点不懂,然后跟着这个链接的引用文章 http://www.adambarth.com/papers/2011/huang-chen-barth-rescorla-jackson.pdf 看了里面的图,感觉懂了
假设有个攻击者U1,发送的HTTP数据包的IP地址是他自己的服务器A,但是内容的Host是要攻击的服务器
这样的数据包被中间服务器缓存下来
当正常用户U2发送数据包的时候,IP地址是目的服务器B
但是数据包的HTTP内容和恶意攻击者的数据包一致,那么中间服务器就会采用上个缓存数据包的IP地址(A服务器的地址)
这样用户U2发送的数据包就跑到A服务器去了,偷取数据成功
于是websocket引入了客户端mask这个操作,由于是随机的mask key,整个数据包的的内容每次都会不一致,缓存服务器就不会生效,攻击就不会生效