PHP代码审计常见漏洞模式 PHP代码审计常见漏洞模式代码审计是发现安全漏洞的重要手段。PHP代码中常见的漏洞模式有规律可循。今天说说审计中常见的漏洞模式。SQL注入模式。php// 危险的模式直接拼接SQL$sql SELECT * FROM users WHERE id . $_GET[id];$sql SELECT * FROM users WHERE name . $_GET[name] . ;// 安全的模式预处理语句$stmt $pdo-prepare(SELECT * FROM users WHERE id ?);$stmt-execute([$_GET[id]]);?XSS漏洞模式。php// 危险的模式直接输出用户输入echo $_GET[name];echo 欢迎 . $_POST[username];// 安全的模式转义输出echo htmlspecialchars($_GET[name], ENT_QUOTES, UTF-8);?文件包含漏洞模式。php// 危险的模式直接拼接文件路径include $_GET[page] . .php;require_once $_GET[file];// 安全的模式白名单控制$allowed [home, about];$page $_GET[page] ?? home;if (!in_array($page, $allowed)) $page home;include __DIR__ . /pages/$page.php;?命令注入模式。php// 危险的模式直接拼接命令exec(ping -c 1 . $_GET[ip]);system(echo . $_POST[input]);// 安全的模式转义参数exec(ping -c 1 . escapeshellarg($_GET[ip]));?文件上传漏洞模式。php// 危险的模式直接使用原始文件名move_uploaded_file($file[tmp_name], uploads/ . $file[name]);// 安全的模式验证类型并使用随机文件名$ext strtolower(pathinfo($file[name], PATHINFO_EXTENSION));$allowed [jpg, png, gif];if (!in_array($ext, $allowed)) die(不允许);$newName bin2hex(random_bytes(16)) . . . $ext;move_uploaded_file($file[tmp_name], uploads/ . $newName);?反序列化漏洞模式。php// 危险的模式反序列化用户输入$data unserialize($_POST[data]);// 安全的模式限制允许的类$data unserialize($_POST[data], [allowed_classes false]);?SSRF漏洞模式。php// 危险的模式直接请求用户提供的URL$content file_get_contents($_POST[url]);// 安全的模式限制协议和域名$url filter_var($_POST[url], FILTER_VALIDATE_URL);$host parse_url($url, PHP_URL_HOST);if (!in_array($host, [api.example.com])) die(不允许);?审计发现漏洞后要理解根因。是输入验证不严还是输出转义遗漏。修复时要考虑所有可能的绕过方式。安全不是一次性工作需要持续关注和更新。