php项目被入侵后首要动作是保现场而非删文件或重启,须按序隔离网络、固化内存与日志证据、定位后门入口、轮换密钥凭证、重建信任链。

PHP项目被入侵后,核心动作不是删文件、不是重启服务,而是“先保现场、再定责任、最后重建可信”。真正有效的响应,靠的是一套可立即执行的顺序动作:隔离网络影响 → 固定易失证据 → 定位后门与入口 → 轮换密钥与凭证 → 重建信任链。下面分四步说清楚怎么做、为什么这么做、哪些细节容易踩坑。
一、第一时间做隔离与证据固化
发现异常(如CPU飙升、异常外连、日志中出现base64_decode或eval调用)后,禁止直接登录服务器删文件或重启。这些操作会清空内存进程、断开网络连接、覆盖日志缓冲区——等于亲手销毁关键线索。
- 在防火墙/云安全组中立即限制入站:只放行你的运维IP,关闭所有业务端口(80/443/3306等),保留22端口供你管理
- 抢录当前易失性状态(建议一条命令执行):
ss -tunap > /tmp/net-$(date +%s).txt
ps auxf > /tmp/proc-$(date +%s).txt
last -20 > /tmp/login-$(date +%s).txt
lsof -i -P -n > /tmp/lsof-$(date +%s).txt - 若业务允许,优先对Web根目录、/var/log、/tmp、/etc/cron*、~/.ssh目录打包备份(tar -czf backup-$(date +%s).tgz /var/www/html /var/log /tmp /etc/cron* /root/.ssh)
二、从日志和文件中定位PHP后门
后门分析本质是“时间+内容+行为”三线交叉验证。不要依赖单一扫描工具,人工排查更可靠。
-
查访问日志中的可疑请求:重点关注含
base64_decode、eval、system(、shell_exec(、$_POST[、$_GET[的URL或参数,例如:
grep -E "(base64_decode|eval|system|shell_exec|POST\[.*\]|GET\[.*\])" /var/log/nginx/access.log | tail -50 -
查网站目录下的异常文件:找近24–72小时内新建或修改的.php文件,尤其是文件名随机(如
a1b2c3.php)、大小极小(find /var/www/html -name "*.php" -type f -mtime -3 -ls | grep -E "(upload|temp|cache|wp-content)" -
查定时任务与启动项:攻击者常通过crontab、systemd service或.bashrc注入持久化后门:
crontab -l
ls /etc/cron*/*
systemctl list-timers --all
cat ~/.bashrc ~/.profile /etc/profile | grep -E "(curl|wget|sh -c|base64)"
三、SSH密钥轮换与公钥指纹同步
入侵后必须重置所有远程访问凭证。仅改密码不够,旧密钥可能已被窃取;不更新客户端known_hosts,会导致后续连接反复报错“REMOTE HOST IDENTIFICATION HAS CHANGED!”。
- 在服务器上生成新主机密钥(重装SSH服务级信任):
sudo rm /etc/ssh/ssh_host_*
sudo dpkg-reconfigure openssh-server # Debian/Ubuntu
# 或手动重生成:
sudo ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N "" - 获取新主机公钥指纹并通知团队:
ssh-keygen -l -f /etc/ssh/ssh_host_ed25519_key.pub(记录SHA256值) - 客户端清理旧记录并验证:
ssh-keygen -R your-server-ip
ssh -o StrictHostKeyChecking=yes user@your-server-ip # 强制重新确认指纹 - 用户级密钥也需轮换:生成新ed25519密钥、用
ssh-copy-id上传、确认可用后,再从~/.ssh/authorized_keys中删除旧公钥行
四、可信重建:从代码到配置的闭环加固
重建不是回到原样,而是建立新的可信基线。重点在于切断入口、缩小权限、引入监控。
- 检查Web目录权限:确保PHP脚本不可写(
chown -R www-data:www-data /var/www/html,find /var/www/html -type f -name "*.php" -exec chmod 644 {} \;) - 禁用危险函数(在php.ini中):
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source - 启用OpenSSL AES-256-GCM加密敏感字段(如用户手机号、身份证号),避免明文落库;数据库连接使用独立账号,最小权限原则(仅SELECT/INSERT/UPDATE对应表)
- 部署文件完整性监控(如AIDE或自建inotify+hash校验),对
/var/www/html、/etc/cron*、/root/.ssh等关键路径做变更告警
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











