Shell脚本监控网站页面关键词,检测页面劫持

网站页面被劫持或篡改是运维中常见的安全问题,轻则影响用户体验,重则导致搜索引擎降权。
通过 Shell 脚本定期抓取页面并检查关键内容是否缺失或异常,可以第一时间发现劫持迹象。
本文面向零基础用户,从准备到验证一步步讲解如何实现关键词监控,最终你能得到一个可定时运行、异常时发送告警的检测脚本。

准备工作:明确监控目标和环境

在动手写脚本前,先确定你要监控的页面 URL 和必须存在的关键词。
例如首页的标题、备案号、版权信息或某个核心功能词。
这些词正常时应该出现在 HTML 中,如果突然消失或被替换,就可能是被劫持。

你需要一台能访问目标网站的 Linux 服务器,并安装 curl 和 cron(大多数系统自带)。
检查命令:

which curl crontab

如果 curl 未安装,用包管理器安装,例如 apt install curl 或 yum install curl。

编写检测脚本:抓取页面并比对关键词

创建一个脚本文件,比如 /opt/check_hijack.sh,内容如下:

#!/bin/bash
# 网站页面关键词监控脚本
URL="https://你的域名.com"
KEYWORDS=("公司名" "备案号" "版权所有")
TMPFILE=$(mktemp)

# 抓取页面,-L 跟随跳转,-s 静默,--max-time 设置超时
curl -L -s --max-time 15 "$URL" -o "$TMPFILE"

# 检查 HTTP 状态码(可选但推荐)
HTTP_CODE=$(curl -L -s -o /dev/null -w "%{http_code}" --max-time 15 "$URL")
if [ "$HTTP_CODE" -ne 200 ]; then
    echo "警告:$URL 返回状态码 $HTTP_CODE" | mail -s "网站异常" admin@example.com
fi

# 检查每个关键词是否存在
for kw in "${KEYWORDS[@]}"; do
    if ! grep -q "$kw" "$TMPFILE"; then
        echo "警告:关键词 [$kw] 未在 $URL 中找到,可能被劫持或页面异常" | mail -s "关键词丢失" admin@example.com
    fi
done

rm -f "$TMPFILE"

关键点说明:

  • KEYWORDS 数组里填入你希望页面必须包含的文字,建议选择劫持者难以完全模拟的内容,比如备案号。
  • curl 的 --max-time 防止因网络卡死导致脚本挂起。
  • 邮件发送需要系统配置好 mail 命令,如果未配置,可以先将告警写入日志文件,例如 echo "..." >> /var/log/hijack.log。

保存后赋予执行权限:

chmod +x /opt/check_hijack.sh

设置定时任务:让脚本自动运行

使用 crontab -e 添加一行,比如每 10 分钟检查一次:

*/10 * * * * /opt/check_hijack.sh >/dev/null 2>&1

保存退出后,可以用 crontab -l 查看是否生效。
如果不想用邮件,可以把脚本中的邮件命令替换成写入日志,然后通过日志监控工具查看。

避坑指南:常见问题与优化建议

  • 关键词选择要谨慎:不要选太短或常见的词,否则劫持者只要保留这个词就能绕过检测。建议组合多个特征词。
  • HTTPS 证书问题:如果目标站点证书过期或自签名,curl 会报错。可加 -k 参数忽略证书验证,但仅建议在测试环境使用。
  • 页面动态加载:如果关键词是通过 JavaScript 动态渲染的,curl 抓不到。此时需要改用无头浏览器工具,如 puppeteer 或 playwright,但这超出 Shell 脚本范围。
  • 误报处理:网络抖动可能导致抓取失败,建议脚本中重试 2 次,或连续两次检测失败再告警,避免频繁误报。

验证效果:模拟劫持测试

脚本写好后,可以手动模拟关键词丢失来验证告警是否正常。
临时修改脚本中的 URL 为一个不存在关键词的页面,或者注释掉某个关键词的检查,运行脚本观察是否收到告警。

/opt/check_hijack.sh

如果配置了邮件,检查邮箱;
如果写日志,检查日志文件。
确认无误后,再将脚本恢复并放入定时任务。

常见疑问

问:脚本只能监控一个页面吗?
可以修改脚本,用循环处理多个 URL,把 URL 和关键词列表放在数组或单独的文件中读取。

问:没有邮件服务器怎么办?
可以用 Server 酱、钉钉机器人等 Webhook 替代邮件,只需将 curl 发送 POST 请求的代码替换掉 mail 命令即可。

问:多久检查一次合适?
根据网站更新频率和安全要求决定。一般 5-15 分钟一次能较好平衡及时性和资源消耗。

问:如何避免脚本被劫持者发现?
脚本本身放在服务器本地,不要公开访问。同时可以定期更换检查关键词和检查时间,增加绕过难度。

通过以上步骤,你已经能用 Shell 脚本监控网站页面关键词,及时发现页面劫持迹象。
建议先从简单的单页面监控开始,稳定后再扩展到多页面和多种告警方式。

分享到:
上一篇
Ansible inventory主机清单管理
下一篇
机房机柜接地电阻测试,安全验收标准
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意