PHP 7.4 业务代码常见漏洞包括时间戳解析失控(未判单位、缺@前缀、无范围校验)、文件包含绕过(伪协议未拦截、路径未归一化)、动态代码执行(eval/assert残留)、反序列化滥用、密码哈希与加密误用等,均属低修复成本但高风险的逻辑缺陷。

PHP 7.4 网站常见的源码漏洞,不是 PHP 引擎自身新爆的 CVE,而是开发者在业务逻辑中反复踩坑形成的“经典组合拳”。这些漏洞在 7.4 环境下依然活跃、可利用、且修复成本低——但容易被忽略。
时间戳解析失控
前端传 Date.now()(毫秒)给后端,PHP 却用 new DateTime($ts) 或 date('Y-m-d', $ts) 直接处理。结果:1712345678888 被当成“1712年”,而非 2024 年。
- 不校验单位:没判断字符串长度是 10 还是 13 位
- 不加 @ 前缀:
new DateTime($ts)是日期解析,new DateTime('@'.$ts)才是时间戳构造 - 不控范围:允许传入负数或超 2147483647 的值,可能绕过有效期检查
文件包含逻辑绕过include($_GET['page'] . '.php') 看似加了后缀,实则形同虚设。攻击者传 ?page=php://filter/convert.base64-encode/resource=config 就能直接泄露源码;传 ?page=../../../../etc/passwd%00 在部分配置下仍可截断生效。
- 白名单只校验文件名,不绑定绝对路径
- 没调用
realpath()验证真实位置,无法防御符号链接绕过 - 未显式拦截
php://,data://,phar://等伪协议
动态代码执行残留eval(), assert(), create_function() 虽已弃用,但在老项目中仍有残余。比如日志调试代码未删除、模板引擎拼接表达式、或错误地把用户输入喂给 preg_replace('/.*/e', ...)(即使 PHP 7.4 已废弃 /e 修饰符,某些兼容层仍可能触发)。
-
eval($_POST['code'])类写法仍是 RCE 最短路径 -
unserialize()处理不可信数据,配合 gadget 链可触发任意方法调用 -
system()/exec()参数未过滤,escapeshellarg()漏用或误用
加密与哈希误用
密码存储仍见 md5($pass)、sha1($pass),甚至 md5(md5($pass));敏感字段加密用 mcrypt_encrypt(PHP 7.2+ 已移除)或自写 XOR,无认证、无随机 IV、密钥硬编码。
- 密码哈希未用
password_hash()+password_verify() - 加密未选认证模式(如 AES-GCM),导致解密后无法验证完整性
-
random_bytes()调用前没检查返回值,弱随机数导致密钥可预测
这些漏洞共同特点是:不依赖 PHP 版本更新就能修复,只需改几行代码;但若放任不管,一个请求就可能读取配置、泄露数据库连接、甚至执行系统命令。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











