Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
09跨站脚本攻击【XSS】
## 一、原理 跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的安全漏洞,攻击者通过向网页中注入恶意脚本代码,使其他用户在浏览该页面时执行这些脚本,从而窃取用户数据、劫持会话或进行其他恶意操作。 ## 二、XSS漏洞类型 XSS主要分为三种类型: - **存储型XSS(Stored/Persistent XSS)** - **原理**:恶意脚本被永久存储在目标服务器(如数据库、留言板、用户评论等),当其他用户访问包含该脚本的页面时触发。 - **示例**:攻击者在论坛的帖子中插入恶意脚本,所有查看该帖子的用户都会执行该脚本。 - **反射型XSS(Reflected XSS)** - **原理**:恶意脚本作为请求参数(如URL、表单输入)发送到服务器,服务器未过滤直接返回给用户浏览器执行。 - **示例**:通过钓鱼链接诱导用户点击类似 `http://example.com/search?q=<script>恶意代码</script>` 的URL。 - **DOM型XSS(DOM-Based XSS)** - **原理**:攻击利用客户端JavaScript操作DOM(文档对象模型)时未对输入进行过滤,导致恶意脚本在浏览器端动态执行。 - **示例**:通过修改URL的哈希(`#`)参数触发页面内的脚本执行,如 `http://example.com#<img src=x onerror=alert(1)>`。 ## 三、攻击流程 - **漏洞根源**: 网站未对用户输入的内容进行充分验证、过滤或编码,导致用户输入的恶意内容被浏览器解析为可执行代码。 - **攻击步骤**: 1. **注入恶意代码**:攻击者将包含JavaScript或其他脚本的输入提交到目标页面。 2. **存储或反射**:恶意代码被存储到服务器(存储型)或通过URL参数反射(反射型)。 3. **受害者触发**:用户访问包含恶意代码的页面,浏览器解析并执行脚本。 4. **恶意行为**:脚本窃取用户Cookie、会话令牌、重定向到钓鱼页面等。 ## 四、XSS的危害 - **窃取用户凭证**:通过`document.cookie`获取用户的登录凭证或会话ID。 - **会话劫持**:利用窃取的会话信息冒充用户身份。 - **钓鱼攻击**:伪造登录表单诱导用户输入敏感信息。 - **网页篡改**:修改页面内容,传播虚假信息或恶意链接。 - **传播蠕虫**:通过社交平台自动发送恶意链接,扩大攻击范围。 ## 五、防御措施 - **输入验证与过滤**: - 对用户输入进行严格检查,过滤或转义特殊字符(如 `<`, `>`, `&`, `"`, `'`)。 - 使用白名单机制,仅允许特定格式的内容(如仅允许纯文本或安全HTML标签)。 - **输出编码**: - 在将用户输入输出到页面时,根据上下文进行编码: - HTML实体编码(如 `<` → `<`)。 - JavaScript编码(如 `"` → `\x22`)。 - URL编码(如空格→ `%20`)。 - **使用安全框架/库**: - 现代前端框架(如React、Vue、Angular)默认对输出内容进行转义。 - 使用DOMPurify等库对HTML内容进行净化。 - **Content Security Policy(CSP)**: - 通过HTTP头设置`Content-Security-Policy`,限制页面加载资源的来源,禁止内联脚本(`unsafe-inline`)和`eval()`函数。 - **HttpOnly Cookie**: - 设置Cookie的`HttpOnly`属性,防止JavaScript通过`document.cookie`读取敏感信息。 - **避免直接操作DOM**: - 使用`textContent`替代`innerHTML`,避免直接将用户输入插入HTML。 ## 六、实际案例 - **存储型XSS案例**: 某社交平台允许用户在个人简介中插入HTML标签,攻击者提交 `<script>窃取Cookie的代码</script>`,所有访问该用户主页的用户均受影响。 - **反射型XSS案例**: 某搜索页面未对URL参数过滤,攻击者构造恶意链接 `http://example.com/search?query=<script>alert('XSS')</script>`,用户点击后触发弹窗。 ## 七、总结 XSS漏洞的核心在于对用户输入的不信任。开发者需在数据输入、输出和客户端处理等环节实施多层防御机制,结合安全编码实践和现代技术(如CSP)来降低风险。即使是细微的疏漏(如未转义的某个字符)也可能导致严重的安全问题。
毛林
2025年9月6日 12:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码