PHP实现批量删除挂马文件及页面内容替换脚本

Ada
Ada
发布时间:2026-10-13| 5人浏览过
原创

分享一个使用PHP编写的批量处理脚本,通过遍历指定目录及其子目录,对符合特定后缀名的文件进行字符串或正则匹配替换。该方法常被用于快速清除被黑客植入的恶意代码(如JS挂马链接)或在大型项目中统一替换废弃接口与文案,具备自动化程度高、操作直观的特点。

功能目标

本脚本的核心目的是解决以下两类问题:

  1. 安全应急:当网站遭遇批量注入攻击,文件中混入大量恶意脚本代码时,手动逐个修复效率极低。此工具可定位包含特定恶意特征码的文件并清除或替换。
  2. 批量重构:在更换域名、修改全局配置或规范代码风格时,需要成百上千个HTML/PHP/JS文件中统一更新某些片段,避免遗漏。

准备条件

  • 服务器环境需支持 PHP 运行,且当前运行用户(通常是 www-data 或 nobody)拥有目标文件夹及文件的写入权限。
  • 由于涉及文件覆盖操作,务必提前对整个站点目录进行完整备份。
  • 如果文件数量庞大,需要在 php.ini 中将 max_execution_time 设置得足够大,或直接使用脚本开头的 set_time_limit(3600); 防止中途超时中断。

第1步:脚本核心逻辑解析

脚本分为两部分:一部分是纯 PHP 后台处理逻辑,另一部分是前端的 HTML 表单交互界面。

在处理逻辑中,首先通过 explode("|", $shortname) 将用户输入的逗号分隔的文件后缀(如 php|htm)转换为数组 $arrext。随后进入遍历阶段:

  • 非递归模式(hx_dealdir):仅扫描根目录下的单层文件,利用 opendir() 和 readdir() 组合进行判断,筛选出目标后缀文件后读取内容。
  • 递归模式(hx_dirtree):遇到 "." 或 ".." 则跳过,若 is_dir() 为真则继续深入子目录,否则作为文件处理。这种深度优先搜索策略确保了能覆盖所有层级。

第2步:执行内容替换与校验

找到目标文件后,使用 file_get_contents() 读取原始内容。此时根据 isreg 参数决定替换方式:

  • 若未勾选正则,采用原生函数 str_replace($sstr, $rpstr, $body) 进行全量文本替换。
  • 若勾选了“使用正则表达式”,则调用 preg_replace($sstr, $rpstr, $body),这允许输入类似 </script><script src="http://evil.com/a.js"></script> 这样复杂的匹配规则来精准剔除木马。

替换后的内容存入 $body2,脚本通过比较 $body != $body2 确认是否发生过实际变动。若变动发生且新内容不为空,则进入保存环节;否则标记为 NO,不产生无效写操作。

第3步:安全写入新文件

在 tofile() 函数中,为了保证原子性操作并降低并发风险,脚本采取了一种较为保守的写入手段:

  1. 先检测文件是否存在,若存在则 unlink() 删除旧文件。
  2. 新建文件句柄并使用 fopen(..., "w")。
  3. 检查文件是否 is_writable(),若不具写入权限直接返回 false。
  4. 通过 fwrite() 将修正后的字符串写入磁盘,最后 fclose() 关闭句柄。

这种机制虽然比直接 file_put_contents 繁琐,但在某些严格限制的系统环境下提供了更明确的错误反馈。

第4步:部署与操作界面配置

将上述代码保存为一个单独的 PHP 文件(例如 batch_replace.php)。浏览器访问该页面后会看到一个简洁的控制台:

  • 起始根路径:默认值为 ./test。建议填写绝对路径(如 /var/www/html)以避免跨目录误伤或权限问题。末尾不要加斜杠,程序已做兼容修剪。
  • 文件扩展名:多个类型间用竖线 | 隔开,例如 php|html|js|css。
  • 替换内容选项:
    - “替换内容”框:填入要被清除的代码块。
    - “替换为”框:如果需要彻底删除,留空即可。如果需要更改链接地址,在此填入新的 URL。
    - 勾选“使用正则表达式”:开启高级匹配模式。

点击“开始执行操作”后,表单会通过 iframe 提交至自身,结果会实时滚动显示在当前页面底部,便于监控进度和排查异常。

完成判断与排错

成功标志:控制台列表项末尾显示 OK,且对应目录下文件的时间戳发生变更。

常见问题排查:

  • 权限不足:如果出现 wrong 或者没有反应,检查 Web 服务用户对目标文件夹是否有写权限(通常执行 chmod -R 755 /your/path 并在必要时调整属主)。
  • 乱码问题:脚本注释明确指出仅适用于 UTF-8 编码的页面。如果你的老系统使用的是 GBK,请先在终端用 iconv 命令转换全库编码后再运行此脚本。
  • 内存溢出:面对几十兆甚至上百兆的大型文件,file_get_contents 一次性读入可能会导致 PHP 内存耗尽。这种情况下建议改用分块流式处理,或对超大文件单独提取修复。

简要总结

以上关于PHP实现批量删除挂马文件及批量替换页面内容的详细内容,更多关于PHP批量文件处理优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。