查PHP源码后门需从代码结构、运行行为和文件状态三方面综合判断:重点审查高危函数调用链(如eval($_POST['a']))、解码执行链(base64_decode→gzinflate→eval)、异常文件(mtime-7内新增.php)、权限(666/777)、隐藏文件(.user.ini/.htaccess)及日志高频可疑请求。

查PHP源码后门不能只靠搜几个关键词,得从代码结构、运行行为和文件状态三方面一起看。单纯用grep找eval或base64_decode容易漏掉混淆严重、动态加载、甚至藏在图片里的后门。
盯紧高危函数调用链
危险函数本身不等于后门,关键看它怎么被调用。重点不是“有没有”,而是“参数从哪来、有没有过滤”。
- 搜索
eval、assert、system、shell_exec、passthru、create_function、preg_replace(带/e修饰符)等,但必须结合上下文判断 - 特别注意参数来自
$_GET、$_POST、$_REQUEST、$_COOKIE、$_SERVER的调用,例如:eval($_POST['a'])或system($_GET['cmd']) - 警惕字符串拼接再执行的情况,比如
$func = 'sys' . 'tem'; $func($_GET['x']);,这种绕过静态扫描很常见 - 检查
include、require是否用了变量路径,如include $_GET['page'] . '.php';,这是本地/远程文件包含的典型入口
识别混淆与编码隐藏逻辑
现代后门极少明文写命令,多数靠解码还原后再执行。光看函数名没用,得把整条解码链跑通。
- 搜
base64_decode、gzinflate、str_rot13、urldecode、hex2bin等解码函数,尤其关注它们的返回值是否直接传给eval或assert - 遇到长base64字符串,复制出来用
echo base64_decode('xxx');在PHP CLI里快速解码验证 - 留意多层嵌套,比如
eval(gzinflate(base64_decode($a))),或用XOR异或还原后再执行 - 检查
call_user_func、array_map、usort等回调函数,恶意代码常伪装成回调参数传递执行
排查异常文件与系统痕迹
后门往往不在主业务文件里,而是躲在角落——新文件、改权限、藏配置、混进图片里。
- 用
find /var/www/html -name "*.php" -mtime -7找出最近一周新增或修改的PHP文件,优先审计 - 运行
ls -la查看文件权限,PHP脚本设为644或604即可,出现666或777要立即调查 - 检查隐藏文件:
ls -la | grep "^\.",重点关注.user.ini(可能含auto_prepend_file)、.htaccess(可能重写规则跳转到后门) - 留意伪装文件:如
logo.jpg.php、config.php.bak、cache.php~、xml.php(非框架默认命名) - 查看
php.ini中disable_functions是否被篡改,以及open_basedir、allow_url_include等关键安全项是否被开启
借助工具+日志交叉验证
人工审计效率低,工具能覆盖大量样本,但结果必须人工复核;日志则提供执行证据,补全静态分析盲区。
- 用
PHP-Backdoor-Finder或rkhunter做首轮扫描,导出报告后逐条确认,避免误杀(如Laravel的eval用于模板编译) - 部署
maldet对整个Web目录做深度扫描:maldet --scan-all /var/www/html - 查Apache/Nginx的
access.log,筛选含cmd=、shell=、eval、base64、超长GET参数或高频POST到小文件的请求 - 翻
error_log,看是否有Undefined variable、Failed to open stream等异常报错,有时后门执行失败会留下痕迹 - 比对Git版本:
git status和git diff看哪些PHP文件被悄悄改动,尤其是没提交记录的变更
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











