🗣 Wd提问: 代码审计源码PHP
🤖 Ai回答: 进行代码审计(Code Audit)是发现 PHP 应用中潜在安全漏洞的重要手段。以下是一个典型的 PHP 代码审计实战示例,包括常见漏洞类型(如命令注入、文件包含、SQL 注入、XSS、反序列化等),并附带分析和修复建议。
🔍 一、示例源码(存在多个安全漏洞)
php
<?php
// index.php
// 1、危险的用户输入处理(命令注入)
$cmd = $_GET['cmd'];
system($cmd); // ❌ 命令注入风险
// 2、危险的文件包含(文件包含漏洞)
$file = $_GET['file'];
include($file); // ❌ 本地/远程文件包含
// 3、直接拼接 SQL(SQL 注入)
$uname = $_POST['username'];
$pass = $_POST['password'];
$sql = SELECT * FROM users WHERE username = '$uname' AND password = '$pass';
$result = mysqli_query($conn, $sql); // ❌ SQL 注入
// 4、输出未过滤(XSS)
echo <h1Welcome, 、$_GET['name'] 、!</h1; // ❌ XSS
// 5、反序列化漏洞(危险的 unserialize)
$data = $_COOKIE['user_data'];
$user = unserialize($data); // ❌ 反序列化漏洞
// 6、任意文件读取
$filename = $_GET['file'];
if (file_exists($filename)) {
readfile($filename);
} else {
echo File not found.;
}
// 7、不安全的 session 处理
session_start();
$_SESSION['admin'] = true; // 无权限控制
// 8、未验证用户身份就执行敏感操作
if ($_POST['action'] == 'delete') {
unlink($_POST['file']); // ❌ 任意文件删除
}
?
🛠️ 二、漏洞分析与修复建议
1、命令注入(`system($cmd)`)
✅ 问题:直接使用 `$_GET['cmd']` 作为系统命令参数,攻击者可执行任意命令。
🔧 修复方案:
php
$allowed_cmds = ['ls', 'whoami', 'date'];
$cmd = $_GET['cmd'];
if (!in_array($cmd, $allowed_cmds)) {
die(Invalid command);
}
system($cmd);
✅ 严格白名单控制,避免动态执行外部命令。
2、文件包含漏洞(`include($file)`)
✅ 问题:`$file` 来自用户输入,可能为 `http://evil.com/shell.php`(LFI/RFI)。
🔧 修复方案:
php
$allowed_files = ['home.php', 'about.php', 'contact.php'];
$file = $_GET['file'];
if (!in_array($file, $allowed_files)) {
die(Access denied);
}
include($file);
✅ 使用白名单限制可包含的文件,禁止 `../` 等路径遍历。
3、SQL 注入(拼接查询)
✅ 问题:直接拼接用户输入到 SQL 语句。
🔧 修复方案(使用预处理):
php
$stmt = $conn-prepare(SELECT * FROM users WHERE username = ? AND password = ?);
$stmt-bind_param(ss, $uname, $pass);
$stmt-execute();
$result = $stmt-get_result();
✅ 必须使用 `mysqli_prepare` + `bind_param`,或使用 PDO。
4、XSS(跨站脚本)
✅ 问题:未对输出内容进行转义。
🔧 修复方案:
php
echo <h1Welcome, 、htmlspecialchars($_GET['name']) 、!</h1;
✅ 使用 `htmlspecialchars()` 转义特殊字符。
5、反序列化漏洞(`unserialize()`)
✅ 问题:`$_COOKIE['user_data']` 可能被伪造,触发魔术方法(如 `__destruct`)。
🔧 修复方案:
php
// 1、避免存储复杂对象
// 2、使用加密签名验证数据完整性
if (isset($_COOKIE['user_data'])) {
$data = $_COOKIE['user_data'];
$signature = $_COOKIE['signature']; // 附加签名
if (!hash_equals(hash_hmac('sha256', $data, 'secret_key'), $signature)) {
die(Invalid data);
}
$user = unserialize($data);
}
✅ 使用签名机制防止篡改,避免反序列化不可信数据。
6、任意文件读取(`readfile()`)
✅ 问题:`$filename` 可控,可读 `/etc/passwd` 等敏感文件。
🔧 修复方案:
php
$allowed_paths = [
'/var/www/html/files/',
'/var/www/html/uploads/'
];
$filename = $_GET['file'];
// 安全路径检查
$full_path = realpath($filename);
if (strpos($full_path, '/var/www/html/') !== 0) {
die(Access denied);
}
if (file_exists($full_path)) {
readfile($full_path);
} else {
echo File not found.;
}
✅ 使用 `realpath()` 消除路径遍历,并做根目录白名单校验。
7、不安全的 Session 管理
✅ 问题:未验证身份就设置 `$_SESSION['admin'] = true`。
🔧 修复方案:
php
session_start();
if (!isset($_SESSION['authenticated']) !$_SESSION['authenticated']) {
die(Unauthorized access);
}
if ($_SESSION['role'] !== 'admin') {
die(Admin only);
}
✅ 严格权限控制,避免会话劫持。
8、任意文件删除(`unlink()`)
✅ 问题:直接删除用户传入的文件。
🔧 修复方案:
php
$allowed_files = ['backup.sql', 'temp.log'];
$file = $_POST['file'];
if (!in_array($file, $allowed_files)) {
die(Invalid file);
}
if (file_exists($file)) {
unlink($file);
echo File deleted.;
} else {
echo File not found.;
}
✅ 白名单控制删除目标,禁止 `../` 等路径。
✅ 三、通用代码审计清单(推荐)
| 检查项 | 是否存在 | 建议 |
|
| 用户输入未过滤 | ✅/❌ | 使用 `filter_input` + `htmlspecialchars` |
| SQL 拼接查询 | ✅/❌ | 使用预处理(PDO/MySQLi Prepare) |
| 文件包含 | ✅/❌ | 白名单 + `realpath()` |
| 命令执行 | ✅/❌ | 白名单 + `escapeshellarg()` |
| 反序列化 | ✅/❌ | 避免 `unserialize()`,加签名 |
| 会话管理 | ✅/❌ | 严格权限 + 会话固定防护 |
| 错误信息暴露 | ✅/❌ | 关闭 `display_errors`,记录日志 |
| 文件上传 | ✅/❌ | 检查类型、重命名、移动到非执行目录 |
🧰 四、推荐工具辅助审计
| 工具 | 用途 |
| [PHPStan](https://github.com/phpstan/phpstan) | 静态分析,发现类型错误 |
| [Psalm](https://github.com/vimeo/psalm) | 高级静态分析 |
| [RIPS](https://rips-scanner.sourceforge.net/) | 自动化漏洞扫描(支持 PHP) |
| [PHPMD](https://phpmd.org/) | 代码质量与坏习惯检测 |
| [SonarQube](https://www.sonarqube.org/) | 多语言代码质量管理 |
✅ 总结
在进行 PHP 代码审计时,核心原则是:
🔒 信任用户输入?不!
✅ 一切输入都要过滤、验证、白名单。
✅ 一切输出都要转义。
✅ 一切敏感操作都要权限控制。
如果你有具体的源码想让我帮你审计,请贴出来(注意脱敏),我可以逐行分析漏洞并提供修复建议。
📣 商家广告:





0
IP地址: 13.217.26.244
搜索次数: 0
提问时间: 2025-11-06 00:15:29
🛒 域名购买:
81.biz
jc9.com.cn
zr.gs
97.gold
pf.gs
kkky.com.cn
37.com.hk
zf.gs
kxtf.cn
8.he.cn
❓️ 热门提问:
独立电商网站制作
租云服务器多少钱一台
emby媒体服务器
机房搬迁新闻稿
机房静电地板价格
一般的云服务器多钱
ct机房墙体厚度
gpu服务器和普通服务器
哪家服务器比较好
VPS Windows 服务器系统维护
豌豆Ai站群搜索引擎系统
🌐 域名评估:
Lanwa.cn
guzun.cn
tt.hl.cn
vu.gs
dji.sc.cn
mypettoy.store
5a.hi.cn
mxek.cn
sun.nx.cn
monee.org.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
一站式搜索平台
网站搜索
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。