一、XSS跨站脚本攻击
跨站脚本攻击,英文全称是Cross Site Script,本来缩写是CSS,但是为了和层叠样式表CSS有所区别,所以在安全领域叫做“XSS”。XSS攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。在一开始,这种攻击的演示案例是跨域的,所以叫做“s跨站脚本”。但是发展到今天,由于javascript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要,但是由于历史原因,XSS这个名字却一直保留下来。
实施XSS攻击需要具备两个条件:
1、需要向web页面注入恶意html代码;
2、这些恶意代码能够被浏览器成功的执行。
二、XSS的分类
XSS根据效果的不同,可以分为以下几类:
1.反射型XSS:给用户发送页面或者链接,让用户点击来进行攻击,也叫做“非持久型XSS”。
2.存储型XSS:把攻击存放在服务端,可能造成传播(比如博客系统,每个访问该页面的人都有可能被攻击),主动性更强。
比较常见的一种场景就是,黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的Javascript代码。黑客把恶意的脚本保存到服务器端,所以这种XSS攻击叫做“存储型XSS”。也叫做“持久型XSS”,因为从效果上来说,它存在的时间是比较长的。
3.DOM型:本质上是反射型,但是是通过用户点击,修改原本dom元素的属性,构造攻击动作
反射型和dom型区别:
反射型是构造好了攻击动作,然后就等你打开那个页面;dom型也是等你点击,但是不是页面,通过用户动作,把原来的动作注释掉,然后加上自己修改的动作。
三、XSS的作用
什么是XSS Payload?XSS攻击成功后,攻击者能够对当前用户浏览的页面植入恶意脚本,通过恶意脚本,控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为“XSS Payload“,实际上就是恶意攻击的JavaScript脚本,所有JavaScript脚本能实现的功能,XSS Payload都能做到。
一个最常见的XSS Payload,就是通过读取浏览器的Cookie对象,从而发起“Cookie劫持”攻击。
Cookie中一般加密保存了当前用户的登录凭证。Cookie如果丢失,往往意味着用户的登录凭证丢失。换句话说,攻击者可以不通过密码,而直接登录进用户的账户。
总结XSS作用:
1.可以获得cookie
2.仿造get、post请求做一些动作
3.获得用户的IP
4.识别用户软件、浏览器
5.通过钓鱼也可以骗到用户的用户名和密码这样
四、XSS的防御
1.对于截取cookie这样的操作可以在cookie上加上HttpOnly,这样js就不能访问cookie了。对于重要的cookie可以考虑加上该设置。
一个Cookie的使用过程如下:
step1:浏览器向服务器发起请求,这时候没有Cookie
step2:服务器返回时发送Set-Cookie头,向客户端浏览器写入Cookie
step3:在该Cookie到期前,浏览器访问该域下的所有页面,都将发送该Cookie。
2.输入检查。一般是查询特殊字符,比如『<』,『>』,『、』这样,可以选择对输入进行编码,或者是筛选掉这些字符。
3.没有绝对可以防止XSS攻击的方法,因为XSS比较灵活,任何语言或者框架设计不当都有可能存在漏洞。