xss就是cross site script的缩写
为什么不缩写为css,是因为,css这个名字已经被层叠样式表(Cascading Style Sheets)给占用了.所以xss就用了cross的谐音x作为字母c的替代,就成了xss.
重点来了为什么要跨站,直接去攻击不好么?,跨站,到底跨的是哪个站点?
①为什么要跨站?
因为现在这个年代,充斥着形形色色的骗局,人们也都经历过太多的骗术,遇到过各式各样的骗子和骗财骗色骗感情等等诸如此类的事情,再加上主流媒体的曝光,人们就积累了大量的防骗知识,也具备了防骗意识.因此,对于攻击者来说,出现一个很棘手的问题,那就是用户不好骗了,你给用户的恶意地址(可以是邮件这种方式把恶意地址投递给用户),用户可能就不大会像过去一样毫无防备的点开看了.而且恶意地址长的也和正规网站不一样,很容易被用户识破.
那怎么办,如何让用户心甘情愿去点恶意地址从而上当受骗呢?答案是不管怎么骗如何骗,首先必须取得用户的信任,而骗子本身是毫无诚信可言的,但"用户常去的网站"对用户来说是可信的,所以骗子就瞄准了"用户常去的网站",借"用户常去的网站"之手把攻击者的恶意代码(也就是以被用户信任的网站的名义)转交给用户,用户就不会那么戒备了,而且从(被用户信任的服务器)返回的带有恶意代码的结果,用户也深信不疑的使用,这样就中招了.
但是"用户常去的网站"是不会做这种坏事的,是不会给用户发送恶意代码的,这就需要攻击者想办法利用各种漏洞先去欺骗"用户常去的网站",让其去做这个恶事情,说白了就是借"用户常去的网站"之手,把恶意代码发送给用户,然后用户就会毫无戒备的去点击自己信任的网站返回给自己的页面而中招,最终达到攻击者不可告人之目的,这就是跨站的原因.
②跨站,到底跨的是哪个站点?
通过上面的描述,就很清楚了,因为直接去攻击(比如给用户发送个钓鱼邮件什么的)用户不大会奏效,加上用户终端会安装有各种杀软防火墙啥的,攻击者就更不容易得手了,所以,攻击者逼不得已只能选择另外一个途径,就是跨站攻击,而跨站,跨的就是用户常去的那个被用户很信任的那个网站,而非直接攻击用户.这就是跨站攻击,
跨站攻击xss的实现和http通信过程有直接的关系,
http通信的原理:客户端/服务器模式(c/s model),客户端使用的浏览器(以下简称browser)向网站服务器(以下简称server)发出想查看某个web页面的请求(是一串http代码,这串http的代码专业术语叫request),server收到browser送来的请求后,去自己的网站数据库里找到browser想要的web页面,然后通过响应(也是一串http代码,专业术语叫response)送回给browser,最后,browser经过解释和翻译,将response这段http代码变成web页面展现给客户端的用户,
举个例子:
browser要看server的index.html页面,会发送request,如下:
GET /index.html HTTP/1.0
server找到index.html后,返回给browser一个response,如下:
<HTML>
Welcome to index.html
...
< /HTML>
但如果,攻击者把request给改了,browser发给server的可就是带有恶意代码的request了,这样server返给browser的response也是带着恶意代码的,但这个带有恶意代码的response是server(也就是用户常去的那个被用户深信不疑的那个网站)给用户返回的web页面(因为这个页面是由response生成的,所以也就自然带着response里的恶意代码了),那么最终用户也会毫不迟疑的运行这些恶意代码,就中招了.
拿上面的正常的request举例,如下:
插入恶意代码 <script>alert(document.cookie)</script>
到正常的request中,
GET /index.html <script>alert(document.cookie)</script> HTTP/1.0
然后,server收到browser送来的请求后,去自己的网站数据库里找到index.html,
并返回给browser一个带有恶意代码的response,如下:
<HTML>
<script>alert(document.cookie)</script>
Welcome to index.html
...
< /HTML>
然后,这段恶意代码 <script>alert(document.cookie)</script>
的作用是获取browser正在使用的各种cookie,获取了cookie之后无非再写几个代码就可以到攻击者手里了,或者更直接一点,把攻击者的恶意网站的地址放web页面里,用户也会毫不知情和深信不疑的点进去.
简单点的理解,server返回的web页面由两部分组成,Ⅰ是用户想要的web页面index.html,Ⅱ是攻击者加进来的恶意代码
<script>alert(document.cookie)</script>
,也就是说,server会响应一切browser的请求.要什么给什么.
改request这个活儿有两种方式:
①反射型,生成一个访问被跨的站点的request(内有恶意代码)放到被跨的站点上,诱导用户点击,便从brower生成了一个毒request送给server.然后server返回给browser一个毒response,然后就没有然后了.
②存储型,攻击者在server上放一个毒request,用户点击直接中招.
跨站的精髓:就是跨,即让用户信赖的网站,把带有恶意代码的web页面给用户.
来源:oschina
链接:https://my.oschina.net/u/4404709/blog/4816842