当前位置:首页 > 探索

跨站脚本攻击包括哪三大类型

跨站脚本攻击(XSS)的跨站三大类型,说白了就是脚本反射型、存储型和基于DOM型。攻击这三种家伙的包括攻击手法和危害程度天差地别,但有一个共同点——它们都盯上了浏览器对脚本的大类盲目信任。

反射型XSS是跨站最“直来直去”的那种。攻击者把恶意脚本塞进URL参数里,脚本比如一个搜索框,攻击你点开这个链接,包括服务器就把参数原样吐回页面,大类脚本顺势执行。跨站整个过程像打乒乓球,脚本恶意代码在服务器和浏览器之间弹一下,攻击所以叫“反射”。包括我见过最经典的大类案例是某银行网站在搜索功能上没做过滤,攻击者构造了一个链接,受害者点进去,弹窗显示“您的账户已被锁定,请拨打XX电话”,吓得人直接转账。这种攻击的致命点在于——它需要受害者主动点击恶意链接,社工成分很重。但别小看它,配合短链接伪装,中招率极高。

存储型XSS才是真正的“毒瘤”。恶意脚本被永久保存在目标服务器上,比如论坛评论区、用户资料栏、博客留言板。只要有人浏览到那条被污染的数据,脚本就自动执行,根本不需要点击任何链接。2018年某大型电商平台的商品评价区就出过这种事,攻击者上传了带脚本的评价,之后每个查看该商品的用户,cookie都被偷走,账号直接沦陷。这玩意儿最恐怖的地方在于它的“延时引爆”——攻击者上传后可以等几天、几周甚至几个月,等流量大了再收割。而且存储型XSS能直接打到管理员后台,一旦管理员中招,整个站点就成攻击者的后花园了。

基于DOM型的XSS,跟前两者完全不在一个套路。它不经过服务器,纯粹是前端JavaScript代码在处理用户输入时,把不可信数据直接塞进了DOM节点。比如你用location.hash、document.referrer、window.name这些来源取值,然后通过innerHTML或document.write写进页面,脚本就活了。有个真实案例是某新闻网站的分享功能,它读取URL里的#参数来生成分享标题,攻击者构造一个#的链接,受害者打开后,恶意脚本在本地直接执行,服务器日志里干干净净,事后查都查不到。这种攻击最坑爹的地方在于——防火墙和服务器端过滤完全失效,因为根本没到服务器那一步。

三种类型里,反射型最容易被扫描器发现,存储型危害最大,DOM型最隐蔽。做防御时,千万别只盯着输入过滤——输出编码才是王道。对反射型和存储型,在服务器端对输出做HTML实体编码基本能堵死;但DOM型得在前端代码里对DOM操作做严格校验,用textContent代替innerHTML,这活儿不少团队压根没意识到。

说到底,XSS的攻击本质是“数据”和“代码”的边界被打破。浏览器分不清哪段脚本是程序自带的,哪段是用户塞进来的。你只要记住一句话:任何从外部流入的数据,都不能直接当作代码执行。这三大类型,恰恰对应了数据流入页面的三条不同路径——URL参数、服务器存储、以及前端运行时的数据源。堵住这三条路,XSS就没了生存空间。

分享到: