作者回复: masking key只能防止浏览器上的页面,因为这样的攻击成本最低,只需要把恶意页面快速推广,且制作得非常容易让普通用户点击,就可以快速攻击各类代理缓存。 如果是自己制作的类浏览器客户端,没有办法让大量互联网用户点击,也超出了masking key的scope。
作者回复: 这种攻击的切入点,是老旧Proxy把2个不同客户请求的缓存搞混了。正常的HTTP1.1不会出现这个问题,语义非常明确。
作者回复: 如果这个代理服务器不识别websocket协议呢? 那么,它会把握手请求识别为普通的http1.1请求,并把当前连接识别为http1.1长连接。 当恶意页面构造出websocket数据文本帧,而文本帧形似http1.1的GET请求时,这个代理服务器就把它当成第2个http1.1请求了。
作者回复: 你好Nemo,关键是,你的服务器没有流量过来,你攻击不了几个客户端啊。但互联网上,有许多高流量的代理服务器,攻击它们受益才大。从概率论上来说,虽然攻击成功了许多用户,但你想从经济上直接受益,还能概率还不到万分之一,这就需要更大的用户基数。
作者回复: 这是因为,javascript代码无法获取到mask key,浏览器对javascript代码有诸多限制,它与C、JAVA语言完全不同
作者回复: 代理服务器不是攻击者搭建的,还是很多人都在使用的公共代理服务器。攻击者,构造出了恶意缓存,这样正常用户访问时,就获取到了假的缓存响应。这种攻击方式的危害在于,攻击起来特别容易。 是的,websocket特性。
作者回复: 模仿浏览器的客户端是没办法大规模推广的,攻击成本比较高。所以masking key只防守正常大厂的浏览器。