XSS:跨站脚本攻击;原理:攻击者在网页中嵌入客户端脚本(通常是JavaScript的恶意脚本),当用户使用浏览器加载被嵌入恶意代码的网页时,恶意脚本代码就会在用户的浏览器执行,造成跨站脚本攻击。
XSS的危害:1.针对用户:劫持cookie,网络钓鱼,植马挖矿,广告刷流量
2.针对web服务:web蠕虫,篡改页面,劫持后台
常出现的场景:评论区,留言区,个人信息,订单信息等等。
XSS的分类:反射型XSS;存储型XSS;DOM型XSS
反射型XSS:非持久性、参数型的跨站脚本,恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击的。
存储型XSS:恶意代码被保存到目标网站的服务器中,这种攻击具有较强的稳定性和持久性。比较常见的场景是:黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发表后,所有访问该博客的用户,都会在他们的浏览器中执行这段恶意js代码。
DOM型XSS: dom是window对象下内置的document对象,DOM-XSS就是输出点在dom,属于特殊的反射型XSS.
XSS类型 | 存储型 | 反射型 | DOM型 |
触发过程 | 1.黑客构造XSS脚本 2.正常用户访问携带XSS脚本的页面 | 正常用户访问携带XSS脚本的URL | 正常用户访问携带XSS脚本的URL |
数据存储 | 服务器 | URL | URL |
谁来输出 | 后端web应用程序 | 后端web应用程序 | 前端javascript |
输出位置 | HTTP响应中 | HTTP响应中 | 动态构造的DOM节点中 |
是否持久 | 是 | 否 | 否 |
防御方式
1.对用户的输入进行合理验证:对特殊字符(如<、>、‘、“等)以及<script>、javascript等字符进行过滤。
2.根据数据位置设置恰当的输出编码:根据数据将要置于HTML上下文中的不同位置(HTML标签、HTML属性、javascript脚本、css、url)对所有不可信数据进行恰当的输出编码。
3.设置HttpOnly属性:避免攻击者利用XSS漏洞进行Cookie劫持攻击