πŸ›‘οΈ Mintwall Security 1.0 is ready β€” core protection free, foreverSee plans β†’
WordPress 6.5+ Β· PHP 7.4+ Β· GPL v2 Β· 3,653 tests passing

Attacks stop before
WordPress loads.

Most security plugins start working after WordPress has loaded β€” which means the malicious request is already inside the code it was supposed to protect. Mintwall's firewall runs before WordPress: the request never reaches core. And it ships with a coverage report that tells you, without exaggeration, what each module does and what it cannot do.

No credit card Β· no licence lock Β· protection never stops
Mintwall Β· Security DashboardObserve mode
Site status
Site is protected
1.284
Filtered Β· 24h
17
Active rules
0
Open critical
WAF CoreActive
Two-FactorActive
Bot ChallengeObserve
Malware ScannerObserve
Vulnerability ScannerPro
42 modules
Measured in the coverage report
0,007 ms
WAF cost per request
3,653
Automated tests passing
0 β‚Ί
Core protection, forever

Plugins whose legitimate traffic we have MEASURED that we do not block β€” using real request shapes, not invented "safe-looking" strings

WordPress CoreWooCommerceGravity FormsContact Form 7ACFYoast SEOHeartbeatLiteSpeed CacheCloudflareWordPress CoreWooCommerceGravity FormsContact Form 7ACFYoast SEOHeartbeatLiteSpeed CacheCloudflare
What's inside

Every module answers
a specific problem.

WAF Core (before WordPress)

Problem: a firewall that runs as a plugin only starts after WordPress and every other plugin has loaded β€” by then the malicious request is already inside the code it should have been kept out of. Solution: a compiled signature engine runs at the very start of PHP; SQLi, XSS, path traversal and encoding bypasses are filtered before core loads.

17 rules0,007 msobserve / block

Two-Factor Identity

Problem: a stolen password is enough on its own, and a second factor enforced only on the login form leaves XML-RPC and REST wide open. Solution: TOTP, passkeys and recovery codes are enforced at one identity gate β€” the same gate whichever way the request arrives.

TOTPPasskeyRecovery

Three Scanners

Problem: scanners that match text both miss obfuscated code and accuse legitimate files. Solution: token/AST analysis looks at what the code does, and the database is scanned for injected ads and redirects as well.

Quarantine

Problem: a scanner that deletes automatically will break the site itself the day it is wrong. Solution: nothing is deleted; files are moved atomically and the decision to restore always stays with a person.

Snapshot & Rollback

Problem: when a security setting breaks a site, finding what changed takes hours. Solution: a snapshot is taken before every change; preview the difference and undo it in one click.

Audit Log

Problem: an attacker's first move is to erase their traces, and an ordinary log file can be erased. Solution: an append-only, hash-chained record: alter one line and the chain breaks, visibly.

Hardening

Problem: WordPress defaults expose the version, usernames and admin surfaces more than they need to. Solution: version leaks, the file editor, XML-RPC policy and security headers are managed in one place β€” each as an explicit choice.

Modules

42 modules,
42 concrete problems.

Every module was written against a specific attack or failure mode. Each one below states the problem it solves; none of them hides behind "comprehensive protection".

WAF Core (pre-WordPress)
G

Problem β€” A firewall that runs as a plugin only wakes up after WordPress and every other plugin is already in memory β€” by then the malicious request has run code.

Solution β€” The compiled signature engine runs at the very start of PHP, before a single line of WordPress loads, and stops the request there.

Login Protection + Single Identity Gate
G+R

Problem β€” Password attempts don't only arrive at wp-login.php; XML-RPC, REST and application passwords reach the same account through separate doors, and a lock that counts one door never sees them.

Solution β€” Every login path is routed through one identity gate; the lock counts per IP, per account and globally at the same time.

Two-Factor Identity (TOTP, recovery codes, passkeys)
R

Problem β€” A stolen administrator password is full control on its own β€” and password leaks usually come from some other service, not from your site.

Solution β€” TOTP, a recovery code or a passkey is enforced at the authentication gate; application passwords are separately audited so they cannot walk around the second factor.

Bot Challenge (Proof-of-Work)
G+R

Problem β€” Automated tools try hundreds of passwords a second; a cost that is invisible to a human is a scaling problem for a bot.

Solution β€” The login request must carry a proof-of-work solved in the browser β€” milliseconds for a user, an unpayable cost for a hundred-thousand-attempt campaign.

User Enumeration Defense
G+R

Problem β€” An attack starts with a list of valid usernames, not with a password guess β€” and WordPress hands that list over through ?author=1, REST /users and its own login error messages.

Solution β€” All three leaks are closed and the login error is reduced to a single message that does not distinguish an existing user from a missing one.

Session Management & Bulk Revocation
R

Problem β€” Changing the password does not invalidate the cookie already in the attacker's hands; while the session stays open, a password change solves nothing.

Solution β€” A password reset drops every session and a password change drops all the others immediately; whatever remains can be revoked in bulk from one screen.

REST & AJAX Rate Limit
R

Problem β€” Protecting wp-login.php is not enough; admin-ajax.php and REST endpoints can be called without authentication and do the same job at a larger scale.

Solution β€” REST and AJAX paths are placed under the same rate limit; unambiguous matches are blocked, and grey ones are recorded without blocking.

Security Headers & CSP
R+E

Problem β€” A single XSS flaw exposes the session cookie, the forms and everything else on the page once the browser enforces no restriction at all.

Solution β€” CSP, X-Frame-Options, Referrer-Policy and Permissions-Policy are sent, and a scheduled audit separately measures that the headers actually reach the browser.

Security headers on static files
L1

Problem β€” Headers are sent by PHP, but images, PDFs and JS files are served directly by the web server β€” PHP never runs for those responses, so they carry no security headers at all.

Solution β€” A server-level rule that adds the same headers is generated, and the audit measures whether it is installed; if it is not, the row does not turn green.

Hardening Profiles
R

Problem β€” WordPress ships open for compatibility: the version number, RSD/WLW links, pingback and the in-dashboard file editor. Each one hands an attacker either information or a way to write code directly.

Solution β€” One profile closes them and each item is reported separately; whichever is still open is not hidden.

Upload Security (allowlist + re-encode)
G+R

Problem β€” The extension and the MIME header are whatever the client claims; a file ending in .jpg can perfectly well be PHP.

Solution β€” An allowlist, a three-way extension/MIME/content match and a re-encode are applied; a file that claims to be an image but cannot be decoded as one is rejected.

PHP Execution Block in uploads/
G+R

Problem β€” The wp-content/uploads directory is writable from outside by definition; if a single PHP file dropped there can be requested directly, getting past the upload filter is enough.

Solution β€” A server rule that disables PHP execution under that directory is written, and a scheduled audit measures that the rule is still in place.

File Integrity (core checksums)
R+W

Problem β€” A backdoor is usually not a new file but a few lines added to an existing core file; it is invisible to the eye.

Solution β€” Every core file is compared against the official checksum published by WordPress.org; bundled plugins that update independently are excluded, otherwise even a spotless install raises an alarm.

Media Optimisation (WebP/AVIF)
W

Problem β€” A security layer that slows the site down is eventually switched off β€” and most of a page's weight is images.

Solution β€” WebP/AVIF versions of uploaded images are produced; the work runs in scheduled slices instead of blocking a single request.

System Hardening Audit
R+W

Problem β€” Hardening is done once at install; then someone turns on WP_DEBUG, a plugin adds a capability, a user becomes an administrator β€” and nobody notices.

Solution β€” Ten items are measured daily: dangerous capabilities, the registration role, critical constants, file permissions, orphaned cron, weak administrator passwords and end-of-life PHP. The baseline taken on the first run is never moved forward β€” an unacknowledged change must not become the new normal.

Critical Files & Dropin Monitoring
R+W

Problem β€” Dropins such as wp-config.php, .htaccess and object-cache.php load before WordPress does; an attacker who can write to one of them adds code to every request.

Solution β€” The contents of these files are baselined and each change is raised as its own finding.

Quarantine & Safe Restore
R+W

Problem β€” Deleting a file flagged as malicious takes the site down when the flag is wrong; leaving it alone leaves the attacker's file in place.

Solution β€” The file is moved into quarantine atomically, nothing is ever deleted automatically, and restoring it is a single step.

Audit Log (hash chain)
R

Problem β€” The first thing an attacker with administrator rights does is clean up the traces; a log that can be edited tells you nothing after the fact.

Solution β€” The log is append-only and every row carries the digest of the one before it; if anyone intervenes the chain breaks, and that break is measurable.

Snapshot / Rollback Engine
R+W

Problem β€” Tightening a security setting sometimes breaks the site; with no way back, even the correct change never gets made.

Solution β€” A snapshot is taken before every write, and a setting that breaks something is rolled back in one step.

Malware Scanner (token/AST)
W

Problem β€” Text search does not find malicious code β€” an eval call hides comfortably behind base64, a variable function name or string concatenation.

Solution β€” Files are analysed through PHP's own token stream, so a hidden call is visible regardless of how it was spelled in the source.

Ad-Injection / DB-DOM Scan
W

Problem β€” Ad injection lives in the database, not in a file: an option, a post body, a meta field. A file scan never sees it.

Solution β€” Options, post content and meta fields are scanned separately for injected markup.

Plugin & Theme Maintenance Signals
W

Problem β€” A plugin may have no known vulnerability today; but if it has not been updated for two years, no patch will arrive for the one found tomorrow either.

Solution β€” Maintenance signals are read for every plugin and theme in the inventory; this is not a vulnerability scan, it is a measure of abandonment.

Cache Poisoning (unkeyed input)
R

Problem β€” If a header that is not part of the cache key changes the response, a single attacker request can produce a poisoned page served to every visitor.

Solution β€” Inputs that alter the response without entering the key are audited, and each one found is raised as a finding.

SMTP & Outbound Mail
R

Problem β€” Password resets, login alerts and security notifications all travel by e-mail; if the server's own mail() path lands silently in spam, the warning never arrives.

Solution β€” Outbound mail is bound to an authenticated SMTP server, and delivery is measured rather than assumed.

TLS Certificate Monitor
R

Problem β€” When a certificate expires the site becomes unreachable β€” and visitors are usually the first to notice.

Solution β€” The certificate's remaining lifetime, its chain and its renewal state are measured regularly, and the warning comes before the expiry.

SPF / DKIM / DMARC Advisor
C

Problem β€” If these three records are missing, anyone may send forged e-mail in your domain's name β€” and you cannot see that from inside your own site.

Solution β€” The records are read from the outside with an independent resolver, and a missing or weak policy is reported with the exact correction to apply.

PHP Limits & Environment Profile
R

Problem β€” A backup is cut short, a scan never finishes, an upload fails β€” and the cause is usually not security but memory_limit or max_execution_time.

Solution β€” The real limits at runtime are measured, and which job hits which limit is stated explicitly.

Local Backup (verified restore)
R

Problem β€” An unverified backup is not a backup; most backups are tried for the first time during a restore, and that is exactly where they turn out to be broken.

Solution β€” A backup is taken and its restorability is verified separately; an unverified backup does not count as taken.

Database Maintenance
R

Problem β€” Expired transients, old revisions, spam comments and orphaned meta inflate the database, and every query in an inflated database gets slower.

Solution β€” These four classes are counted and cleaned regularly, and what will be removed is shown before it is removed.

Cache Safety (logged-in bypass)
R

Problem β€” If a logged-in user's page is cached and then served to an anonymous visitor, session content and sometimes nonces leak out.

Solution β€” Whether logged-in requests actually bypass the cache is measured; if they do not, a finding is raised.

Redirect Manager
R

Problem β€” An open redirect turns your own domain into a phishing tool; broken links cost you both the visitor and the ranking.

Solution β€” Redirects are defined in one place and their targets are restricted; having no redirects at all is not the same as being protected, so that state is reported separately.

Server rules (sensitive files)
L1

Problem β€” When files like wp-config.php, .git/, .env and debug.log are requested directly, PHP never runs; with no rule on the server, the file is handed over as-is.

Solution β€” A server rule closing the sensitive paths is generated; if the server does not read .htaccess (nginx, LiteSpeed) the equivalent configuration is shown on screen to apply by hand, and the row is not counted as green.

Autoloaded options (every request)
R

Problem β€” Options marked autoload are read into memory on every single request; a few megabytes left behind by plugins slow the whole site down permanently.

Solution β€” The autoload weight is measured, the heaviest entries are listed one by one, and the unnecessary ones are taken out of autoload.

Scheduled work can run here
R

Problem β€” Most of this plugin's scans hang off the WordPress scheduler, and that scheduler runs on visitor traffic: on a quiet site, or a host that sets DISABLE_WP_CRON, none of them ever run β€” the screens say β€œnot scanned yet” and the operator reads it as safe.

Solution β€” The plugin measures whether scheduled work actually runs on this server, and when it does not it says so by name instead of looking like a delay.

Performance Budget (its own cost, measured)
W

Problem β€” When a site gets slower the security plugin is the first suspect, and nobody can show otherwise, because no plugin measures its own cost.

Solution β€” The plugin measures its own cost β€” per-request time, its own autoloaded options, admin queries β€” against a budget it publishes, and reports itself when it goes over.

Vulnerability Scanner (EPSS/KEV)
W+C

Problem β€” A CVE list for your installed plugins is not actionable on its own: it does not say which of the hundreds is actually being exploited.

Solution β€” The inventory is joined against CISA KEV (known exploited) and EPSS (probability of exploitation), so the ranking rests on measurement rather than guesswork.

Virtual Patching (vCVE)
W+C

Problem β€” If the patch has not shipped yet, or the update is being deferred because it would break the site, the hole stays open until it is closed.

Solution β€” A rule that cuts the known exploitation pattern is applied in the layer ahead of WordPress; the plugin's own code is left untouched.

Threat Intelligence
W+C

Problem β€” A single site cannot tell whether the attack aimed at it is part of a new campaign or just background noise.

Solution β€” Signature and indicator feeds are distributed centrally, so behaviour first measured on one site meets the next one as a rule.

Incident Response Centre
W+C

Problem β€” During an incident the real problem is not a shortage of alerts but not knowing the order: what to isolate first, what to roll back, what to preserve as evidence.

Solution β€” Findings are collected on a single timeline, and isolation, rollback and evidence preservation are carried out in order.

DNS Monitor
C

Problem β€” A change to an NS or MX record means the whole site and all of its mail have been handed to someone else β€” and the site cannot see that from the inside.

Solution β€” NS, MX, A/AAAA, TXT and DMARC records are baselined from outside, and when drift is reported "could not resolve" is never conflated with "no record".

External Site Scanner
C

Problem β€” From the inside a site looks healthy; what it leaks outward β€” an open directory listing, a reachable backup file, mixed content β€” is only visible from outside.

Solution β€” Headers, redirects, the server banner and known sensitive paths are measured from an independent location, and a path that was never probed is never reported as clean.

Certificate Transparency Watch
C

Problem β€” A third party obtaining a certificate for your domain is the first visible sign of hijacked DNS β€” and it leaves no trace at all on your server.

Solution β€” Public CT logs are watched; a certificate issued under an unrecognised organisation raises an alert, and a fingerprint an operator has closed is never raised again.

G before WordPress loadsR while WordPress runsW scheduled watchingC from the cloud, outside inE edge / CDNL1 web server rule
Coverage Report

False confidence is worse
than no protection.

A dashboard that shows everything green makes you believe a half-finished protection is finished β€” and that belief is worse than never installing it, because now you stop looking. Mintwall reports every module in one of five states, with the reason: nothing unmeasured is ever written as "active".

  • Five honest states β€” no invented "you're protected"
  • Nothing unmeasured can be "active"
  • Every row says why it is in that state
WAF Core (pre-WordPress)
measuring guard level
Partial
Login Protection + Single Identity Gate
per-IP, per-account and global attempt lockout at the authenticate gate
Active
Two-Factor Identity (TOTP, recovery codes, passkeys)
enforced at the authenticate gate; this build has not yet checked whether any administrator holds an application password, which would bypass it
Observe
Server rules (sensitive files)
an unidentified server does not read .htaccess β€” this plugin cannot apply the rule here; the equivalent configuration is shown on this screen to apply by hand
No permission
Vulnerability Scanner (EPSS/KEV)
no feed exists yet, and this site has no licence; local protection is unaffected
Unsupported
Snapshot engine

Protection you cannot undo
is not protection.

The most expensive mistake a security tool makes is breaking the site with an action it believed was right β€” and in most tools that action cannot be undone. Mintwall takes a snapshot before it quarantines a file, changes a rule or corrects a setting.

  • Preview the difference before undoing
  • Restore with a sha256 tamper check
  • No automatic deletion β€” the decision stays yours
firewall.modeblock→challenge
wp-config.phpchanged→restored
rules.compiledβœ“ snapshot taken
Undo this change
Performance budget

Protection that slows you down
gets switched off.

A security plugin that noticeably slows a site has a predictable ending: one day it is switched off and the site is left with nothing. So scanners run on scheduled jobs rather than the request path, the firewall's share is capped by a budget, and it is measured on every run.

  • No outbound calls on the request path (proven by counting)
  • Rules live in opcache β€” not parsed on every request
  • Alerts if the budget is exceeded
# security budget check
guard β†’ request path 0,007 ms / 20 ms budget
cron β†’ malware scan (background)
http β†’ outbound request 0 (front end)
──────────────
βœ“ within budget Β· no regression
Install

Three minutes,
three steps.

01

Install and activate

Install it once the plugin is released. The firewall starts in observe mode the moment you activate β€” it measures what happens before blocking anything.

02

Read the coverage report

See which module is genuinely active, which is observing, which is unsupported β€” and WHY. No invented green.

03

Switch to blocking when you're ready

Once observe mode shows no false positives, turn blocking on. You make that call, not us.

Frequently asked

What people ask.

Is the free version really free?

Yes. Core protection will be GPL-2.0 licensed and will not expire; it is currently being prepared for submission to the WordPress plugin directory. There is no licence lock: even if a Pro subscription ends, the firewall, two-factor identity and scanners keep running.

Will it slow my site down?

The firewall's share measured 0.007 ms per request on this machine (17 rules, 5 fields; mean of 5,000 runs). Scanners run on scheduled cron, not on the request path. The real figure depends on your server β€” the dashboard measures it in your own environment.

Will it break other plugins?

That is exactly what observe mode is for: you see what would happen before you switch to blocking. Quarantine moves files atomically, never deletes automatically, and every change can be undone.

Where does my data go?

The free version sends no data off your site; there is no outbound HTTP call on the request path and that is tested by counting. When Pro cloud services are enabled, exactly what is sent is written down item by item.

When is Pro coming?

The cloud side is in development. Pricing and billing have not been announced; we are not putting a number here before they are.

Pricing

Protection is free.
Service is a subscription.

Free
$0 / forever
One site Β· GPL-2.0 Β· direct download
  • Pre-WordPress WAF + rate limiting
  • Two-factor identity + bot challenge
  • Three scanners + quarantine + snapshot
  • Audit trail + coverage report
Soon
Pro Cloud
$99 / year
Multi-site Β· cloud intelligence Β· virtual patching
  • Everything in Free, plus:
  • Threat intelligence (EPSS/KEV)
  • Virtual patching + ring-by-ring rollout
  • Multi-site console + tamper-evident audit ledger
Agency
$599 / year
For agencies Β· 25 sites Β· white label
  • Everything in Pro, plus:
  • Volume discount Β· single invoice
  • White-label reports + client roles
  • Incident response centre

The difference between plans is not the module count β€” it is service and quota. The licence ends; the protection does not.

Prices are set in US dollars. VAT is added at checkout where it applies.

Protect your site today.

No credit card. Three-minute setup. Protection never stops.