1,什么是XSS攻击?
(1)概念
XSS攻击指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户的浏览器上运行,从而盗取用户的信息 如cookie等
XSS的本质是因为网站没有对恶意代码进行过滤,与正常的代码混合在一起了,浏览器没有办法分辨哪些脚本是可信的,从而导致了恶意代码的执行
攻击者可以通过这种攻击方式进行一下操作:
1.获取页面的数据,如DOM,cookie,LocalStorage;
2.DOS攻击,发送合理请求,占用服务器资源,从而使用户无法访问服务器;
3.破坏页面结构;
4.流量劫持(将连接指向某网站)
(2)攻击类型
XSS可以分为存储型,反射型和DOM型;
1.存储型指的是恶意脚本会存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回并执行
2.反射型指的是攻击者诱导用户访问一个带有恶意代码的URL后,服务器端接收数据后处理,然后把带有恶意代码的数据发送到浏览器端,浏览器端解析这段带有XSS代码的数据后当做脚本执行,最终完成XSS攻击
3.DOM型指的是通过修改页面的DOM节点形成的XSS
1)存储型XSS的攻击步骤
① 攻击者将恶意代码提交到目标网站的数据库中
② 用户打开目标网站上时,网站服务器将恶意代码从数据库中取出,拼接在HTML中返回给浏览器
③ 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
④ 恶意代码窃取用户数据并发送到攻击者网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
这种攻击常见于带有用户保存数据的网站功能,如论坛发帖,商品评论,用户私信等
2)反射型XSS的攻击步骤:
① 攻击者构造出特殊的URL,其中包含恶意代码
② 用户打开带有恶意代码的URL时,网站服务器将恶意代码从URL中取出,拼接在HTML中返回给浏览器
③ 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
④ 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
反射型XSS和存储型XSS的区别是:存储型XSS的恶意代码存在数据库中,反射弧XSS的恶意代码存在URL中
反射型XSS漏洞常见于通过URL传递参数的功能,如网站搜索,跳转等。由于需要用户主动打开恶意的URL才能生效,攻击者往往会结合多种手段诱导用户点击
3)DOM型XSS的攻击步骤
① 攻击者构造出特殊的URL,其中包含恶意代码
② 用户打开带有恶意代码的URL
③ 用户浏览器接收到响应后解析执行,前端JavaScript取出URL中的恶意代码并执行
④ 恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作
DOM型XSS和前两种XSS的区别:
** ** DOM型XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞,而其他两种XSS都属于服务端的安全漏洞
2,如何防御XSS攻击?
可以看到XSS危害如此之大,那么在开发网站时就要做好防御措施,具体措施如下:
1.可以从浏览器的执行来进行预防,一种是使用纯前端的方式,不用服务器端拼接后返回(不适用服务器端渲染)。另一种是对需要插入到HTML中的代码做好充分的转义。对于DOM型的攻击,主要是前端脚本的不可靠而造成的,对于数据获取渲染和字符串拼接的时候应该对可能出现的恶意代码情况进行判断
2.使用CSP,CSP的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击
① CSP指的是内容安全策略,它的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,我们只需要配置规则,如何拦截右浏览器自己来实现; ② 通常有两种方式来开启CSP,一种是设置HTTP首部中的Content-Security-Policy,一种是设置meta标签的方式
3.对一些敏感信息进行保护,比如cookie使用http-only,使得脚本无法获取。也可以使用验证码,避免脚本伪装成用户执行一些操作
版权归原作者 AnnieY_ 所有, 如有侵权,请联系我们删除。