小心 !跨站点websocket劫持!

 开始之前,先热热身,讲个小故事:

年终奖下来了,张大胖琢磨着去买点儿股票作为投资,他用浏览器访问了www.stock.com , 输入了用户名和密码,登录成功。

stock.com返回了cookie用来标识张大胖这个用户。

[[255187]]

 

浏览器认真负责, 它把这个Cookie记录了下来,以后张大胖每一次再向stock.com发起Http请求,浏览器都会兢兢业业地把Cookie加入到Http请求的Header中,一并发到stock.com , 这样stock.com就知道张大胖已经登陆过了,就可以按照张大胖的请求来做事情,比如查看股票,买卖股票。

张大胖看到股票涨幅不错,心中暗喜。 他又打开了www.beauty.com, 去看一些自己的小秘密。

浏览器把beauty.com的HTML,JavaScript都下载到本地,开始执行。

这个JavaScript中创建了一个XMLHttpRequest对象,然后居然向stock.com发起了HTTP请求 !

[[255187]]

 

浏览器严格按照规定,把之前存储的cookie也添加到Http请求中 !

无辜的stock.com根本不知道这个Http请求是beauty.com的JavaScript发出的,还是张大胖发出的。

stock.com 检查了cookie,就知道这是一个登录过的用户,于是就冷冰冰地去执行,张大胖的个人信息就泄露了。

(当然,实施这样一次攻击不会这么简单,这里只是说明基本原理)

可怜的张大胖就是因为浏览了一个网站,就遭受了钱财损失。 这也太可怕了!

我们来复盘一下为什么会发生这种情况, 主要有两个原因:

首先,每当访问stock.com的时候(不管是人点击按钮/链接,或者是通过程序的方式),存储在浏览器的stock.com的cookie都会发过去。

其次,从beauty.com下载的JS利用XMLHttp访问了stock.com。

第一点我们是无法阻止的, 如果阻止了,cookie就没用了。

对于第二点,浏览器必须做出限制, 不能让来自beauty.com的JavaScript去访问stock.com! 这个限制就是大家所熟知的同源策略。

同源策略非常严格,要求两个URL必须满足下面三个条件才算同源。

(1) 协议(http/https) 相同

(2) 域名相同

(3) 端口相同

这个要求可以说是杀敌一千,自损八百。

因为对大的系统来说,有很多域名是很正常的事情,现在JavaScript只能向自己的“源”发起请求,不能访问别的系统,这实在是太让人难受了。

于是人们想了很多办法,比如JSONP , CORS等来突破这个限制。

等到websocket这个新的技术出现以后,干脆放弃了这个限制,websocket可以跨域访问。

但是这就带来的安全隐患: 跨站点websocket 劫持 , 我们接着张大胖的故事往下讲。

跨站点websocket 劫持

张大胖又一次登录了www.stock.com, 浏览器又收到了cookie并且保存了下来, 这一次张大胖发现stock.com提供了一个新功能: 实时的股票价格推送。

张大胖开启了这个新功能,这是用websocket实现的。 大家都知道,websocket的通信是由HTTP协议发起的。

浏览器向stock.com发起了一个HTTP请求, 这个请求希望把HTTP 协议升级为web socket协议,下面是HTTP请求的Header:

  • GET /stock/ws HTTP/1.1
  • Host: www.stock.com
  • User-Agent: xxxxxx
  • ……
  • Origin: https://www.stock.com
  • Sec-WebSocket-Key: xxxxx
  • Cookie: JSESSIONID=2B323FCF3968ETDSA9459
  • Connection: keep-alive, Upgrade
  • Upgrade: websocket

注意,Cookie数据也发送给了stock.com。

stock.com检查Cookie,确认是个登陆过的客户,于是建立websocket连接,并且推送张大胖订阅的最新的股票信息。

张大胖看到最新的股票信息,很高兴,他又打开了www.beauty.com, 去看一些自己的小秘密。

这个beauty.com中的JavaScript又一次运行,也向stock.com发起HTTP请求,也要建立websocket连接。

  • GET /stock/ws HTTP/1.1
  • Host: www.stock.com
  • User-Agent: xxxxxx
  • ……
  • Origin: https://www.beauty.com
  • Sec-WebSocket-Key: xxxxx
  • Cookie: JSESSIONID=2B323FCF3968ETDSA9459
  • Connection: keep-alive, Upgrade
  • Upgrade: websocket

stock.com收到请求,检查Cookie,确认是个登陆过的客户,也成功地建立了websocket连接, 把数据也推送给你beauty.com , 于是张大胖的信息就暴漏了。

如果这个websocket还支持别的操作,那危害就更大了。(这也是被称为“劫持”,而不仅仅是“伪造”的原因)

可以看出,websocket不遵守同源策略,是导致跨站点脚本劫持的最大原因。

Websocket协议怎么解决这个问题呢?

敏锐的同学已经注意了,在前面的HTTP请求中,有个叫做Origin的东西:

合法请求:

Origin: https://www.stock.com

攻击请求:

Origin: https://www.beauty.com

这个Origin是websocket协议所要求的。

所以在www.stock.com的服务器端,在建立websocket连接的时候,一定要去检查这个Origin,确保这个Origin在自己的白名单中。

几个小问题

1. 不就是一个Origin吗? 黑客可以轻松地伪造啊?

注意:这一切都发生在张大胖的浏览器中,是张大胖在操作, 黑客想伪造的话,只能通过JavaScript来修改它。

但是协议规定: 这个Origin是在HTTP Header中, 是由浏览器自动加上的,不能通过编程的方式(如JavaScript)来改变它。

2. 那黑客可以修改HTTP请求,把这个Origin改了啊?

如果你控制了张大胖的浏览器,甚至张大胖的电脑,那肯定可以修改HTTP请求, 但是都控制电脑了,一切尽在掌握,还费这劲干嘛,直接监控用户名和密码不就得了。

如果你充当中间人,通过抓包的方式,来修改Origin,那确实可以,这时候张大胖需要用Https,和wss来防范了。

3. 还有没有别的办法来防范?

有的,还有个更加安全的办法,和防范CSRF的思想是一致的: 使用token 。

(1) 服务器端给每个websocket客户端分配一个随机的,唯一的token

(2) 浏览器在建立websocket连接的时候,把token也发过来。

(3) 服务器端验证token, 如果有效,才建立连接,并且废弃掉这个token。

【本文为IDC.NET专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】

 

戳这里,看该作者更多好文

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/136369.html<

(0)
管理的头像管理
上一篇2025-03-02 01:32
下一篇 2025-03-02 01:33

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注