Linux 软件免费装
Banner图

Dragon Activity Log - Audit Log, User Activity Tracking & Security Audit Trail

开发者 dragoncoreltd
更新时间 2026年10月10日 12:49
PHP版本: 8.0 及以上
WordPress版本: 7.1
版权: GPLv2 or later
版权网址: 版权信息

标签

security activity log audit log user activity audit trail

下载

1.0.16 1.0.15 1.0.17 1.0.19 1.1.0 1.0.12 1.0.13 1.0.14 1.0.18 1.0.20 1.0.21

详情介绍:

Dragon Activity Log records what happens on your WordPress site in a fast, searchable audit trail that lives in its own database table. Unlike a plain event list, it shows the field-level change for the fields listed below (the old role and the new role, the old setting value and the new one, a renamed title or slug), and it links every event to the one before it with a SHA-256 hash so that a later edit or deletion of the log can be detected. Everything in this plugin is free and fully functional: every event type, no cap on the number of events stored, any retention window including "keep forever", all filters and search, live updates, integrity verification, one-click rollback of settings and role changes, full before/after diffs, security alert emails, CSV and JSON export, WooCommerce events, and the WP-CLI commands. (Individual values in the change detail of a log row are shortened at 500 characters; the full diff keeps the whole value.) Why Dragon Activity Log What gets logged WP-CLI

安装:

  1. Upload the dragon-activity-log folder to /wp-content/plugins/, or install it from the Plugins screen.
  2. Activate the plugin through the Plugins screen in WordPress.
  3. Go to Tools > Activity Log. Events start recording immediately; the Settings tab holds retention and privacy options.

屏幕截图:

  • Filtering the log by object type, event, severity and date.
  • Integrity tab: verifying the tamper-evidence hash chain and anchoring the chain head off-site.
  • Settings tab: retention, IP privacy controls, chain anchor and excluded roles.

升级注意事项:

1.0.21 Closes a way to hide an edited event from the integrity check and the off-site anchor. Retention cleanup now checks the chain first and pauses if it is broken. Recommended for everyone. 1.0.20 Fixed: changes to secret settings are logged again, with the values hidden. 1.0.19 Anchor checks are harder to fool, and settings from the very first release carry over. 1.0.18 Reliability fixes for the audit log and anchor checks. 1.0.17 Translation-ready throughout, with clearer log details. 1.0.14 WordPress.org listing text only. No functional changes. 1.0.13 One-time WordPress.org review prompt on the plugin screen. No other changes. 1.0.12 Off-site chain anchoring and Site Health tests. Turn the anchor on under Settings > Chain anchor. 1.0.11 Secret-shaped settings values are never read by the log. No data changes. 1.0.10 Screen Options for the log, and sealing keeps working on databases without advisory locks. No data changes. 1.0.9 The three Tools menu entries become one tabbed Activity Log screen. Old links redirect; no data changes.

常见问题:

Does this slow down my site?

Logging is a single indexed database write per action. The tamper-evidence hashing runs separately: an hourly WP-Cron job, plus a short end-of-request pass on roughly one request in twenty (capped at 200 events and two seconds) after the page has been generated.

How does the tamper-evidence work?

Each event stores a SHA-256 hash computed over its own contents plus the previous event's hash, forming a chain. Editing or deleting any event breaks the chain from that point on, and the integrity check reports the first broken link. This is tamper evidence: it detects edits and deletions made outside the plugin, it does not prevent someone with database access from making them. Use it alongside normal access control and backups.

What can the integrity check not catch?

Two things, by design. First, events are hashed into the chain by a background pass (hourly, plus a short end-of-request pass), so a row deleted before it is sealed leaves no trace; on a quiet site without WP-Cron traffic that window can be up to an hour. Second, someone with write access to your database who also recomputes every later hash and the stored chain head can hide an edit from the self-check. That is what the off-site anchor is for: compare the log against an anchor you received earlier and such a rewrite is caught. Clearing the log or erasing someone's data rebuilds the chain; the event that records it says whether the chain was intact beforehand.

How does the off-site anchor work?

On the Settings tab, choose daily or weekly. On that schedule the plugin seals the chain and emails the chain head (an event number and a hash, never any event data) to the address you choose; ideally one outside this site. You can also have it posted to an https webhook you control, signed with a per-site secret. Keep those messages. At any time, paste an anchor reference into Integrity > "Compare with an anchor" (or run wp dragon-activity-log verify --anchor=<reference>): the plugin recomputes the chain up to that event and confirms it still produces the anchored hash. "Send anchor now" takes one immediately. When the anchored events are no longer in the log because retention cleanup, Clear log or a privacy erasure removed them, the check cannot be completed. It says so and names the event in the log that recorded the removal, with its date, so you can confirm it was one you made. It never reports such an anchor as a match. On the command line, a match exits with 0, an anchor that cannot be checked exits with 2, and anything else (a mismatch, a broken chain, a busy or unreadable log) exits with 1. The webhook must use https, and redirects are not followed. The signing secret is stored encrypted and shown on the Settings tab so your receiver can verify the X-Dragon-Signature header.

What can be rolled back?

Open "Full details" on a log row. A changed setting can be put back to its previous value, and a role change can be undone (the roles it took away are given back and the roles it gave are taken away, nothing else). The rollback is refused, with the reason, when the setting or the user's roles have changed again since the event, when it was already rolled back, when the previous value held a hidden secret or data that cannot be stored exactly, when you are not allowed to give that role, or when it would take away your own permission to change roles. A change that created a setting is not rolled back (that would delete the setting), and neither is a change that deleted one (a deleted setting is not re-created). After a permalink setting (the permalink structure, category base or tag base) is restored, WordPress rebuilds its permalink rules on the next page load; when the restore leaves plain permalinks, the dialog asks you to save Settings > Permalinks once so the server's rewrite rules are written too. Restoring a setting needs the Manage options permission (on a network, the super admin's Manage network options), and undoing a role change also needs permission to change that user's role. Every rollback is recorded in the log, even when your role is excluded from logging. Post edits and trashed posts are not rolled back here: use WordPress's own revisions and Trash. Rollback is available for changes recorded since version 1.1.0, because the previous value is kept from that version on.

How do the security alerts work?

Switch them on under Settings > Security alerts and pick which ones you want. A new-address alert is sent when a user logs in from an address that is not among the last 20 they used on this site; their first login only starts that list. It uses the address the log records, so with IP capture off there are no new-address alerts and with anonymization on only a new masked address counts. A burst alert is sent when one address reaches the number of failed logins you set (5 by default) inside the window you set (5 minutes by default); an IPv6 address counts together with the rest of its /64 network. At most one burst alert is sent per window for the whole site: addresses that reach the limit in the meantime are listed in the next burst alert (up to 10, plus a count of the rest), and every failed login is in the log anyway. To count the attempts, the connecting address is kept as a hashed key that expires with the window, even with IP capture off; the alert, and the list held for the next one, show addresses only when capture is on. An administrator alert is sent when a user is given the administrator role, or super admin on a network. Alerts go to the site admin email unless you list up to 10 addresses, and are sent at the end of the request through your site's normal email delivery. A failed delivery is recorded in the log, at most once an hour.

Does the plugin send data anywhere?

Not to us or to any third party. Events are stored in dedicated wp_dal_events and wp_dal_snapshots tables in your own database. The only things that ever leave your site are the optional off-site anchor described above (an event number and a hash), to the email address and webhook you configure, and, if you switch them on, security alert emails to the addresses you choose.

Which IP address is recorded?

By default the connecting address (REMOTE_ADDR). Proxy headers such as X-Forwarded-For are ignored unless you enable "Trust proxy headers", because visitors can forge them. You can also anonymize IP addresses or turn capture off entirely.

Can I keep events forever?

Yes. Set the retention to 0 days on the Settings tab.

What is not logged?

Editor autosaves, background (cron) option writes other than core settings, the plugin's own bookkeeping options, first/last name, nickname and biography changes (email, display name, URL, password and roles are covered), network-wide (multisite) settings, and the success of each package in a bulk plugin or theme update (the update run is recorded per requested package). Settings that plugins use for their own bookkeeping are skipped too: names containing _cache or _last_, or ending in _version, db_version or _lock, the options WordPress writes during a theme switch, and the routine licence re-checks that Dragon Core's paid add-ons save. When "Trust proxy headers" is on, the address appended by the single proxy in front of the site is used (a port it appends is ignored); chains of several proxies are not walked.

What is redacted?

Option and field names that look like secrets are recorded as "[redacted]" and their values are never read by the plugin: anything containing password, pass, pwd, secret, token, auth, nonce, salt, private, api, license, licence or credential, or containing _key. Password changes are recorded as "(changed)", never the hash. In the log row, a post body is only flagged as changed and settings stored as JSON or serialized text are summarised like arrays. For the full diff and rollback, a copy of the state before and after the change is kept in the separate wp_dal_snapshots table: for posts the title, content, excerpt, status, type and slug; for settings the whole value. Settings whose name looks like a secret (the list above, plus key) and the anchor webhook address are never copied. Inside a setting's value, and before a change is handed to other code listening for events, nested keys with a secret-shaped name segment (for example api_key, smtp_pwd, client_secret, access_token, Authorization) are replaced by "[redacted]", and a value holding such a key is never rolled back. Serialized values that refer to themselves are redacted whole, and nested keys ending in key, pass or passphrase count as secret too. A side larger than 256 KB is not kept. On a network, the full value of a setting is shown only to super admins. Each copy is deleted with its event: by retention cleanup, Clear log or a privacy erasure. The anchor webhook address is recorded as its host only. The username typed into a failed login is recorded as typed. For the new-address alert, the last 20 login addresses of each user are kept as user data on each site; they are included in personal data exports and removed by erasure requests.

更新日志:

1.1.0 1.0.21 1.0.20 1.0.19 1.0.18 1.0.17 1.0.16 1.0.15 1.0.14 1.0.13 1.0.12 1.0.11 1.0.10 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0