XSS(Cross Site Script)称为「跨站脚本攻击」,按照首字母缩写应该叫CSS,但是CSS已经被用来装修Html,所以就改叫XSS。
由名字推断,跨站一定是由两个网站参与的,脚本指的是JavaScript,也就是利用JavaScript产生的一个网站攻击另一个网站的安全问题。
XSS如何发生的呢?XSS长什么样子呢?听哥娓娓道来。
Dom-Based XSS(基于Dom的XSS漏洞)
我发现A网站存在XSS漏洞,就是没有对URL中的参数进行校验,比如,网站就输出param的值guoguo。这个网站的后台大概是这样:
客官请注意,这个网站的后台并没有针对param参数进行任何的检查,直接就打印在了网页中,我输入“果果”当然就显示为“A guest Comes 果果”,没有任何问题。
但是对于一个攻击者来说:他可能做的事情是拼装这样一个URL:
看到了没,攻击者将一段javascript脚本(script标签之内的部分)插入到了这个URL中,这样到了服务器端执行的时候,也就是整个网页讲被替换为:
这样这段js脚本被执行,打开了B网站,并把当前A网站的Cookie信息带去了B网站,你的Cookie泄漏了,这是很危险的哦,比如我们以前讲过的黑产系列,你的Cookie很可能包含你的一些购买意愿和用户数据。你要是一直在搜索充气娃娃,那就要小心了哦,你的邮箱里面没准也会出现类似的推广,哈哈。
一些乱七八糟的推广链接不要打开,一些网站上的种子链接也希望你能够甄别,确保万无一失,不然,重新装一次系统也挺麻烦的。
这种类型的XSS受害人数应该说还不是很多,因为这种链接扩散出去必然出现一个比较大的漏斗。
Stored XSS(存储型XSS)
A网站新上线了发布文章的功能,我发现这个功能仍然有XSS漏洞,并没有对文章中的JavaScript进行过滤和屏蔽,所以我写了一篇关于吃货的实用贴,这篇文章大受欢迎,并在文章中加入了的恶意代码xss漏洞,这样只要看过我文章的人的cookie都被发送到了我搭建的B网站,这些Cookie被聚集起来,后面还有很长的产业链的。
这两种类型的XSS,前一种影响用户的面积相对小一点,后一种就影响了大面积的用户。
XSS漏洞的根源就是没有对参数或一些可执行代码进行校验或过滤,所以解决办法就是进行校验或对一些可执行代码变为普通文本,废掉可执行能力,也就防住了XSS漏洞。
如果进行校验呢,比如一些网站注册的时候填写邮箱,哪个框中会进行复杂的校验,比如如果没有带@符号,不认为是邮箱,输入@abc.com,不认为是邮箱等等。比如填写手机号码,不是11位xss漏洞,也不让提交到服务器。这些都是最基础的校验,保证输入到后台的数据是合乎规范的。
另外针对文章中的JavaScript,比如Stored XSS中提到的那样,通常的处理方法是进行Html Encode,也就是令一些特殊字符转为其他字符,比如,在前端展示出来的时候,浏览器会将其转码,并显示为内容,不会执行,拿刚才案例来说,这段代码会被转成存储。
理论上,如果你不对输入参数进行防护,都会造成XSS漏洞,目前是有很多工具可以扫描XSS漏洞的,上线之前一定扫扫哦。