# XSS 跨站脚本攻击原理与防护 > XSS全称 Cross-Site Scripting,跨站脚本;OWASP Top10 常年上榜。 > 核心一句话:**攻击者注入恶意JS代码,服务端存储/直接返回恶意代码,在受害者浏览器中执行,盗用Cookie、劫持会话、篡改页面、诱导跳转。** ## 一、三大分类 ### 1. 存储型XSS(持久型,高危) Payload存入后端数据库,**所有访问该页面的用户都会触发**。 攻击链路: 1. 攻击者在评论/昵称/留言提交恶意JS 2. 后端存入数据库,未做净化 3. 其他用户访问页面,后端读出数据渲染到HTML 4. 浏览器把payload当成JS执行 > 场景:评论区、用户签名、帖子、工单备注 ### 2. 反射型XSS(非持久,中高危) Payload放在URL参数里,**用户点击恶意链接,参数直接反射到页面渲染,不入库**。 示例链接: `http://test.com/search?q=` 用户点开链接,页面直接把q参数输出到页面,执行JS。 > 特点:需要诱导用户点击链接;不会存入数据库。 ### 3. DOM-XSS(基于DOM,客户端XSS) **漏洞完全发生在前端JS,数据不经过后端**。后端返回正常内容,前端JS直接从URL/hash获取参数,写入DOM。 例:`location.hash` 的内容直接 `innerHTML` 渲染页面。 后端看不到payload,日志很难捕获,WAF容易漏掉。 ## 二、攻击能力 - 盗取Cookie、SessionId(可配合劫持账号) - 劫持页面DOM,篡改页面内容、伪造弹窗钓鱼 - 诱导用户点击,发起CSRF请求 - 窃取页面敏感数据、上传凭证 - 调用浏览器API,获取部分客户端信息 > 区分: > XSS:**在浏览器执行JS,可以读取页面Cookie、页面数据** > CSRF:借用已有Cookie发起请求,**不能读取页面返回内容** ## 三、识别测试方法(授权测试) 1. 输入点提交基础payload:`` 2. 简易变形payload(绕过过滤): `` `` 3. DOM XSS重点:看前端js直接把可控参数赋值给 `innerHTML、outerHTML、document.write` 4. 观察:页面源码是否原样保留payload标签,没有转义 ## 四、防护体系(纵深防御) ### ✅ 1. 输出编码(最核心,必须后端/前端渲染时执行) 根据输出上下文做转义,**不要统一一种过滤** 1. HTML上下文(标签内文本):转义 `& < > " '` 2. HTML属性值:额外处理引号 3. JS上下文:JS转义 4. CSS上下文:CSS编码 > ❌ 误区:输入过滤/过滤`