Database scanning, for the malware that doesn’t live in files.
Half of modern WordPress malware hides in the database, where file scanners never look. Guardian Gaze scans your tables for injected scripts, hidden admins and re-infection hooks.
Availability: in the free plugin on WordPress.org: no account, no licence key · Database malware scanning
Security score
- FirewallProtected
- Backdoor detectionClean
- Malware scanClean
- Audit logMonitored
- Login securityProtected
- Vulnerability scanClean
The plugin view: findings, severity and next steps inside the WordPress admin
Database Scanning at a glance
wp_options
The site-settings table. Common infection sites: injected scripts loaded by wp_head, malicious redirect URLs, stage-two loaders, backdoor configurations, fake plugin auto-loaders. We read both serialised and plain values.
wp_posts
Posts, pages and any custom post type. Common infections: SEO spam pages, injected iframes, hidden links inside legitimate posts, redirect URLs in post_content, attacker-controlled custom post types.
wp_postmeta
Per-post metadata, often serialised. Attackers hide payloads here knowing most scanners don’t unwrap PHP-serialised data. We deserialise every row before analysis.
The malware that survives a filesystem cleanup
A site gets cleaned. Every infected PHP file is found, removed and replaced from a known-good copy. The scanner reports clean. Three days later the redirects come back, and nobody can explain how, because the files that were removed are still gone.
The explanation is almost always the same: the payload was never only in a file. WordPress stores an enormous amount of executable intent in its database, options that are loaded on every request, post content that is rendered into every page, metadata that is unserialised and acted upon, comment fields that are echoed into HTML. A backdoor that writes itself back into the filesystem on the next page load does not need to survive the cleanup. It only needs one row to survive it.
This is why database scanning is in the free plugin rather than behind a licence. A scanner that reads only the filesystem gives you a confident answer to half the question, and a confident half-answer during an incident is worse than an uncertain whole one.
Four tables, and why each one is a target
wp_options is the highest-value target on a WordPress site, because autoloaded options are read into memory on every single request. A malicious option does not need anyone to visit a particular page; it executes constantly. Typical contents: injected scripts loaded through wp_head, redirect destinations, stage-two loaders that fetch the actual payload from elsewhere, and fake transients that reinstate a backdoor after deletion.
wp_posts holds posts, pages and every custom post type. Injected SEO spam lives here, as do hidden iframes, redirect scripts in post_content, and attacker-created custom post types that never appear in the admin menu, invisible in the interface, perfectly visible to a search engine crawler, which is how most owners find out.
wp_postmeta is where PHP-serialised data lives, and it is chosen deliberately because most scanners read serialised values as opaque strings. Guardian Gaze deserialises every row before analysis, so a payload nested inside an array inside a serialised blob is examined rather than skipped.
wp_comments is the table people forget entirely. Comment content and author fields are user-controlled input that gets rendered into HTML, which makes them a natural home for injected links and script fragments, particularly on sites where comments are unmoderated or a legacy comment table was never cleaned out.
Five payload classes, each rated by severity
Hidden iframes: an iframe sized to a pixel, or positioned off-screen, loading a third-party URL. The visitor sees nothing. Their browser loads whatever the attacker is serving that week.
Base64-encoded payloads: encoding is not itself malicious and plenty of legitimate plugins encode data. What is suspicious is encoded content that is subsequently executed, or an encoded blob sitting in a settings row that has no reason to hold one.
Spam links: injected anchors pointing at pharmaceutical, gambling or counterfeit-goods domains, usually hidden with CSS so that only crawlers see them. This is the payload class that costs you search rankings before it costs you anything else.
JavaScript redirects: conditional redirects that fire for mobile visitors, or for visitors arriving from a search engine, and stay silent for anyone typing the address directly, which is precisely why the site owner cannot reproduce what their customers are reporting.
eval() and backdoor-style code: the construct that takes attacker-supplied input and executes it. Stored in a database row, it is a persistent remote shell that does not appear in any file listing.
Every finding carries a severity rating, so a critical backdoor is not presented with the same visual weight as a suspicious-looking but ultimately harmless encoded setting.
One click, rather than SQL against production
Finding a malicious row is only useful if you can act on it. Anything the scanner flags can be cleaned from the dashboard directly, which matters more than it sounds: the alternative is writing DELETE and UPDATE statements against a live production database, at whatever hour you found out, on the basis of a table name and a row ID.
That is how sites get broken during cleanups. A slightly wrong WHERE clause removes legitimate settings, a serialised value is edited without correcting its length prefix and the option silently stops unserialising, and now you have two problems.
On Pro, the LLM layer adds a second opinion to the same findings, reasoning about what a flagged entry is written to accomplish rather than only that it matched a pattern, and explaining it in plain English before you decide.
What is examined, table by table
| Table | What lives there | Why attackers use it |
|---|---|---|
| wp_options | Site settings, autoloaded values, transients | Executes on every request; survives file cleanup |
| wp_posts | Posts, pages, custom post types | SEO spam and redirects visible to crawlers, hidden from admins |
| wp_postmeta | Per-post metadata, mostly PHP-serialised | Most scanners do not unwrap serialised data |
| wp_comments | Comment content and author fields | User-controlled input rendered straight into HTML |
Serialised values are deserialised before analysis in every table, not only wp_postmeta.
Common questions
Works with
Malware Scanning →
Four detection methods, cross-referenced.
AI Detection →
Catches what has never been catalogued.
One-Click Malware Removal →
From finding to fixed in seconds.
See it on your own site
The free scan takes under five minutes and tells you the truth.