PHP后门是攻击者入侵网站后留下的恶意脚本,其中数据库调用型后门通过读取数据库存储的恶意代码执行攻击指令,隐蔽性远高于普通文件型后门,给网站安全带来极大威胁。这类后门不会以独立文件形式存在,而是将恶意代码存储在数据库表中,通过正常的PHP文件调用数据库内容触发执行,常规的文件扫描工具很难检测到。

PHP后门的常见类型与特征
常见的PHP后门主要分为文件型后门和数据库调用型后门两类。文件型后门是直接以.php文件形式存在,通常包含eval、assert等可执行恶意代码的函数,部分会做混淆处理躲避扫描。数据库调用型后门则是将恶意代码存储在数据库的字段中,比如文章内容表、配置表、用户表等,通过正常的业务查询语句读取后执行,没有独立的恶意文件,排查难度更大。
数据库调用型后门的典型特征
- 网站根目录没有新增可疑PHP文件,但网站频繁出现未知异常请求
- 数据库中存在长度异常、包含PHP代码的字段内容
- 服务器访问日志中出现大量调用同一数据库查询接口的异常请求
- 网站配置被莫名修改,比如管理员密码、站点URL等被篡改
数据库调用型后门的定位方法
第一步:排查数据库异常内容
首先登录网站数据库,重点检查存储配置信息、文章内容、用户自定义数据的表。可以通过搜索PHP常见恶意函数的方式定位可疑内容,比如搜索eval、base64_decode、assert等关键词。以下是MySQL数据库排查的示例SQL语句:
-- 搜索包含eval的字段内容,替换table_name为实际表名,column_name为实际字段名 SELECT * FROM table_name WHERE column_name LIKE '%eval%'; -- 搜索包含base64_decode的字段内容 SELECT * FROM table_name WHERE column_name LIKE '%base64_decode%'; -- 搜索包含assert的字段内容 SELECT * FROM table_name WHERE column_name LIKE '%assert%';
如果发现字段内容中存在类似<?php eval($_POST['cmd']);?>的内容,基本可以确定是数据库存储的恶意代码。
第二步:追踪触发恶意代码的PHP文件
找到数据库中的恶意内容后,需要定位哪些PHP文件会读取并执行这些内容。可以检查网站中负责查询数据库的代码,重点看查询后是否直接对结果进行代码执行操作。比如以下代码就存在风险:
<?php
// 连接数据库
$conn = new mysqli('localhost', 'db_user', 'db_pass', 'db_name');
// 查询配置表中的配置项
$result = $conn->query("SELECT config_value FROM config WHERE config_key = 'site_setting'");
$row = $result->fetch_assoc();
// 直接执行查询到的内容,存在风险
eval($row['config_value']);
?>
这类代码中,如果config_value字段被插入恶意代码,就会触发后门执行。可以通过全局搜索eval、assert等函数,结合数据库查询代码定位到具体的触发文件。
第三步:分析服务器访问日志
查看服务器访问日志,寻找频繁访问触发文件的异常IP和请求参数。如果发现某个IP反复向特定接口发送包含cmd、code等参数的POST请求,且对应的接口会查询数据库内容,就可以进一步确认后门的触发路径。
PHP后门的安全移除步骤
1. 清理数据库中的恶意内容
确认数据库中的恶意字段后,直接删除或修改对应的字段内容,替换为正常的业务数据。操作前一定要先备份数据库,避免误删正常数据。清理后可以用之前的SQL语句再次排查,确保没有残留的恶意内容。
2. 修复触发后门的PHP代码
找到触发恶意代码执行的PHP文件后,修改代码逻辑,禁止对数据库查询的结果直接进行代码执行操作。如果业务确实需要动态执行部分代码,要对输入内容进行严格的白名单校验,避免执行未授权的代码。修改后的代码示例如下:
<?php
$conn = new mysqli('localhost', 'db_user', 'db_pass', 'db_name');
$result = $conn->query("SELECT config_value FROM config WHERE config_key = 'site_setting'");
$row = $result->fetch_assoc();
// 白名单校验,只允许执行预定义的安全配置
$allowed_configs = ['site_name', 'site_desc', 'site_keywords'];
if(in_array($row['config_value'], $allowed_configs)){
// 正常业务逻辑
echo $row['config_value'];
}
?>
3. 排查并清理其他潜在后门
移除数据库调用型后门后,还要用专业的PHP后门扫描工具扫描整个网站目录,排查是否存在其他文件型后门,同时检查服务器是否有新增的计划任务、可疑进程,避免攻击者留下其他后门通道。
4. 加强网站安全加固
后门清理完成后,要及时更新PHP版本、网站程序版本,修改数据库密码、服务器登录密码,关闭不必要的端口和服务,配置Web应用防火墙,避免网站再次被入侵植入后门。
注意事项
清理后门前一定要先备份网站文件和数据库,避免操作失误导致网站数据丢失。如果不确定某个文件或数据库内容是否为恶意内容,可以先在测试环境验证,或者咨询专业的安全人员,不要盲目删除。日常要定期备份网站数据,开启访问日志和错误日志,便于及时发现异常入侵行为。