常见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 攻击 表达式注入(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 编码、长文件名混淆 校验魔术字、重命名文件、防双后缀、限制文件名字符 2025年4月18日 02:19:38