XSS是指攻击者利用网站程序对用户输入过滤不足的缺陷,输入可以显示在页面上对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。
XSS主要影响的是用户端的安全,包含用户信息安全、权限安全等。并且多数XSS都依赖于JavaScript脚本开展。
核心要求是构造出能够让前端执行的JS代码,让攻击者的JS代码在受害者浏览器上执行,攻击系统用户而不是系统本身。
JS运行条件:代码位于< script >标签中、代码位于onClick事件或者其他触发事件中、代码位于超链接的href标签中。
原理
本质上是一种将恶意脚本嵌入到当前网页并执行的攻击方式,通常情况下,黑客通过"HTML注入"行为篡改网页,并插入恶意JS脚本,从而在用户浏览网页的时候控制浏览器的行为。
这种漏洞产生的原因是网站对于用户提交的数据过滤不严格,导致用户提交的数据可以修当前页面或插入了一段脚本。
通俗来说,网站一般具有用户输入参数的功能,如网站留言板、评论区等,攻击者利用其用户身份在输入参数时附带了恶意脚本,在提交服务器后,服务器没有对用户端传入的参数做任何安全过滤。之后服务器会根据业务流程,将恶意脚本存储在数据库或直接回显给用户,在用户浏览含有恶意脚本的页面时,恶意脚本会在用户浏览器上成功执行。
恶意脚本有很多种表现形式,如常见的弹窗、窃取用户Cookie、弹出广告等。
XSS的分类
- 反射型XSS:涉及浏览器-服务器交互
- 存储型XSS:涉及浏览器-服务器-数据库交互
- DOM型XSS:浏览器
反射型XSS
存在反射型XSS漏洞的页面只是将用户输入的数据通过URL的形式直接或为经过完善的安全过滤就在浏览器进行输出,会导致输出的数据中存在可被浏览器执行的代码数据。由于此种类型的跨站代码存在于URL中,因此黑客通常需要通过加密变形或诱骗等方式,将恶意代码的连接发给用户,只有用户触发以后才能攻击成功实施。
存储型XSS
存储型XSS脚本攻击是指Web应用程序将用户输入从信息保存至服务端的数据库或其他文件形式中,网页进行数据查询展示时,会从数据库中获取数据内容,并将数据内容在网页中进行输出展示,只要用户访问具有XSS攻击脚本的网页时,就会触发攻击效果,因此存储型XSS具有较强的稳定性。
DOM型XSS
从效果上来说也算是反射型XSS,但是是由JS的DOM节点变成可以改变HTML代码这个特性形成的XSS攻击,基于DOM型的XSS攻击需要针对JS的DOM代码进行而分析,并根据实际情况进行XSS攻击的利用,但实际应用中由于构造语句有较大的难度,且实现效果比较苛刻,因此较为少见。
利用条件
- 入库处理:目标网页有攻击者可控的输入点,输入信息可以在受害者的浏览器中显示,输入具备功能的可执行脚本,或者说防护措施可以通过一定手段绕过。
- 出库处理:浏览器将输入解析为脚本,并具备执行该脚本的能力
作为攻击者,如果要利用存储型跨站脚本的攻击,则先需要攻击脚本存储在服务器端,并保证攻击脚本在读取后可