背景
某天在 Google Search Console 中收到提示:Alternative page with proper canonical tag
在GSC点开链接后发现一个异常现象:
- 从 GSC 示例链接点击 → 页面被 重定向到陌生网站
- 复制同一个 URL 到浏览器直接打开 → 页面完全正常
- 普通用户访问 → 正常
- Chrome 无痕 / 插件全关 → 正常
关键特征
感谢有GPT帮助理清思路,我做了如下测试
- 普通访问没问题
- 本地浏览器看不到异常
- 只有 Googlebot / GSC Live Test 会跳转
-
curl使用 Googlebot UA 访问,返回的已经不是本站内容 - CloudPanel 下 多个站点同时出现异常
这已经明确指向:服务器级 cloaking(搜索引擎定向劫持)
排雷顺序
Step 1:用curl直接验证是否是服务器级跳转
curl -v -A "Googlebot/2.1 (+http://www.google.com/bot.html)" \
https://example.com/?ff=123
此处看到的并不是我自己网站的内容,而是陌生网站。至此说明是服务器层面的跳转!
Step 2:立刻检查 PHP 全局auto_prepend_file(此处并没有发现问题)
php -i | grep auto_prepend_file
如果输出不是 no value,而是类似:
auto_prepend_file="data:;base64,PD9waHAKZXZhbC..."
说明是PHP层面的文件注入。这个场景的GPT推荐的,但是我这里并不是PHP层面注入,因此走向下一步。
Step 3:确认注入位置(CloudPanel 场景)
根据GPT建议我继续筛查php fpm的注入
grep -R "auto_prepend" /etc/php/*/fpm/pool.d/
grep -R "prepend" /etc/nginx /etc/php
此时看到这样的内容:
auto_prepend_file="data:;base64,PD9waHAKZXZhbChnemluZmxhdGUoYmFzZTY0X2RlY29kZ..."
然后我把base64进行解密,看到:
<?php
eval(gzinflate(base64_decode(str_rot13('iIy7H+CVRs+sX...
这是典型的注入
Step 4:清除注入并重启PHP-FPM
# 备份
cp /etc/php/7.3/fpm/php.ini /etc/php/7.3/fpm/php.ini.bak
# 注释或删除 auto_prepend_file
# auto_prepend_file="data:;base64,..."
# 重启
systemctl restart php7.3-fpm
Step 5:立即复测
curl -v -A "Googlebot/2.1 (+http://www.google.com/bot.html)" \
https://example.com/?ff=123
此时已经返回正常内容。
为什么这个问题如此隐蔽?
因为它满足了所有“最难发现”的条件:
- 只对 搜索引擎 UA 生效
- 前端 JS 根本没机会执行
- WordPress core / 插件 / 主题全部是清白的
- 多站点同时中招
- Google Search Console是唯一指征
当然为了发现这个问题,gpt也引导我走了一些弯路:
- 反复查 wp core,甚至重装wp
- 禁插件,禁主题
- 怀疑 Cloudflare
- 怀疑DNS绑架
- 怀疑自己浏览器的插件,VPN等
结语
这是一次典型的 SEO Cloaking / PHP全局注入 案例。
真正的教训不是“漏洞多高级”,而是思路能否正确,并推动排查往前走。希望这篇记录能帮你少走弯路。
Comments