Watches what gets a site defaced or taken down, and closes the doors most sites leave open.
Why this one exists. A client will forgive a slow site. They will not forgive a hacked one.
17Playbooks
104Steps written out
9That change anything
1Free on every plan
Every playbook it holds
Vulnerability Watch
FreeDaily18 Aug 2026
Match what is installed against what is publicly known to be vulnerable, and judge whether it is actually reachable on this site.
1
Read the installed versions
Every plugin, theme and the core version, with the exact version string.
Reads only
2
Pull the vulnerability feeds
The published advisories, matched on slug and version range.
Reads only
3
Judge reachability
A vulnerability in a feature the site does not use is not the same as one in the checkout. It says which.
Reads only
4
Rank by what it costs you
Ordered by exploitability and by what the affected page does for the business.
Reads only
5
Report and alert
It tells you. It does not update, deactivate or edit anything. Remediation is a separate action you approve.
Reversible write
5 steps · reads only, never writes
Security Sweep
careMonthlySept 2026
A risk-ordered report on the six things most sites get wrong. Changes nothing.
1
File permissions
Anything writable that should not be, and the config file above all.
Reads only
2
Exposed files
Backups, database dumps, logs and editor swap files sitting in the web root.
Reads only
3
XML-RPC and the login
Whether the two most brute-forced endpoints on the internet are open and unlimited.
Reads only
4
User enumeration
Whether the REST API and author archives hand out account names to anybody who asks.
Reads only
5
Security headers
What is present, what is missing, and what each missing one actually allows.
Reads only
6
Report in order of risk
It observes. It writes nothing, anywhere.
Reversible write
6 steps · reads only, never writes
Harden
careOn demandSept 2026
Apply the hardening fixes one at a time, and confirm the site still works after each.
1
Back up first
Files and database, before any header or permission changes.
Stops the run
2
Disable the file editor
The dashboard editor turns one stolen password into full code execution.
Writes
3
Close XML-RPC
Unless something on the site is genuinely using it, which it checks first.
Writes
4
Block user enumeration
The REST author endpoint and the author archive redirect.
Writes
5
Add the security headers
One at a time, because a wrong content policy takes a site down.
Writes
6
Lock file permissions
To what WordPress documents, not to what is most restrictive.
Writes
7
Verify and report
Load the critical pages after every change. Anything that breaks goes back immediately.
Reversible write
7 steps · changes the site, behind a restore point
Malware Response
careWhen something is foundLater
Scan, quarantine, clean, harden, rescan, and produce an incident report you can hand to a client.
1
File integrity scan
Every core, plugin and theme file compared against what it should be.
Reads only
2
Quarantine, do not delete
Suspicious files are moved somewhere they cannot execute, and kept.
Reversible write
3
Clean the known bad
Injected code out of legitimate files, with the original kept beside it.
Writes
4
Close the way in
A clean that does not find the entry point is a clean you do again next week.
Writes
5
Rescan
Not clean means not finished. It says so rather than declaring victory.
Stops the run
6
Incident report
What was found, when it arrived, what it did, and what has changed. Written for the client.
Reads only
6 steps · changes the site, behind a restore point
Login Limits
careOn demandOct 2026
WordPress puts no limit on login attempts, so a username plus a word list is a workable way into most sites.
1
Read what is already there
If a security plugin already limits attempts it reports the current setting and exits, rather than adding a second limiter that fights the first.
Stops the run
2
Count what is actually happening
Failed attempts over the last week, the addresses behind them, and which account names are being guessed.
Reads only
3
Record the current configuration
Every setting it is about to change, by value, before it changes one.
Stops the run
4
Set the limit
A count, a lockout window, and a longer window for repeat offenders. Set high enough that a real person mistyping twice is unaffected.
Writes
5
Protect your own way in first
Your addresses are allowed through before the limit turns on, so the lockout cannot lock out the agency.
Writes
6
Turn it off in one action
The configuration returns to what step three recorded, and the limit stops applying immediately.
Reversible write
7
Verify
Confirm a correct sign in still works, and that a deliberate run of wrong passwords from a test address gets stopped where it should.
Reads only
7 steps · changes the site, behind a restore point
Two Factor
careOn demandNov 2026
A stolen administrator password is how most WordPress sites are actually taken, and a second factor is the only thing that stops it being enough.
1
Read who would be affected
Every administrator and editor, and whether any of them already carry a second factor. If they all do, it exits here.
Stops the run
2
Record the roles and the current policy
Who holds what today, so the rollout can be reversed to a real state rather than a default.
Stops the run
3
Require it for administrators only
Editors and below are left alone at first, because the account worth stealing is the one that can install code.
Writes
4
Give people a grace period
They can still sign in while they enrol. A hard cut off locks out a client on a Monday morning and ends the conversation.
Writes
5
Report who has enrolled
Each administrator, whether they have set it up, and how many days are left. It cannot enrol anybody on their behalf, because only they hold the device.
Reads only
6
Turn it off in one action
The policy returns to what step two recorded and everyone signs in exactly as they did before.
Reversible write
7
Enforce when everybody is ready
The requirement becomes mandatory only once every administrator has enrolled, so nobody is locked out on the day it lands.
Writes
7 steps · changes the site, behind a restore point
Permission Repair
careMonthlyOct 2026
A configuration file the web server can write to is a configuration file somebody else can rewrite.
1
Read what is set now
Every directory and file that matters, with its current mode and its owner.
Reads only
2
Compare against what WordPress documents
Not against the most restrictive setting possible, which breaks updates, uploads and the media library.
Reads only
3
Exit when it is already right
If nothing is writable that should not be, it reports and changes nothing.
Stops the run
4
Record every mode first
So each file goes back to the exact number it had, rather than to a general default that was never true here.
Stops the run
5
Fix the worst first
The configuration file, then anything world writable, then the rest. One at a time, with the site checked after each.
Writes
6
Undo
Every mode step four recorded is restored in one action.
Reversible write
7
Verify uploads and updates still work
A permission change that hardens the site and stops the media library is not a fix, it is a different outage.
Reads only
7 steps · changes the site, behind a restore point
Core Integrity
careDailySept 2026
One changed line in a core file is how a site stays compromised long after the plugin that let them in has been removed.
1
Read the exact core version
Including the locale, because the file list differs between them and a mismatch there produces false alarms.
Reads only
2
Fetch the published checksums
WordPress publishes a hash for every file it ships. This compares against that list, not against a general idea of what should be there.
Reads only
3
Compare every file
Changed, missing, and files sitting in a core directory that WordPress never shipped at all.
Reads only
4
Explain each difference
Hosts add files legitimately. It says which differences have a known innocent explanation and which have none.
Reads only
5
Report
It compares and lists. It replaces no file and deletes nothing, because cleaning up before the investigation destroys the evidence of how they got in.
Reversible write
5 steps · reads only, never writes
Plugin Integrity
careWeeklyOct 2026
A plugin file edited after installation is either a developer's shortcut you will lose at the next update, or somebody else's code running on your site.
1
List what is installed
Every plugin, its exact version, and whether it came from the WordPress directory.
Reads only
2
Compare against the published files
The directory publishes a hash per file per version. Each installed file is checked against its own version, never against the newest one.
Reads only
3
Say plainly what cannot be checked
A paid plugin publishes no hashes, so it cannot be verified this way. Those are listed separately rather than passed silently as clean.
Reads only
4
Look at what changed
The file, the size of the change, and whether it reads like a customisation somebody made or like code that was added from outside.
Reads only
5
Report
It reads and compares. It restores no file, because overwriting a deliberate customisation is its own outage.
Reversible write
5 steps · reads only, never writes
Abandoned Plugins
careMonthlySept 2026
A plugin nobody has touched in three years will not get a fix on the day a vulnerability is found in it.
1
Read the installed list
Every plugin, its version, and the date of the last release the author published.
Reads only
2
Check what the author is still doing
Last update, the WordPress version it claims to be tested against, and whether the support forum is being answered.
Reads only
3
Judge the exposure, not just the age
An abandoned plugin that formats a date is not the same problem as an abandoned form handler that accepts uploads.
Reads only
4
Name the replacement
For each one, the maintained plugin that does the same job, and honestly what the switch would cost you in work.
Reads only
5
Report
It reads and recommends. It deactivates and removes nothing.
Reversible write
5 steps · reads only, never writes
Pulled Plugins
careDailySept 2026
When a plugin is removed from the WordPress directory it stops receiving updates that day, and it is often removed because of a vulnerability nobody has published yet.
1
Check each plugin is still listed
One request per installed plugin against the directory. A plugin page that has gone is the signal.
Reads only
2
Separate closed from renamed
A plugin that changed its slug has not been pulled. Treating the two the same is how you frighten a client for nothing.
Reads only
3
Find out why
The directory states a reason when it closes a plugin, and a guideline violation and a security issue are very different news.
Reads only
4
Say what stops
No more updates through the normal channel, which means the version installed today is the last version there will ever be.
Reads only
5
Rank by what it can reach
A pulled plugin that handles logins, payments or uploads goes to the top of the list.
Reads only
6
Report
It watches the directory. It deactivates and removes nothing.
Reversible write
6 steps · reads only, never writes
Enumeration Block
careOn demandOct 2026
Your account names are half of a login, and WordPress hands them to anybody who asks in five different places.
1
Find which doors are open
The REST users route, the author archive, the feeds, the sitemap and the login error message. If all five are already closed it exits here.
Stops the run
2
Check nothing legitimate depends on them
A headless front end or a plugin that reads the author route breaks if it is closed blindly, so it looks before it closes.
Reads only
3
Record what each one answers today
The exact response from all five, so the change can be judged afterwards and reversed to a known state.
Stops the run
4
Close them one at a time
The REST route for signed out visitors, the author archive redirect, the author name in the feed, the sitemap entries, then the login error that tells a stranger which half was right.
Writes
5
Undo
It is one small file. Removing it puts all five back to how they answer today, and signed in editors keep full access throughout.
Reversible write
6
Verify from outside
Request all five again from our network, signed out, and confirm none of them returns an account name.
Reads only
6 steps · changes the site, behind a restore point
XML-RPC Control
careOn demandNov 2026
XML-RPC lets somebody try a thousand passwords in a single request, but switching it off blindly breaks Jetpack and the mobile app.
1
See whether anything is using it
Two weeks of requests, split by which method was called and what made the call. If it is genuinely in daily use it says so and does not close it.
Stops the run
2
Separate the dangerous methods from the rest
The multicall method is what turns one request into a thousand password attempts. Publishing a post from a phone is not the same thing at all.
Reads only
3
Record the current state
Which methods answer today, so the reversal is exact.
Stops the run
4
Close the multicall method first
The part that makes brute force cheap goes, and the mobile app keeps working.
Writes
5
Close the rest only if nothing uses it
Based on the fortnight of real traffic from step one, not on a general rule about what sites usually need.
Writes
6
Undo
One action restores the endpoint exactly as it answers today.
Reversible write
7
Verify
Confirm the endpoint refuses the methods you closed and still answers the ones you kept, then watch the request log for a week for anything that started failing.
Reads only
7 steps · changes the site, behind a restore point
REST Exposure
careMonthlyOct 2026
The REST API answers to anybody by default, and plugins add routes to it that were never meant to be read from outside the site.
1
List every route
Core, and every route each plugin has registered, with the methods each one accepts.
Reads only
2
Ask each one without signing in
Signed out, from our network, exactly as a stranger would ask.
Reads only
3
Say what came back
The route, the status, and the kind of data in the response. Names, email addresses, order numbers and unpublished content are called out by name.
Reads only
4
Separate designed from accidental
A public route the site's own front end depends on is meant to answer. A plugin route handing back form submissions is not.
Reads only
5
Name the fix per route
Which capability check the route is missing, written so you can send it to the plugin author or apply it yourself.
Reads only
6
Report
It asks and records. It blocks no route, because blocking one the front end uses takes the site down in a way nobody connects to a security change.
Reversible write
6 steps · reads only, never writes
Security Headers
careOn demandNov 2026
The headers a site sends decide what a browser is allowed to do with it, and the one that matters most is also the one that breaks sites when it is added carelessly.
1
Read what is sent now
Every header on the homepage, an admin page and a form page. If they are all present and correctly set it exits here.
Stops the run
2
Say what each missing one allows
Not that a header is absent, but what a browser is currently permitted to do because it is absent.
Reads only
3
Record the response as it stands
The full header set today, so the before is on record and the reversal is exact.
Stops the run
4
Add the simple ones first
Frame options, referrer policy and content type options. One at a time, with the pages loaded after each.
Writes
5
Run the content policy in report mode
It watches for two weeks and lists what a real policy would have blocked. Nothing is enforced and nothing is broken during that time.
Writes
6
Undo
Every header it added is removed in one action and the response returns to the record from step three.
Reversible write
7
Enforce only when the report is clean
The policy turns on once it stops catching things the site legitimately loads, not on the day it was written.
Writes
7 steps · changes the site, behind a restore point
Admin Provenance
careDailySept 2026
An administrator account you did not create is the clearest sign somebody else has been in, and it usually appears weeks before anything visibly breaks.
1
List the administrators
Every account that can install code, however it came by the role.
Reads only
2
Match each one against an invitation
Who created it, when, and whether there is any record of somebody asking for it.
Reads only
3
Look at how it was made
An account created through the dashboard leaves a different trail from one written straight into the database.
Reads only
4
Watch for a quiet promotion
A subscriber account made three years ago that became an administrator last Tuesday is the pattern worth catching.
Reads only
5
Check the details that give it away
A registration date that does not match the first sign in, an address on a domain nobody recognises, and a display name copied from somebody real.
Reads only
6
Alert the same day
A new administrator is reported immediately, not in the monthly summary. It removes no account, because deleting one before you know how it got there loses the trail.
Reversible write
6 steps · reads only, never writes
Uploads Execution Test
careMonthlyOct 2026
Prove whether the uploads folder will run a PHP file, which is the difference between a file-upload bug being an inconvenience and being a takeover.
1
Pre-flight
Confirm the uploads folder is writable and reachable over HTTP. If either is false it exits here and writes nothing.
Stops the run
2
Record what to remove
Note the exact path and random filename about to be created, so cleanup is precise rather than a guess.
Stops the run
3
Write one single-use file
A file with a random name that does nothing but print a random token. It is never linked and it exists for seconds.
Writes
4
Request it over the public address
If the token comes back, the server executed it. If the source comes back, the folder is serving files as text, which is what it should do.
Reads only
5
Delete it, always
Runs whether the test passed, failed or errored, and says so loudly if the file could not be removed.
Reversible write
6
Report what it means
If PHP ran, any plugin that lets a visitor upload a file is a way to run code on the server, and the fix is a server rule rather than a plugin setting.
Reads only
6 steps · changes the site, behind a restore point