网站安全巡检不是等被黑了才去做的应急动作,而是把风险消灭在登录日志、文件哈希和权限表里的日常习惯。真正有效的巡检流程,核心不是“检查一遍有没有问题”,而是建立一套可重复、可追溯、能提前暴露异常的操作序列。下面直接拆解一套适合中小网站和运维团队落地的日常安全巡检流程,以及每个环节真正值得盯住的风险点。

第一步:先看登录入口和后台账户,异常往往从这里开始

每天巡检的第一件事,不是扫漏洞,而是查后台登录记录。绝大多数网站被拿下,都是从弱口令、撞库或者已泄露的管理员账号开始的。登录入口的巡检要关注三件事:是否有非工作时间段的登录、是否有陌生IP尝试登录、是否存在同一账号短时间多次失败后突然成功的情况。

具体操作上,如果是WordPress、织梦、帝国CMS这类常见系统,登录日志通常在后台的“安全记录”或“登录日志”模块里。如果是自研系统,直接查数据库中的登录表。重点筛选条件可以设置为:登录时间在凌晨0点到6点之间、登录IP归属地与管理员常用地不符、失败次数大于5次后成功登录的记录。发现这类记录,不要只改个密码了事,要立即检查该账号是否被创建了新的管理员、是否上传了可疑文件、是否修改了核心文件。

另外,后台路径本身也需要巡检。很多网站被扫描爆破,是因为后台入口用的是默认路径,比如/admin、/wp-admin、/dede。日常巡检时要确认后台是否已做路径修改、是否限制了访问IP、是否开启了验证码或二次验证。如果条件允许,后台登录地址只允许公司出口IP或特定VPN网段访问,这是成本最低但效果最直接的防护。

第二步:文件变动巡检,重点不是“多了什么”而是“改了什么”

网站被入侵后,攻击者通常会做三件事:上传Webshell、篡改已有文件插入恶意代码、修改配置文件获取更高权限。因此日常文件巡检的核心,是比对文件的变化,而不是简单看目录里有没有不认识的文件。

最实用的方法是建立文件基线。上线或确认网站干净时,对全站文件生成一次哈希值清单,可以用系统自带的工具完成。例如在Linux服务器上执行:

find /var/www/html -type f -exec md5sum {} \; > /root/site_baseline.md5

之后每天巡检时重新生成一次当前文件哈希,并与基线对比:

md5sum -c /root/site_baseline.md5 --quiet

输出中出现的FAILED就是被修改过的文件,新增的文件则需要单独用find配合时间参数查找,例如查找最近24小时内新增或修改的PHP文件:

find /var/www/html -name "*.php" -mtime -1

这里有一个很容易被忽略的细节:攻击者经常把Webshell文件名伪装成正常的缓存文件、日志文件或者图片名,比如命名为cache.php、config.bak.php、logo.jpg.php。所以巡检时不能只看后缀,还要看文件内容。对于任何近期变动的PHP、JSP、ASPX文件,要打开检查是否有eval、base64_decode、system、exec、shell_exec等危险函数,以及是否存在大段混淆编码。

配置文件也需要单独巡检,尤其是wp-config.php、config.php、.htaccess、web.config这类文件。攻击者可能在其中插入自动跳转代码、劫持流量、或者添加隐藏的后门规则。检查时重点看是否有陌生的define、include、require、RewriteRule,以及数据库连接信息是否被篡改。

第三步:权限与计划任务检查,很多后门藏在这里

文件权限巡检经常被忽视,但它决定了攻击者拿到低权限后能走多远。日常巡检要确认网站目录和文件的属主、属组是否合理。通常网站文件属主应为专门的运行用户,而不是root。上传目录、缓存目录、日志目录的权限要严格控制,尤其是上传目录,绝对不能有执行权限。

在Linux下可以用以下命令快速查看权限异常的目录:

find /var/www/html -type d -perm -o+w

这条命令会列出所有其他用户可写的目录。如果上传目录、缓存目录之外出现了可写目录,就要人工确认是否被篡改。同时检查上传目录是否真的禁止了脚本执行,可以在上传目录放一个测试用的PHP文件,然后通过浏览器访问,看是否会被解析执行。如果被解析,说明服务器配置存在严重问题。

计划任务是另一个高价值巡检点。很多Webshell为了维持权限,会在系统中添加定时任务,定期从远程下载恶意文件或执行反弹命令。Linux下检查当前用户和root用户的计划任务:

crontab -l
crontab -u root -l
ls -la /etc/cron.d/
ls -la /var/spool/cron/

Windows服务器则检查“任务计划程序”中是否存在陌生任务。巡检时看到不认识的计划任务,尤其是执行路径指向/tmp、/var/tmp、上传目录、或者包含curl、wget、powershell、cmd等命令的任务,要立即排查。

第四步:数据库与用户权限巡检,防止横向渗透和拖库

数据库是网站的核心资产,日常巡检要确认数据库账号权限是否最小化。很多网站为了方便,给网站连接账号赋予了root或sa权限,这导致一旦网站被SQL注入或拿到数据库配置,攻击者可以直接读取所有库表甚至执行系统命令。

巡检时要检查网站配置文件中的数据库账号,确认该账号只拥有当前网站数据库的增删改查权限,不具备创建用户、修改权限、访问系统库的权限。MySQL下可以用以下命令查看账号权限:

SHOW GRANTS FOR 'website_user'@'localhost';

如果看到GRANT ALL PRIVILEGES或者包含FILE、SUPER、SYSTEM_VARIABLES_ADMIN等权限,就需要立即收紧。同时检查数据库中是否存在陌生的管理员账号、陌生的数据表、或者被篡改的字段。很多黑帽SEO攻击会在数据库中插入隐藏链接、弹窗代码、或者修改管理员密码。

另外要关注数据库的远程访问配置。除非业务必须,数据库的3306、1433端口不应对外开放。巡检时可以用netstat命令查看数据库端口是否监听在公网IP上:

netstat -tlnp | grep 3306

如果监听在0.0.0.0或公网IP上,说明数据库暴露在公网,需要立即修改为仅监听内网地址。

第五步:网站核心页面与功能点巡检,发现黑链和篡改

文件层面的检查能发现很多问题,但有些攻击只修改数据库内容或缓存,不直接改文件。因此日常巡检还需要从网站前端进行抽查。重点检查首页、栏目页、文章页的源代码,看是否存在隐藏的链接、iframe、script标签,尤其是那些指向陌生域名或包含赌博、色情、博彩关键词的内容。

黑链的常见特征是使用CSS将链接隐藏,例如设置display:none、position:absolute、text-indent:-9999px,或者使用与背景色相同的字体颜色。巡检时可以直接查看网页源代码,搜索“display:none”“visibility:hidden”“text-indent”等关键词,再结合链接的href属性判断是否为恶意链接。

同时要检查网站的搜索功能、留言板、注册登录等交互功能是否正常。攻击者有时会通过注入或XSS漏洞在这些页面插入恶意脚本,导致用户访问时被跳转到钓鱼页面。巡检时可以在搜索框输入特殊字符,观察返回结果是否异常,或者查看页面源代码中是否出现了未预期的script标签。

第六步:日志与流量异常巡检,发现扫描和攻击行为

服务器日志和网站访问日志是发现攻击行为的重要来源。日常巡检要关注Web服务器日志中是否存在大量404请求、异常POST请求、SQL注入特征字符串、以及扫描器特征。例如日志中出现大量针对/wp-admin、/phpmyadmin、/admin.php的请求,说明网站正在被扫描爆破。

可以用以下命令快速统计访问量最高的IP:

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20

对于访问量异常高的IP,进一步查看其请求的具体路径,判断是否为恶意扫描。如果发现某个IP在短时间内请求了大量不存在的路径,或者反复尝试登录,可以直接在防火墙层面封禁。

同时要关注日志中是否出现SQL注入特征,例如union select、sleep(、benchmark(、information_schema等关键词。这些请求即使没有成功,也说明有人在尝试攻击,需要提前加固相关功能点。

第七步:备份可用性验证,这是最后的底线

很多网站做了备份,但从来没验证过备份能不能用。日常巡检中,备份验证必须作为固定环节。定期从备份中随机抽取一个时间点,在测试环境中恢复,确认数据库和文件都能正常还原,网站可以正常访问。

备份巡检要关注三点:备份是否完整、备份是否存储在独立位置、备份是否加密。如果备份和网站放在同一台服务器上,攻击者拿到服务器权限后可以同时删除备份,备份就失去了意义。因此备份应存储在独立的存储设备、对象存储或异机服务器上。同时备份文件本身也要加密,防止备份泄露导致数据外泄。

巡检时还要记录备份的生成时间、大小、恢复测试结果。如果发现备份连续失败或者备份文件大小异常变小,要立即排查原因。很多勒索攻击会先破坏备份,再加密网站文件,因此备份异常往往是攻击的前兆。

第八步:形成巡检记录与异常处理闭环

巡检不是走过场,每次巡检都要留下记录。记录内容包括巡检时间、巡检人、检查的项目、发现的问题、处理措施、未解决的问题及原因。这份记录有两个作用:一是方便追踪问题是否重复出现,二是当发生安全事件时可以快速回溯时间线。

建议将巡检项做成清单,每天按清单逐项打勾。清单可以包括:登录日志检查、文件哈希比对、新增文件检查、权限检查、计划任务检查、数据库权限检查、前端黑链检查、日志异常分析、备份验证。每项后面标注正常或异常,异常项填写具体情况和处理结果。

对于发现的问题,要建立闭环处理机制。小问题当天解决,大问题升级处理,处理完成后验证修复效果,并在记录中更新状态。如果同一个问题反复出现,说明底层防护存在缺陷,需要从配置、代码或架构层面根治,而不是每天重复做表面处理。

日常安全巡检的真正价值,在于通过高频的、标准化的检查动作,让攻击者的任何异常行为都能在最短时间内被发现。它不需要高深的技术,但需要严格的执行和持续的优化。把上述八个环节固定下来,每天花半小时到一小时执行,网站被入侵后的损失会大幅降低,甚至很多攻击在尝试阶段就会被拦截。