发现网站出现异常跳转时,最稳妥的做法是先备份全站文件与数据库,随后重点排查模板文件与数据库内容中是否含有可疑的 JavaScript 或 iframe 代码。
先说结论:恶意跳转通常藏在模板文件或文章内容里,优先检查这两个地方能快速定位问题。
- 先判断:确认跳转是特定设备触发还是所有用户都会遇到
- 优先做:备份网站文件与数据库,防止误操作导致站点不可用
- 再验证:清理后使用不同浏览器和设备测试,确保代码完全清除
- 重点查:pbootCMS 需额外关注 ay_content 表及 {pboot:sql} 标签
命令速用版
如果你熟悉 Linux 命令行,可以通过以下命令快速检索模板目录中是否包含常见的跳转关键词。注意,这只能作为初步筛查,不能保证 100% 准确。
cd /www/wwwroot/your_site_path
grep -r -i -E "window.location|document.location|iframe|src=.*http" template/对于数据库内容,建议登录 MySQL 后使用以下 SQL 语句排查常见内容表(表前缀可能因安装而异,默认 ay_):
SELECT id, title FROM ay_content WHERE content LIKE '%<script%' OR content LIKE '%window.location%';
SELECT content FROM ay_single WHERE content LIKE '%<script%';为什么会这样
pbootCMS 这类开源 CMS 系统,攻击者通常利用模板文件权限配置不当或后台漏洞写入恶意代码。最常见的情况是黑客修改了公共模板文件,比如页脚或页头,这样全站页面都会加载恶意脚本。另一种情况是通过后台发布功能注入内容,只在特定文章页触发跳转。还有一种较隐蔽的手法是根据 User-Agent 判断,只对搜索引擎蜘蛛或特定手机设备展示跳转代码,普通电脑访问看似正常。此外,攻击者可能滥用 {pboot:sql} 标签在模板中执行恶意查询或输出。
分步处理
1. 全站备份
在动手修改前,务必打包下载当前的网站文件,并导出数据库。如果清理出错,可以立即还原,避免业务中断。
2. 检查模板文件
进入网站根目录的 template 文件夹,重点查看 common 目录下的 header.html、footer.html 以及 index.html。使用文本编辑器打开,查找是否有不明的 script 标签、base64 编码的字符串或陌生的域名链接。特别要注意是否含有异常的 {pboot:sql} 标签调用,如果发现可疑代码,不要直接删除,先复制保存以便后续分析,然后替换为官方原始文件。
3. 检查数据库内容
登录后台,查看最近发布的文章或单页内容。有些恶意代码会混在文章正文中。可以在数据库管理工具中搜索关键词如 script、eval、document,定位含有可疑代码的记录并清理。重点排查 ay_content(文章内容)、ay_single(单页内容)和 ay_label(自定义标签)表。
4. 检查核心文件
虽然较少见,但核心文件也可能被篡改。对比官方安装包中的 core 目录文件,检查是否有文件大小或修改时间异常的文件。不要随意删除核心文件,以免导致系统报错。
怎么验证是否生效
清理完成后,不要只在自己的电脑上看。建议使用浏览器的无痕模式,或者使用手机 4G 网络访问网站。如果之前是特定搜索引擎触发,可以使用搜索引擎的网页快照功能查看,或使用在线工具模拟不同 User-Agent 访问。观察页面加载过程中是否有瞬间的空白或跳转到陌生域名。
常见坑
1. 缓存未清除:服务器端或 CDN 缓存可能导致清理后仍然看到旧页面,验证前请先清除缓存。
2. 代码混淆:恶意代码可能经过 Base64 编码或拆分在不同文件,单纯搜索关键词可能漏掉,需要结合文件修改时间排查。
3. 权限未修复:清理后如果不修改文件权限,黑客可能再次写入。建议将模板文件权限设置为 644,目录 755,并确保属主正确,若无动态生成需求可设为只读。