什么是XSS攻击
XSS跨站脚本攻击(Cross Site Scripting)的本质是攻击者在web页面插入恶意的script代码,当用户浏览该网页之时,嵌入其中的script代码就会被执行,从而达到恶意攻击用户的目的,比如读cookie,sesssion,tokens,或者网站其它敏感信息。
XSS攻击的危害
1、通过document.cookie盗取cookie中的信息
2、使用js或css破坏页面正常的结构与样式
3、流量劫持(通过访问某段具有window.location.href 定位到其他页面)
4、ddos攻击:利用合理的客户端请求来占用过多的服务器,从而使合法用户无法得到服务器响应
5、控制企业数据,包括读取、篡改、删除等
XSS攻击的类型
反射型XSS攻击
反射型XSS漏洞常见于通过URL传递参数的功能,如网站搜索、跳转等,由于需要用户主动打开恶意的URL才能生效,攻击者往往会结合多种手段诱导用户点击
反射型XSS攻击的步骤
1、攻击者构造出特殊的URL,其中包含恶意代码
2、用户打开有恶意代码的URL时,网站服务器端将恶意代码从URL取出,拼接在HTML返回给浏览器
3、用户浏览器接收到响应后解析执行。混在其中的恶意代码也会被执行
4、恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户行为,调用目标网站接口执行攻击者的指定的操作
防御反射型XSS攻击
对输入进行检查: 对请求参数进行检查,一旦发现可疑的特殊字符就拒绝请求。
对输出进行转义再显示: 对潜在的威胁的字符进行编码、转义
存储型XSS攻击
恶意脚本永久存储在目标服务器上,当浏览器请求数据时,脚本从服务器传回执行,影响范围比反射型和DOM型XSS更大。存储型XSS攻击的原因是没有做好数据过滤:前端提交数据到服务端时,没有做好过滤,服务器端接收到数据时,在存储之前没有做过滤,前端从服务器请求到数据时,没有过滤输出
存储型XSS攻击步骤
1、攻击者将恶意代码提交到目标网站的数据库中
2、用户打开目标网站时,网站服务端将恶意代码从数据库中取出,拼接在HTML中返回给浏览器
3、用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行
4、恶意代码窃取用户数据并发送到攻击者的网站,或冒充用户行为,调用目标网站接口等
防御存储型XSS攻击
服务器接收到数据在存储数据库之前进行转义或过滤
前端接收到服务器传递过来的数据,在展示页面之前先进行转义或过滤
DOM型XSS攻击
DOM型XSS攻击实际上就是前端JavaScript代码不够严谨,把不可信的内容插入到了页面
DOM型XSS攻击步骤
1、 攻击者构造出特殊数据,其中包含恶意代码
2、用户浏览器执行了恶意代码
3、窃取用户数据并发送到攻击者的网站或冒充用户
防疫DOM型XSS攻击
在使用.innerHTML outerHTML document.write()时不要把不可信的数据插入到HTML页面中,应尽量使用.textContent .setAttribute()等