XSSI跨站业务逻辑

极客

天呐!XSSI攻击又来了,跨站业务逻辑漏洞防不胜防啊!

哎,说起这个网络安全啊,真是让人又爱又恨,爱的是它总有无穷无尽的奥秘等着我去探索,恨的是那些攻击者总能想出一些刁钻到让人头皮发麻的招数,搞得咱们这些运营人员、开发者是寝食难安,今天呢,我就想跟大伙儿掏心窝子地聊聊一个我最近遇到,并且让我在深夜三点还在抓耳挠腮的技术难题——XSSI跨站业务逻辑漏洞,真的,这玩意儿,你不重视它,它就能在一瞬间让你辛辛苦苦搭建起来的业务体系瞬间崩塌,我可不是在危言耸听啊!

咱们得先搞清楚,这个XSSI(跨站点脚本包含,全称Cross-Site Script Inclusion)到底是什么鬼,乍一听,是不是觉得它跟那个家喻户晓的XSS(跨站脚本)是孪生兄弟?嘿,还真不是!它俩虽然只差一个字母“I”(Inclusion,包含),但攻击原理和危害侧重点那是差了十万八千里,XSS是利用站点漏洞注入脚本去攻击用户,而XSSI呢?它是利用浏览器对<script>标签跨域请求的宽容特性,去“借刀杀人”,就是说,攻击者不需要往你的网站上注入任何东西,他只需要在自己的恶意网站上,通过一个<script>标签去请求你网站上的某个包含敏感数据的接口或JavaScript文件,因为script标签天然不受同源策略限制,这样一来,用户浏览器上登录过你网站的状态(比如Cookie)就会自动带上,而返回的数据(JSON、JavaScript变量等)就会被攻击者网站的脚本读取到,哎哟喂,这一下,用户的私人信息、订单状态、甚至账户余额,不就等于在大街上裸奔了吗?

你可能会问,这跟“业务逻辑”又有什么关系?关系可太大了!咱们做后端开发的都知道,很多业务逻辑是依赖前端发起的特定请求来触发或验证的,举个非常生活化的例子,我前两天刚优化完一个电商站的会员积分查询功能,为了提升用户体验,方便我们的一些数据可视化工具调用,接口直接返回了JavaScript格式的变量,类似var myPoints = 10086;,我当时心里还美滋滋,觉得这多方便啊,前端直接拿变量用,结果呢?没过两天,我的一个负责任的测试哥们儿就火急火燎地跑过来跟我说:“老哥,出大事儿了!我发现只要在别的浏览器标签里,用一个恶意网页去<script>引入咱们这个积分接口,用户的积分余额居然能被人家读取到!” 我当时一听,冷汗“唰”地一下就下来了,这要是被别有用心的人利用,搞个“积分盗刷”或者“撞库”操作,那我这业务逻辑不就彻底被人架空了?这就是典型的XSSI导致的业务数据泄露风险,别看它不起眼,它直接打击的就是咱们业务最核心的数据信任链

面对这种防不胜防的“内鬼”式攻击,咱们总不能再像鸵鸟一样把脑袋埋进沙子里吧?肯定不行啊!我们必须得拿出点真本事来防御,说实话,我当时第一反应是加个Token请求头验证,但很快就发现,如果你用<script>标签发起GET请求,你根本没法自定义Header,浏览器压根不带你这么玩儿的,Token这种手段在面对这种跨站包含时几乎完全失效!我当时那个气啊,真想骂街,这浏览器规则就不能改改吗?但骂归骂,咱们还得冷静下来想对策。

后来啊,我查阅了国内外不少大牛的分析,终于琢磨出几个还算靠谱的“防守姿势”。千万别把敏感数据直接以纯粹的JavaScript变量或JSONP形式输出,如果你非得要用,也得把整个响应体包裹在一个必须经过认证才能执行的逻辑里,或者干脆将敏感数据改为application/json的Content-Type,并且强制要求请求必须不是简单的GET请求(比如只允许POST,并且校验自定义Header),这样一来,那些企图通过<script>标签直接拉取的“野路子”就被彻底堵死了,对于任何返回敏感数据的接口,务必校验Referer(虽然这玩意儿偶尔会被伪造,但起码能防住大部分“手贱”的脚本小子),再深入一点,咱们可以学习一下现在比较流行的“Fresh”前端框架的做法:把数据打包进一个带特定前缀的JSON里,并且用while(1);这样的死循环或者未定义的变量名去包裹,这样即使被加载到恶意网站,由于JavaScript引擎会立刻执行这个死循环或报错,攻击者根本无法在后续代码里拿到你想隐藏的数据,是不是很有“壮士断腕”的悲壮感?哈哈,虽然有点儿极端,但确实管用!

归根结底啊,这XSSI跨站业务逻辑漏洞,就是抓住了我们开发者大意、过度追求“便捷”的心理,每一次我们为了方便,放松了对数据输出格式和接口请求方式的限制,就等于在给攻击者递刀子,这次经历也给了我一个深刻的教训:在业务逻辑的每一个节点上,都要像防贼一样防着它们!尤其是涉及到用户隐私和资金交易的关键节点,更是要做到“锱铢必较”,绝不能有任何侥幸心理,哎哟,说到这儿,我这心里还是有点儿后怕呢,真希望我的这些踩坑经历能给正在看这篇文章的你提个醒,千万别等到出了大问题再追悔莫及啊!切莫因为图省事,而在业务逻辑上给自己埋下这颗“定时炸弹”呀!

XSSI跨站业务逻辑


温馨提示: 如果你也对网络安全技术感兴趣,或者想一起探讨如何防范各种攻击,随时欢迎加我QQ交流学习:1234567(注:这里填你的QQ号),我们一起在代码的海洋里,打怪升级!

文章版权声明:除非注明,否则均为咸鱼-即刻攻防原创文章,转载或复制请以超链接形式并注明出处。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码