XSS学习
XSS概述
跨站脚本攻击,是一种网站应用程序的安全漏洞攻击
XSS攻击通常指利用网页开发时留下的漏洞,通过一些方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序,当用户正常访问时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的
XSS攻击的两大要素
- 攻击者提交恶意代码
- 浏览器执行恶意代码
XSS原理
前言
HTML是超文本标记语言,通过将一些字符特殊对待来区别文本和标记
例如
小于号(<)被看作值HTML标签的开始,与(&)之间的字符是页面的标题
原理
当动态页面中插入的内容有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以当这些特殊字符不能被动态页面检查或检查出现失误时,就会产生XSS漏洞
简单来说XSS就是将恶意JavaScript 代码注入到目标网站的页面中,用户使用浏览器时恶意代码执行,实现攻击的目的
常见的攻击包括
- 窃取用户Cookie
- 劫持用户会话
- 伪造用户操作
- 篡改网页内容
- 传播蠕虫
- 盗取用户敏感信息
XSS的三种类型
反射型XSS

特点
恶意代码通过URL传入
服务器将恶意代码反射 回页面
仅在当前请求中执行,不存储在服务器
需诱骗用户点击恶意链接
典型场景
将不可信数据插入到HTML标签之间(如div,p,td)
将不可信数据插入到HTML属性之间(如
)将不可信数据插入到script里时(如)
插入到Style属性里的情况(如)
将不可信数据插入到HTML URL里(如
)攻击示例
1 | |
如果服务器未对q的值进行检测过滤,则执行脚本,弹出cookie
存储型XSS

特点
恶意代码被存储到服务器数据库
所有访问该页面的用户都会受到攻击
典型场景
评论区
留言板
用户资料
文章内容
示例
在评论框输入
1 | |
如果服务器未过滤,该评论会被存入数据库,所有访问该页面的用户都会执行该脚本
DOM型XSS
DOM 型 XSS 是前端 JavaScript 代码造成的漏洞,与服务器无关
特点
恶意代码不经过服务器
通过修改页面DOM结构触发
服务器返回的页面本事时干净的
漏洞存在于前端JS代码中
典型场景
基于URL参数动态渲染页面内容的单页应用
攻击示例
页面代码
1 | |
攻击者构造
1 | |
页面执行脚本