检查用户访问路径的核心,是把“用户从入口到目标页面的完整跳转链条”拆开逐段验证:先确认入口页面是否被篡改,再确认跳转是否被劫持,最后确认落地页是否被替换或注入。假设你的网站首页正常,但用户从搜索引擎点进来后偶尔跳到博彩页面,那么问题很可能出在服务端跳转规则、被注入的脚本或DNS解析环节,而不是页面内容本身。
不要凭记忆判断,先构造一条能重复走的路径。例如假设某用户从搜索结果进入/news/2024/abc.html,再点击站内导航到/about。你需要分别记录:
用浏览器开发者工具的Network面板,勾选Preserve log,再走一遍路径。如果某一步出现你没有配置过的302,或者最终URL的域名不是你自己的,就说明路径被篡改。这一步的关键是保留完整记录,而不是只看最终页面。
查看入口页面的HTML源码,重点找三类痕迹:
<script>标签,尤其是外链域名陌生的脚本<iframe>或<div>,宽高为0或定位到屏幕外如果入口页面本身干净,但用户仍然被跳走,问题更可能在下游环节。
服务端跳转常见于.htaccess、Nginx配置、PHP文件或CMS插件。检查是否存在按User-Agent或Referer条件触发的跳转规则。假设某条规则写成:当Referer来自搜索引擎时,跳转到另一个域名。这种规则平时用浏览器直接访问不会触发,只有从搜索结果进入才出现,所以必须模拟真实来源。
可以用curl -I -e "https://www.example.com/" https://你的域名/入口路径查看响应头中的Location字段。如果返回302且Location指向站外,就定位到了跳转层。
落地页被黑的表现包括:标题和描述被改、正文被替换、页面底部多出大量外链、或者页面正常但加载了恶意脚本。对比备份文件或版本控制记录,能快速看出哪些行被改动。如果没有备份,至少对比同一模板下其他正常页面的结构差异。
第一个常见错误是只清浏览器缓存就下结论。缓存会掩盖服务端返回的真实内容,应使用无痕窗口或禁用缓存后再测。第二个错误是只检查首页。攻击者往往只针对特定入口路径或移动端User-Agent做跳转,首页可能完全正常。
判断结果可以按这个顺序收敛:如果入口源码有异常脚本,先处理注入;如果入口干净但响应头有站外Location,处理跳转规则;如果跳转正常但落地页内容被替换,处理页面文件或数据库。三项都正常,再考虑DNS解析是否被指向其他服务器。
完成一次完整路径记录后,立即把入口页面、跳转配置和落地页文件与最近一次可信备份做逐行对比,标记出所有非你本人修改的差异,再按差异位置逐项清除并重新验证同一条访问路径。