Black Friday: 50% off. Your first year on any annual plan, until 1 December. See the dealFirst year on annual plans, until 1 December
WPClientHub V2 is live. Fewer plugins on your client sites: caching, forms and image optimization now come built into WPClientHub One. See what’s newCaching, forms and images, built in. See what’s new
Sign in Start free

← Docs  /  Sentinel security

File integrity, protection & response

Updated 2026-10-03

The daily file check, what each finding means, one-click responses (reinstall, quarantine, rotate keys), protection switches and security alerts.

Browse documentation

What it does

The vulnerability feed tells you which installed versions are exposed. The file check answers the other question — has anyone been in here? Once a day, and within a couple of minutes of a site being connected, the WPClientHub One plugin walks the site's files and compares them with what should be there: WordPress core against the official WordPress.org checksums for that exact version and locale, and every WordPress.org plugin against its published checksums. It also looks for the patterns compromises leave behind, wherever they are.

Results appear on the site's Security tab under Files & protection, count towards the security score and the health score, and new findings are emailed as a security alert. The scan runs inside the plugin in short, time-boxed steps and adds nothing to the site's front end.

What the scan looks for

FindingSeverity
A WordPress core file whose contents don't match WordPress.orgCritical
A core file emptied to zero bytes (a common way to break a site or hide a loader)Critical
A PHP file inside wp-admin or wp-includes that WordPress doesn't shipCritical
PHP (or another executable type) inside wp-content/uploadsCritical
A “dropper kit” — a folder named after its parent holding a loader such as cache.phpCritical
A WordPress.org plugin whose files differ from the published versionCritical
A missing core fileHigh
Hidden files disguised as icons (a classic way to smuggle code in), unusual executable types such as .phtml or .phar, empty PHP files in plugins and themesHigh
Unknown PHP files in the web root (outside the files WordPress expects)High
Extra PHP files inside a WordPress.org pluginHigh
A second WordPress installation nested inside the siteMedium
Extra non-PHP files inside core foldersLow
PHP files changed in the last 7 daysFor information

Must-use plugins (wp-content/mu-plugins) are listed separately: they load on every request and can't be switched off in wp-admin, which makes them a favourite hiding place. Hosting-company ones are recognised automatically; anything else is flagged as unknown until you mark it as yours.

How to

  1. Open a site → Security. Files & protection sits at the top: the last scan, how many files were checked, whether core was verified, and a Clean or N to review badge. Press Scan files now to run one immediately.
  2. Expand a finding group to see the paths. Critical groups open by default.
  3. Reinstall WordPress core replaces every core file with the official copy of the same version. Themes, plugins, uploads and wp-config.php are not touched. Extra files flagged inside wp-admin/wp-includes are not removed by a reinstall — quarantine those as well.
  4. Reinstall from WordPress.org next to a modified plugin replaces it with the official package of the same version and keeps it active.
  5. Tick the paths you want gone and press Quarantine selected. Each item is moved into the plugin's protected vault on the site — not deleted. Only paths from the latest scan can be quarantined; wp-config.php and core files never can.
  6. Under Protection, open Quarantine to see what has been moved, and press Restore to put an item back exactly where it was.
  7. Press This is ours next to a must-use plugin you recognise. It stops counting against the score and isn't announced again.
  8. Press Rotate security keys to write new WordPress salts. Everyone, including anyone holding a stolen session, is signed out. A backup of the old wp-config.php is kept in the vault.
  9. Check Last known-clean restore point: the newest completed backup taken before the most recent clean scan. Backups taken after that scan might already contain the problem, so they don't qualify.

Every response is recorded in the site's activity log with who pressed it, and anything that changes files is followed by a fresh scan.

Protection switches

SwitchDefaultWhat it does
Login protectionOnLocks an IP out after 5 wrong passwords; an IP locked out three times in a day is locked for 24 hours. A username being guessed from many addresses (20 wrong passwords) is locked for unknown IPs, while the addresses its owner signed in from before still get in.
Block PHP in uploadsOnAdds a marked .htaccess block to wp-content/uploads so a dropped script can't run. Apache and LiteSpeed only — on nginx the panel tells you to add the rule to the server configuration.
Disable the wp-admin file editorOnSets DISALLOW_FILE_EDIT, removing the theme and plugin file editors.
Block XML-RPC loginsOffDisables password-authenticated XML-RPC methods. Leave it off if the site uses Jetpack or the WordPress mobile app.

The same switches are in the plugin's own settings page in wp-admin. Attempts refused by login protection are logged as blocked, not as failed passwords, so an attack shows as one locked-out address rather than hundreds of wrong passwords.

Security alerts

The Security alerts email kind is on by default for owners, admins and techs, and can be routed to Slack, a webhook or another inbox like any other alert (notification routes). Each event is emailed once:

  • the file check finds new high or critical findings, or a new unknown must-use plugin;
  • 50 or more failed or blocked sign-ins within 15 minutes (at most one email per site per day);
  • a successful sign-in on an account right after 10 or more failed attempts on it within the hour;
  • an administrator account that wasn't there at the previous sync.

The site's Security timeline (last 30 days) puts these next to lockouts, new users, plugin installs, disconnects and uptime incidents, with failed sign-ins grouped per hour.

Limits & defaults

SettingDefault
Plugin versionWPClientHub One 0.9.0 or newer on the site
Scan frequencyOnce a day for every connected site, plus a scan a couple of minutes after a site is connected or reconnected, plus Scan files now
Paths shownUp to 200 per finding type (counts are always exact)
Security scoreCore changes and suspicious files are failed checks, and either one caps the score at 30 until resolved
Health score−40 when the worst open file finding is high or critical, −10 otherwise
PlansEvery plan, including Free
PermissionsOwner, admin and tech can scan and respond; viewer can look

What it isn't: the file check is not a malware-signature scanner or a firewall. It compares against WordPress.org and looks for the shapes compromises leave behind; a clean result means nothing it checks for was found.

Troubleshooting

A premium plugin shows as “unverifiable”
WordPress.org only publishes checksums for plugins it hosts, so premium and custom plugins can't be compared file by file. They are still covered by the rest of the scan — PHP in uploads, hidden icon files, dropper folders, unknown PHP in the web root — and by the vulnerability feed. Unverifiable is not the same as passed, which is why it is listed.
“Block PHP in uploads” is on but the site still shows as unprotected
The block is written as an .htaccess rule, which Apache and LiteSpeed read and nginx ignores. On an nginx server the panel says so; add a rule that denies .php under /wp-content/uploads/ in the server configuration (or ask the host to).
A must-use plugin from our host is flagged as unknown
Must-use plugins from the common hosts are recognised automatically. For anything else that is yours, press “This is ours” next to it — it stops counting against the security score and is no longer announced. Undo is one click.
I quarantined a file and something on the site stopped working
Open Quarantine in the Protection card and press Restore next to the item — it goes back exactly where it was. A fresh scan runs after every quarantine or restore, so the findings list stays current.
The scan didn't finish
It runs in short steps so it never hits a host's execution limit, and a large site can take a few minutes. If the site disconnected mid-scan, the scan resumes on the next run; the panel shows the last error when one stopped it.