个人记录 | Web安全漏洞原理 - XSS
简述
XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见的计算机安全漏洞。攻击者通过在用户端输入恶意的可执行脚本代码,若服务器端对所输入的内容未进行过滤处理,恶意的可执行脚本代码将输出到浏览器,并执行注入的恶意脚本代码。
类型
-
反射型XSS
用户端输入的内容通过浏览器传输到服务器,服务器在接受到内容后直接反射传输回来,输入的内容直接在用户端浏览器解析执行。 -
存储型XSS
用户端输入的内容通过浏览器传输到服务器,服务器在接受到内容后会将输入的内容储存在服务器的数据库或者文件中,当用户再次访问目标页面时,服务器会将已经储存的内容传输到用户端浏览器进行解析执行。它与反射型XSS的区别在于:持久性。
-
DOM型XSS
DOM型XSS与反射型、储存型XSS的主要区别是,它不需要与后端服务器进行交互。用户在访问目标页面的时候,页面根据交互操作,通过JavaScript对整个HTML进行重构,而这个重构的过程涉及HTML 元素的对象和属性访问获取。
访问获取入口就是DOM,当某个元素的对象和属性获取过程中没有对其进行过滤处理,就有可能被攻击者注入恶意的可执行脚本代码。
常见危害
1.网络钓鱼,包括盗取各类用户账号
2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作
3.劫持用户会话,从而执行任意操作,例如进行非法转账.强制发表日志.发送电子邮件等
4.强制弹出广告页面.刷流量等
5.网页挂马,进行恶意操作,例如任意篡改页面信息.删除文章等
6.进行大量的客户端攻击,如DDoS攻击
7.获取客户端信息,例如用户的浏览历史.真实IP.开放端口等
8.控制受害者机器向其他网站发起攻击
9.结合其他漏洞,如CSRF漏洞,实施进一步作恶
10.提升用户权限,包括进一步渗透网站
11.传播跨站脚本蠕虫等
防御
-
前端输入过滤
对前端用户输入的内容进行检查,对于DOM型XSS比较有效,特殊情况下,攻击者可以通过抓包工具对其进行绕过。 -
前端输出编码
对于所要输出的数据内容进行编码转义,但这种防御方式会影响部分场景需求。 -
服务器后端处理
将传输到服务器的数据内容进行转义、特殊字符串检测等操作、HTML。但无法防御部分DOM型XSS攻击,因为DOM型XSS攻击不需要跟服务器后端进行交互。 -
XSS防火墙
利用前端JS组件,HTML5API等,对网页中的事件进行监控,拦截恶意脚本代码执行,防止XSS行为发生。攻击者可以通过分析前端JS代码进行bypass操作。 -
XSS筛选器
对数据内容与XSS Payload进行特征匹配过滤,但可能对网站业务的交互产生一定的-压力。