常见Web漏洞类型
一、注入类漏洞¶
攻击者通过向应用程序输入恶意数据,使系统在处理这些数据时执行非预期的命令或查询,从而造成安全风险。
🗄️ 1. SQL 注入(SQL Injection)¶
攻击者将恶意 SQL 语句注入到应用程序输入中,使数据库错误执行攻击者构造的语句,例如绕过登录、窃取数据或删除表等。
🔐 防御措施:
- 使用预编译语句(Prepared Statement)*或*ORM 框架代替拼接 SQL 字符串。
- 对输入进行严格校验,采用白名单机制。
- 设置数据库账户的最小权限,防止危险操作。
- 使用 Web 应用防火墙(WAF)检测常见注入特征。
💻 2. 命令注入(Command Injection)¶
攻击者将系统命令注入到应用输入中,服务器执行这些命令后可能导致权限控制绕过、文件被删除、远程控制等问题。
🔐 防御措施:
- 避免使用
system()
、exec()
等直接执行字符串命令的函数。 - 使用操作系统 API 替代命令行操作。
- 对命令参数进行白名单校验,避免特殊字符(如
;
、|
、&
等)。 - 启用应用沙箱限制命令执行权限。
🗂️ 3. LDAP 注入(LDAP Injection)¶
攻击者通过构造恶意 LDAP 查询参数来篡改 LDAP 查询语句,从而绕过认证或获取敏感数据。
🔐 防御措施:
- 使用参数化查询构建 LDAP 请求。
- 对输入进行转义,避免元字符(如
*
、(
、)
、&
)被执行。 - 限制 LDAP 查询权限,防止敏感数据泄露。
📄 4. XML 实体注入(XXE, XML External Entity Injection)¶
攻击者通过上传或提交包含恶意外部实体的 XML 数据,从而执行 SSRF、读取服务器文件或造成拒绝服务(DoS)等攻击。
🔐 防御措施:
- 禁用 XML 解析器中的外部实体解析(例如
DOCTYPE
、ENTITY
)。 - 使用安全的 XML 解析库(如
defusedxml
)。 - 对上传的 XML 文件大小、内容、结构进行验证。
🧮 5. 表达式注入(Expression Injection)¶
攻击者在模板或表达式引擎中注入恶意代码,从而执行任意表达式,获取敏感信息甚至控制服务器(常见于 EL、OGNL、Freemarker 等)。
🔐 防御措施:
- 禁止用户控制表达式内容,避免拼接执行。
- 升级并限制模板引擎功能(如关闭 OGNL 动态执行功能)。
- 使用沙箱环境隔离模板执行上下文。
☁️ 6. NoSQL 注入(NoSQL Injection)¶
针对非关系型数据库(如 MongoDB、Redis),攻击者利用查询语法灵活性进行注入,导致身份绕过或数据泄漏。
🔐 防御措施:
- 对用户输入字段进行类型验证,限制使用
$ne
、$gt
等操作符。 - 使用参数化查询接口(如
MongoDB Driver
的绑定参数)。 - 最小权限原则,限制查询范围。
类型 | 典型输入位置 | 危害 | 示例 |
---|---|---|---|
SQL 注入 | URL 参数、表单数据 | 窃取数据、绕过登录、删除表 | id=1' OR '1'='1 |
命令注入 | 后端执行系统命令时 | 执行任意系统命令,控制服务器 | ; rm -rf / |
LDAP 注入 | 登录验证或查询接口 | 绕过验证、获取敏感 LDAP 数据 | *)(uid=*) |
XML 实体注入(XXE) | 上传 XML 或 API 请求体 | 读取文件、发起 SSRF 攻击 | <!ENTITY xxe SYSTEM "file:///etc/passwd"> |
表达式注入(EL/OGNL) | 模板引擎表达式 | 执行任意 Java/脚本代码 | ${7*7} |
NoSQL 注入 | MongoDB/Redis 请求 | 越权、数据泄露 | {"$ne": null} |
二、跨站类漏洞(Cross-Site Vulnerabilities)¶
主要是指攻击者利用网站对用户浏览器的信任,诱导用户执行恶意脚本或请求,进而盗取敏感信息、冒充用户操作等
🌐 1. 跨站脚本攻击(XSS, Cross-Site Scripting)¶
🧨 基本原理:
攻击者在页面中注入恶意 JavaScript 脚本,当其他用户访问该页面时,这段脚本就在他们的浏览器中执行。
💡 常见类型:
- 反射型 XSS:恶意脚本来自 URL 参数或表单提交,立即被返回并执行。
- 存储型 XSS:脚本被存储在服务器(如评论、留言板)中,所有访问该数据的用户都会被影响。
- DOM 型 XSS:脚本通过修改浏览器端 DOM 结构触发,无需服务器参与。
🔐 防御措施:
- 对用户输入做严格的输入校验和输出转义(如 HTML Encode)。
- 使用现代前端框架(如 Vue、React)默认开启的模板转义功能。
- 设置
Content-Security-Policy (CSP)
限制可执行脚本来源。
🚀 2. 跨站请求伪造(CSRF, Cross-Site Request Forgery)¶
🧨 基本原理:
攻击者诱导用户在已登录目标站点的情况下,访问恶意链接,使浏览器自动发送携带 Cookie 的请求,实现冒用用户身份的攻击。
🔐 防御措施:
- 为请求添加 CSRF Token 并进行服务器端验证。
- 使用
SameSite
Cookie 属性限制跨站 Cookie 发送行为。 - 对敏感操作使用 POST 请求,不推荐使用 GET 提交。
🧪 3. 跨站 WebSocket 劫持(Cross-Site WebSocket Hijacking)¶
攻击者诱导用户访问恶意页面,利用 WebSocket 的同源机制缺陷,在用户 Cookie 自动发送的情况下建立连接并发送非法指令。
🔐 防御措施:
- WebSocket 服务器应校验请求来源(Origin)。
- 配置防火墙和身份验证机制拦截非法连接。
漏洞类型 | 攻击目标 | 攻击方式 | 防御重点 |
---|---|---|---|
XSS | 用户浏览器 | 注入恶意 JS | 输入校验、输出转义、CSP |
CSRF | 用户身份 | 利用 Cookie 发起伪造请求 | Token 验证、SameSite Cookie |
WebSocket 劫持 | 后端服务 | 利用用户自动携带 Cookie 进行连接操控 | 校验 Origin、权限验证 |
三、文件类漏洞¶
📦 1. 任意文件上传(Arbitrary File Upload)¶
攻击者上传恶意脚本文件(如 WebShell)至服务器,进而远程控制服务器或执行恶意操作。
🔐 防御措施:
- 严格限制文件类型(白名单)。
- 校验 MIME 类型与文件头。
- 上传目录设置为不可执行。
- 文件重命名、防止路径注入。
📥 2. 任意文件下载(Arbitrary File Download)¶
攻击者构造路径参数下载任意文件,如源码、配置、敏感数据等。
🔐 防御措施:
- 限制下载目录范围。
- 文件名使用 ID 映射。
- 过滤路径穿越符
../
。
📖 3. 任意文件读取(Arbitrary File Read)¶
攻击者读取服务器上任意文件内容,可能获取敏感信息(如配置、密码等)。
🔐 防御措施:
- 对路径参数严格校验。
- 文件读取需权限验证。
- 限定读取目录和格式。
🧩 4. 本地文件包含(LFI, Local File Inclusion)¶
通过控制包含文件路径,引入本地文件,可能执行注入代码或泄露源码。
🔐 防御措施:
- 文件包含使用白名单。
- 禁止用户控制路径。
- 过滤路径穿越字符。
🌐 5. 远程文件包含(RFI, Remote File Inclusion)¶
通过包含远程 URL 的方式将攻击者代码引入服务端执行。
🔐 防御措施:
- 关闭远程包含(如 PHP 的
allow_url_include
)。 - 避免路径由用户控制。
- 使用静态模板路径。
🧨 6. ZIP 解压炸弹 & 路径穿越(Zip Bomb / Zip Slip)¶
通过构造特殊压缩文件,实现资源耗尽或路径穿越写入敏感目录。
🔐 防御措施:
- 限制压缩包层数、总大小。
- 检查压缩包内路径是否包含
../
。 - 使用安全的解压库。
🎭 7. 文件名绕过(File Name Bypass)¶
通过双后缀(如 shell.php.jpg
)或编码绕过文件类型校验。
🔐 防御措施:
- 检查文件真实内容(魔术字)。
- 强制重命名文件及后缀。
- 校验文件名合法性,过滤危险后缀。
漏洞名称 | 攻击方式 | 影响 | 常见手法 | 防御措施 |
---|---|---|---|---|
任意文件上传 📦 | 上传恶意文件(如 WebShell)并通过路径访问执行 | 远程命令执行、网站被控 | 双后缀绕过、Content-Type 伪造、白名单绕过 | 限制类型、校验 MIME、目录不可执行、重命名、过滤路径 |
任意文件下载 📥 | 构造参数下载任意服务器文件 | 泄露源码、配置、密码等敏感信息 | 使用 ../../ 进行目录穿越 |
限定目录、路径过滤、ID 映射、拒绝穿越 |
任意文件读取 📖 | 控制读取路径参数,访问任意文件 | 获取敏感文件内容 | 利用日志、环境文件读取路径 | 路径校验、权限限制、使用白名单 |
本地文件包含 🧩 | 控制包含文件路径,引入本地文件执行或泄露内容 | 泄露源码、日志注入 RCE 等 | 访问日志文件注入代码、包含环境配置文件 | 禁止路径控制、使用白名单、过滤路径穿越 |
远程文件包含 🌐 | 引入远程恶意脚本文件执行 | 远程代码执行 | 使用 URL(如 http://attacker.com/shell.txt)控制包含路径 | 禁用远程包含、路径固定、关闭 allow_url_include |
ZIP 解压炸弹 & Zip Slip 🧨 | 构造特殊压缩包耗尽资源或路径穿越写入敏感目录 | 服务宕机、文件被覆盖、系统破坏 | 巨大嵌套 ZIP(炸弹)、文件路径为 ../../../../etc/passwd |
限制压缩内容大小/深度、过滤非法路径、使用安全解压库 |
文件名绕过 🎭 | 利用后缀伪装或编码绕过上传校验 | 上传恶意文件成功,绕过安全策略 | 1.php.jpg 、Unicode 编码、长文件名混淆 |
校验魔术字、重命名文件、防双后缀、限制文件名字符 |