WordPress 活动日志:如何查出谁在什么时候改了你的网站
WordPress 自己会记录什么,遗漏什么,一份好的活动日志应该保留什么,以及如何判断有人是否删除过其中的记录。
你的网站上多了一个没人记得添加过的管理员,或者一个插件不见了,没人知道是谁删的。问题是谁干的,什么时候干的。WordPress 能回答其中一部分。它会保留文章内容的修改历史,但不记录登录、插件安装或设置变更。这些需要活动日志,也就是把这类事件记下来的插件,而对于严重的事件,还要看主机商的服务器日志。
本文介绍不借助额外工具能看到什么,一份好的日志应该记录什么,为什么数据库里的普通日志可以被悄悄清空,以及如何发现这一点。
WordPress 自己记录什么
- 文章和页面的修订版本。 每次保存内容,WordPress 都会保留一个修订版本,附带作者和时间,除非主机商或开发者关闭了修订功能。你可以对比两个修订版本,并恢复较早的一个。
- 文章或页面的最后修改日期。
- 用户列表中每个账号的注册日期。
它不记录的内容:谁在什么时候登录,谁安装、更新或删除了插件或主题,谁更改了账号的角色,谁修改了设置。
服务器日志:没有活动日志时去哪里找
主机商有自己的日志:对网站的每一次请求,包含 IP 地址、时间和请求的页面。WordPress.org 的 WordPress 加固指南(2026 年 10 月 14 日更新版)指出,这些日志不会告诉你是哪个用户名登录的,但会显示 IP 地址、时间和执行的操作。
实际上,这意味着大量翻找:成千上万行,而且没有账号名。主机商保存它们的时间也有限,所以在需要之前先问清楚能保存多久。WordPress 内部的活动日志用直白的语言讲述同样的经过:账号、事件、时间、地址。
一份好的活动日志应该记录什么
- 成功和失败的登录,以及尝试次数过多之后的锁定,
- 新账号、角色变更和被删除的账号,
- 安装、更新、停用和删除的插件与主题,
- 主题切换和 WordPress 更新,
- 设置变更,尤其是安全设置,
- 扫描结果,如果日志是安全插件的一部分。
每条记录应该写明发生了什么、什么时候、来自哪个账号、哪个地址。
任何日志的弱点:它和网站在同一个数据库里
大多数活动日志把记录保存在网站的数据库里。能进入数据库的人,例如通过过期插件的漏洞,或用服务器上遗留的备份文件里的密码,可以删掉关于自己的记录。普通日志没有办法察觉少了什么,只是显示一段更短的历史。
有两种办法绕过这个问题:
- 把副本送出服务器。 记录一发生就发往外部服务或另一台服务器。这需要配置,而且往往是付费服务。
- 让改动可见。 这就是“防篡改可见”(tamper-evident)的意思。每条记录都有一个签名,由它自身的内容和上一条记录的签名计算得出,所用的密钥不保存在数据库里。修改某一条记录,或从中间删掉一条,会使此后的所有签名失效,检查会指出不再匹配的那条记录。
第二种办法并不能阻止别人删除记录。它给你的是删除发生过的证据。它也有局限:同时拿到数据库和存放密钥的文件的人,可以从头重新计算签名。所以对于严重的事件,主机商的日志仍然重要。
如何评判活动日志插件
- 记录存在哪里。 独立的数据表能容纳大量记录。把日志存成一个设置项、上限只有几百条的做法,很快就会丢掉较早的事件。
- 保存多久,能不能改。 保存期应该覆盖你实际发现问题所需的时间。再长就是无谓持有的数据。
- 能不能导出。 CSV 文件可以在电子表格里打开,也可以随工单一起发给开发者或主机商。
- 锁定记录会不会挤掉其他事件。 机器人一天可以制造成千上万次登录失败。如果每次都在同一个池子里算一条记录,重要的事件就会被挤出去。
- 对失败的登录保存什么。 有人会把密码误输入到用户名栏,所以保存每个输入名称的日志,最后可能存着密码的片段。IP 地址和账号名可能属于个人数据,因此日志应该只保留所需内容,并在设定期限后删除。关于 GDPR 与网站安全的文章对这方面有更多说明。
- 能不能发现对自身记录的改动。 插件的说明应该直截了当地写明这一点。
什么时候该打开日志
- 出现一个没人记得添加过的管理员,
- 首页看起来不一样,或把访客带去了别处,
- 有邮件说某个管理员账号被锁定,
- 你结束了与某家代理公司的合作,或有人离职,想看看他们最后做了什么。
导出日志,找到第一个异常事件,记下时间。有了这个时间,在主机商的日志里搜索会容易得多。在你信任的电脑上修改管理员和数据库密码。网站被黑的迹象介绍了入侵之后的第一个小时。
Ensomedia Security 的做法
Ensomedia Security 是我为 ShieldWave 做的一款免费插件,收录在 WordPress.org 目录中。它的日志叫“历史记录”,无需账号即可使用。以下事实来自它的介绍页和代码:
- 它记录扫描、发现和修复的问题、新管理员、更新、设置变更和锁定,
- 记录保存在它自己的数据库表中,
- 每条记录带有 HMAC-SHA256 签名,密钥是 wp-config.php 里的站点 auth salt(不在数据库中),签名中包含上一条记录的签名,
- “检查历史记录完整性”会告诉你是否有记录在 ShieldWave 之外被编辑或删除,截掉最新的几条记录也会被发现,
- 能写数据库、但读不了 wp-config.php 的人,无法在不被检查发现的情况下修改或删除一条记录,
- 锁定记录会合并汇总,并且不放进签名链:被编辑能发现,被删除则发现不了,
- 如果你更换了 wp-config.php 里的安全密钥,检查会提示较早的记录已无法验证,这是更换密钥(例如在入侵之后)的正常结果,
- 记录保留 7 到 730 天(默认 90 天),可以导出为 CSV,
- 对于失败的登录,只有当输入的用户名对应的账号存在时才保存该用户名,否则只保存它的带密钥哈希。
它不是完整的 Web 应用防火墙,也不会清除文件里的恶意软件。它所解释的改动由你、你的开发者或主机商去做。插件页面列出了它的其他功能,逐屏指南展示了如何在日常中阅读“历史记录”。
今天可以做什么
- 弄清你的网站到底有没有活动日志,从什么时候开始有的。
- 问主机商服务器日志保存多久。
- 决定你想把记录保留多久,并在日志里设好。
- 每月一次,过一遍管理员名单,并与日志对照。
从外部检测你的网站。 在 shieldwave.io 输入你的网址。大约需要 90 秒,不需要密码,也不需要安装插件。