### PHP 代码审计流程

**1. 宏观分析与项目理解**

- **项目概况了解**: 首先，你需要快速浏览整个代码库，了解项目的规模、所使用的框架（例如 Laravel, ThinkPHP, WordPress 等）、版本以及主要功能模块。这有助于你构建一个大致的威胁模型
- **寻找入口点**: 确定程序的入口文件（如 `index.php`）和主要路由配置。这是所有用户输入和请求的起点，也是你后续深入分析的起点
- **识别关键功能**: 重点关注那些与用户交互、文件操作、数据库查询、命令执行以及身份认证相关的模块，这些地方最容易出现漏洞

**2. 自动化工具扫描**

- **静态分析（SAST）**: 使用专门的静态代码分析工具对整个代码库进行扫描。这些工具可以快速地发现一些明显的、模式化的漏洞，例如 SQL 注入、XSS、命令注入等
  - **常用工具**:
    - **`PHPStan`**: 检查代码中的潜在错误和不规范之处
    - **`SonarQube`**: 功能强大的代码质量管理平台，可以集成多种规则集
    - **`RIPS`** (付费) 或 **`php-security-scanner`** (开源): 专注于 PHP 安全漏洞扫描
- **动态分析（DAST）**: 如果条件允许，在测试环境中部署代码，使用动态扫描工具（如 Burp Suite Pro, OWASP ZAP）模拟黑客行为进行测试。这可以发现那些只有在运行时才能触发的漏洞

**3. 人工审计与深度分析**

人工审计是发现复杂和逻辑漏洞的关键步骤，它需要你结合自动化工具的报告进行深入分析

- **查找敏感函数**: 重点关注那些可能导致危险操作的函数，回溯它们的调用链，看参数是否可控、是否进行了过滤。
  - **命令执行**: `exec()`, `shell_exec()`, `passthru()`, `system()`
  - **文件操作**: `file_get_contents()`, `file_put_contents()`, `include()`, `require()`
  - **SQL 注入**: `mysqli_query()`, `PDO::query()`
  - **代码执行**: `eval()`, `assert()`, `unserialize()`
  - **重定向**: `header('Location: ...')`

**4. 漏洞确认与报告**

- **漏洞复现**: 找到潜在漏洞后，你需要在本地或测试环境中复现它，确认其真实存在且可利用
- **编写报告**: 撰写详细的漏洞报告，包括：
  - **漏洞描述**: 漏洞的类型、影响范围和风险等级
  - **漏洞位置**: 精确的代码文件和行号
  - **复现步骤**: 详细的攻击步骤，帮助开发者理解和验证
  - **修复建议**: 给出具体的代码修复方案