跳转至

常见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 解析器中的外部实体解析(例如 DOCTYPEENTITY)。
  • 使用安全的 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 编码、长文件名混淆 校验魔术字、重命名文件、防双后缀、限制文件名字符