电脑网站被劫持怎么办

文章导读
先不要急着登上服务器改配置。电脑上看到的“网站被劫持”,通常只需要两步就能定性:换一部手机、切到移动流量访问同一个域名,如果手机访问正常,而只有这台电脑出现跳转或打不开,问题基本落在这台电脑的 hosts 文件、网卡 DNS 或浏览器上;如果手机也跳到同一个陌生页面,才需要去查域名解析记录和服务器上的 Nginx、站点代码。下面按照这个顺序,给出可以核对的位置和可以复制执行的命令。
📋 目录
  1. Ⅰ 网站被劫持怎么办才能解除
  2. Ⅱ 网站被劫持先定位在哪一层
  3. Ⅲ 网站被劫持:先看这四个位置
  4. Ⅳ 网站被劫持:按可能性从高到低排除
  5. Ⅴ 网站被劫持:改完怎么确认真的解决了
A A

先不要急着登上服务器改配置。电脑上看到的“网站被劫持”,通常只需要两步就能定性:换一部手机、切到移动流量访问同一个域名,如果手机访问正常,而只有这台电脑出现跳转或打不开,问题基本落在这台电脑的 hosts 文件、网卡 DNS 或浏览器上;如果手机也跳到同一个陌生页面,才需要去查域名解析记录和服务器上的 Nginx、站点代码。下面按照这个顺序,给出可以核对的位置和可以复制执行的命令。

判断电脑上的网站被劫持,核心是分清“单机异常”还是“站点异常”:换设备、换网络访问同一域名,只有本机异常,就先查 C:\Windows\System32\drivers\etc\hosts、网卡 DNS 和浏览器扩展;所有设备都异常,再查域名解析面板的 A/CNAME 记录与服务器配置。动手之前先把 hosts、Nginx 配置目录各做一份带日期的备份,改完用 nslookup/dig 与 curl -I 双向比对;要回滚,就是把备份文件覆盖回去,再执行 nginx -t 与 reload。该方法适用于自有站点和自己可控的电脑,公司网络或公共 Wi-Fi 下的异常还需要联系网络管理员。

网站被劫持怎么办才能解除

“能不能解除”对应的是排查流程里的第一步:确认劫持发生在客户端还是服务端。做法是用同一个域名做两次解析比对,一次走本机默认 DNS,一次指定一个公共 DNS,同时看 HTTPS 响应头里有没有陌生的跳转目标。

Windows 上打开 PowerShell,把域名替换成你自己的,逐条执行:

nslookup www.example.com
nslookup www.example.com 8.8.8.8
type C:\Windows\System32\drivers\etc\hosts
curl.exe -I https://www.example.com

Linux 或 macOS 终端里对应的是:

dig +short www.example.com
dig +short www.example.com @8.8.8.8
cat /etc/hosts
curl -sI https://www.example.com | head -n 8

判断依据很直接:两条解析命令返回的 IP 不一致,说明本机 DNS 或 hosts 被人为干预;两次一致但 curl 返回 301/302 到陌生域名,跳转来自服务器配置或中间设备;返回 200 但页面内容被插入脚本,则是站点文件层面的问题。这一步不能定死原因,但能排除掉一半的排查方向。

电脑网站被劫持怎么办

网站被劫持先定位在哪一层

先分层再动手,是为了避免在服务器上改了半天,结果真正的问题还留在本机。按由近到远排,通常分四层:

  • 本机文件层:hosts 文件(Windows 在 C:\Windows\System32\drivers\etc\hosts,Linux/macOS 在 /etc/hosts)。判断依据是这个文件里出现了你不认识的域名到 IP 的映射。
  • 本机网络层:网卡 DNS 设置和路由器 DHCP 下发的 DNS。判断依据是 ipconfig /all(Windows)或 cat /etc/resolv.conf(Linux)里的 DNS 地址不是你自己配置的,且和运营商默认值对不上。
  • 浏览器层:扩展程序、桌面快捷方式的目标参数、主页设置。判断依据是用无痕窗口访问同一域名,如果无痕下正常而常规窗口异常,问题就在扩展或缓存。
  • 域名与服务器层:域名解析面板记录、CDN 回源地址、Nginx 站点配置与证书。判断依据是其他设备在其他网络下访问结果同样异常。

四层里,只有第四层需要登服务器改配置,前三层在本机或面板上就能处理完。

网站被劫持:先看这四个位置

位置一,日志。浏览器侧打开开发者工具的 Console 和 Network 面板,看有没有向陌生域名发起的请求、有没有被注入的 script。服务器侧看访问日志,Nginx 的默认路径是 /var/log/nginx/access.log 和 error.log,宝塔面板安装的一般在 /www/wwwlogs/你的域名.log。在 access.log 里搜索陌生域名或可疑 referer,能看出跳转是不是服务器发出去的。

位置二,命令输出。除了前面的 nslookup 和 dig,证书也要单独看一次,确认站点返回的证书签发对象是不是你自己的域名:

openssl s_client -connect www.example.com:443 -servername www.example.com | openssl x509 -noout -issuer -subject -dates

签发对象对不上,说明链路上有设备替换了证书。

电脑网站被劫持怎么办

位置三,配置项。服务器上执行 grep 找异常注入,比逐行翻文件快:

grep -rn "可疑域名" /etc/nginx/ 2>/dev/null
grep -rn "return 302" /etc/nginx/conf.d/ 2>/dev/null

宝塔环境的站点配置一般在 /www/server/panel/vhost/nginx/ 下,路径不同的话以 nginx -t 输出的主配置为准。

位置四,面板字段。在域名解析面板核对 A 记录和 CNAME 记录指向的 IP 是否与服务器实际 IP 一致,顺便记下 TTL 数值,后面判断生效时间要用;在 CDN 面板核对回源地址和证书绑定域名;在服务器管理面板核对站点绑定的域名列表里有没有被加入别人的域名。

网站被劫持:按可能性从高到低排除

  1. hosts 被改(最常见)。确认动作:打开 hosts 文件,检查有没有指向陌生 IP 的记录。处理:删掉多余行并保存,保存前若无权限,先把文件复制到桌面改完再覆盖回去。
  2. 浏览器扩展或快捷方式被改。确认动作:用无痕窗口访问同一域名;右键桌面快捷方式看“目标”一栏末尾有没有附加网址。处理:禁用或卸载可疑扩展,删掉快捷方式重建。
  3. 本机或路由器 DNS 被改。确认动作:ipconfig /all 看 DNS 服务器地址,登录路由器管理页看 WAN 口 DNS。处理:改回自动获取,或手动填一个可信的公共 DNS,然后 ipconfig /flushdns 清缓存。
  4. 域名解析记录被改。确认动作:在解析面板比对 A 记录 IP 与服务器公网 IP。处理:改回正确记录,同时立刻修改域名注册商账号密码并开启二次验证,这一步比改记录本身更要紧。
  5. 站点被入侵。确认动作:grep 配置目录、比对站点文件的修改时间、检查最近新增的 PHP/JS 文件。处理:清理注入内容、修复入口漏洞、更换服务器与数据库口令,仅删文件不做漏洞修复,通常还会复发。
  6. 链路证书被替换。确认动作:用前面的 openssl 命令看签发对象。处理:这类问题多半超出个人可控范围,建议联系网络管理方,并使用 HTTPS 强跳转。

网站被劫持:改完怎么确认真的解决了

改完不要只看一次。先在两种网络、两台设备上各访问一次,再用命令做一次与服务端无关的独立校验:

电脑网站被劫持怎么办
dig +short www.example.com @8.8.8.8
curl -sI https://www.example.com | head -n 5
curl -s https://www.example.com | grep -c "可疑域名"

第一条返回的 IP 应与服务器公网 IP 一致,第二条的首行状态码和 Location 字段不应指向陌生地址,第三条计数为 0。观察时间上,建议至少覆盖一个完整的 DNS TTL 周期(在解析面板的 TTL 字段里能查到具体数值),并在 24 小时内不定时复测几次,无复现再视为稳定。TTL 未过期就断言“没生效”或者“已经修好”,都是判断过早。

回滚准备要在动手之前做好,改 hosts 和改 Nginx 都是如此:

cp -a /etc/hosts /root/hosts.bak.$(date +%F)
cp -a /etc/nginx /root/nginx.bak.$(date +%F)

需要回滚时执行 cp -a /root/nginx.bak.日期/. /etc/nginx/,再跑一次 nginx -t 确认语法无误,然后 systemctl reload nginx;hosts 文件回滚是 cp -a /root/hosts.bak.日期 /etc/hosts,随后 ipconfig /flushdns 或 systemd-resolve --flush-caches 清一次本地缓存。

最容易踩的坑是:把跳转原因查到了 CDN 或解析面板上,改完记录后立刻在本机刷新,发现还是老页面,就以为没改对,接着又去改服务器配置,把本来正常的配置也改乱了。多数情况只是本地 DNS 缓存和尚未过期的 TTL 在起作用。遇到这种现象,先用 dig 指定公共 DNS 查一次真实解析结果,再决定要不要继续改动。