Debian PHP 代码审计实操指南
一 环境与准备
二 审计流程与方法
三 重点漏洞检查清单
| 漏洞类型 | 关键函数/特征 | 审计要点 | 修复建议 |
|---|---|---|---|
| SQL注入 | select/insert/update、mysql_query/mysqli_query、PDO::query/exec | 是否使用预处理/参数化查询;拼接或动态表名列名是否可控 | 全链路使用PDO 预处理或等价机制;禁止拼接可执行片段 |
| XSS | echo/print/printf/die/var_dump | 输出是否按上下文转义(HTML/JS/URL);CSP 策略是否到位 | 输出编码;设置CSP与HttpOnly/Secure等安全头 |
| 文件包含 | include/require/include_once/require_once | 路径是否由用户输入控制;是否未做白名单校验 | 白名单目录/文件;使用basename/realpath规范化路径 |
| 文件上传 | $_FILES、move_uploaded_file | 是否校验MIME/后缀/内容;是否重命名与隔离存储;是否可执行 | 严格校验;随机重命名;存非 Web 可访问目录;禁用执行权限 |
| 代码执行 | eval/assert/preg_replace/eval()、call_user_func/call_user_func_array | 用户输入是否进入动态执行或回调;回调参数是否可控 | 移除/禁用危险函数;最小权限;输入严格校验与白名单 |
| 命令执行 | system/exec/shell_exec/``/passthru/popen/proc_open | 是否拼接命令或调用外部程序;是否可被注入 | 使用escapeshellarg/escapeshellcmd或改为安全 API;避免拼接 |
| 变量覆盖 | extract/parse_str/$$/import_request_variables | 是否从请求直接导入变量覆盖关键配置 | 禁用或严格限制;显式声明与赋值 |
| 反序列化 | serialize/unserialize、__wakeup/__destruct | 反序列化入口是否可信;是否可利用 POP 链 | 避免反序列化不可信数据;使用签名/加密或白名单类 |
| XXE | SimpleXML/XMLReader/ DOMDocument | 是否启用外部实体解析;是否处理不可信 XML | 禁用外部实体与 DTD;使用本地 DTD与安全解析选项 |
| CSRF/越权 | 表单、Cookie/Session、JWT | 是否缺失CSRF Token;权限校验是否基于用户/角色而非参数 | 全站CSRF Token;服务端强制权限校验与最小权限原则 |
四 工具链与命令示例
composer require phpstan/phpstanvendor/bin/phpstan analyze src/composer require psalm/psalmvendor/bin/psalm analyze src/composer require "squizlabs/php_codesniffer=*"vendor/bin/phpcs src/ --standard=PSR-2五 报告与修复闭环