Nivoli Edge

Description

Find out what your WordPress site gives away, and close most of it in one click. Free, on your own server, with no account and no key.

Nivoli Edge starts with three security tools that run inside WordPress and need nothing else. When you want protection a plugin cannot give from inside the site it protects, the managed edge adds it one layer up.

Security check (free)

Nineteen checks of what this site exposes, measured from inside WordPress and from one visit to its own front door: XML-RPC, readable usernames, the code editors, security headers, the WordPress version, readme.html, debug.log, directory listings, a user named admin, HTTPS. It also finds what a site hides from itself: must-use plugins and drop-ins that WordPress does not list, administrators the Users screen does not show, and code hooked to the login from places it should not be. Every finding says what it means and what to do about it.

Code at login (free)

Every piece of code that runs when someone logs in, and on the Users and Plugins screens, listed in plain words: what it does, which plugin, theme or file put it there, and the warning signs a password thief leaves behind (hidden code, sending data out, writing files, storing what was typed). WordPress itself and well-known plugins are grouped as expected; anything else is yours to confirm, and you can accept what you recognise so it stops asking.

Hardening, one switch each (free)

Eight things WordPress exposes by default, switched off from the next page load: XML-RPC, username enumeration, the code editors in wp-admin, missing security headers, the version in the page, the version in asset URLs and headers, head clutter, and minor core updates kept on. One click gives you the same switches as a must-use plugin, which WordPress loads first and nothing in wp-admin can deactivate.

Also free

  • Images through your own Cloudflare zone: URLs rewritten into right-sized WebP and AVIF (native WordPress filters, srcset, Gutenberg, WooCommerce, the content and a full-page scan), presets and one-click size mapping from your theme’s sizes, a coverage audit with a weekly regression email, fake-image detection and repair, never-loading images, and your heaviest uploads with Tinify shrinking.
  • Page caching on the edge you already run: Surrogate-Key / Cache-Tag headers and surgical purge to Fastly, Cloudflare Enterprise or your own webhook, prewarm on save, a page cache check and purge-failure alerts.
  • WP-CLI, a debug overlay and a weekly header self-test.

The security tools need nothing from outside your server. Nothing is sent anywhere unless you connect a service yourself; the External services section lists each one.

When you want more: the managed edge

Every security plugin, this one’s free tools included, runs inside the site it protects. When the site is taken over, so is the plugin: its settings belong to the intruder, and every attack it inspects has already reached PHP on your server. The managed edge runs one layer up, at Cloudflare’s edge, where a hacked WordPress cannot reach it. Connect it with an API key from the Account tab; every plan starts with a 14-day free trial.

Twelve shields, refused before PHP. Your server never boots PHP to turn a request away.

  • Login flood limit (10 attempts per 10 minutes per address)
  • Comment flood limit (5 posts per 5 minutes per address)
  • Search flood limit (30 searches per 5 minutes per address)
  • XML-RPC block, on by default (a 404 at the edge, cached for five minutes), with a switch to allow it
  • Login country lock (wp-login answers only the countries you list)
  • wp-admin IP lock (your own addresses, with a self-lockout guard and an email rescue)
  • AI-crawler block (GPTBot, ClaudeBot, CCBot and friends; search engines never affected)
  • Stray-PHP lock (every .php request except the real WordPress entry points gets a 404)
  • WordPress surface lock (the REST users list, ?author=N, readme.html, license.txt, the installer, debug.log)
  • Security-headers pack (HSTS, nosniff, frame and referrer policies; your own values win)
  • Traversal guard (a request carrying a parent-directory sequence, in any encoding, gets a 404)
  • Scanner lockout (five refusals in ten minutes and the address gets a 403 for ten minutes)

All of them come with every managed plan. The stray-PHP lock, the surface lock, the traversal guard and the scanner lockout have a monitor mode that lists what blocking would have stopped before it blocks anything.

Three locks, nothing inside the site can turn off. A takeover of your WordPress admin owns every plugin’s settings page. Ours refuses to act on WordPress’s say-so.

  • Change lock: any change that weakens protection waits for a click on a link mailed to the license holder; the link applies exactly that change, once.
  • Install lock: plugin and theme installs, uploads, updates, deletes and the file editors are refused site-wide until a 15-minute window is opened the same way. Automatic updates and WP-CLI run on the server and are never affected.
  • Origin lock: the edge stamps a per-site secret on every request it forwards and the plugin refuses code changes that arrive without it, so knowing the server’s address is no longer a way around the locks. A self-test reports whether the server enforces it.

Evidence: who did what, from where.

  • Refused installs named by plugin, and every refused attempt in your inbox as it happens.
  • A lock activity log with time and address for every unlock request, clicked link, confirmation and lock change.
  • An attack-surface strip per fortnight, a monthly report by email, and for agencies a posture matrix across every site.

Underneath all of it, Cloudflare’s managed WAF rulesets, including the WordPress rule set, run in front of every managed site.

Pages served from the edge (managed)

Full-page HTML caching with surgical purge: only the pages featuring a changed post refresh, never the whole cache.

  • Surrogate-Key / Cache-Tag headers on every cacheable page; purges go to Nivoli, Fastly, Cloudflare Enterprise or your own webhook.
  • Logged-in visitors, carts and checkout always bypass.
  • Stylesheets, scripts and fonts from the edge too, on versioned addresses, so no browser or CDN node holds a stale file after a purge.
  • Origin shield: if your server goes down, the edge keeps serving the last good copy of every cached page, for up to a day on Shield and up to 7 days on Shield Plus and Agency, and emails you when it engages and when the origin recovers.

Images served from the edge (managed)

With the Managed Images add-on, right-sized WebP and AVIF variants are created once at the edge and served from the node nearest each visitor: no Cloudflare account, no uploads, no duplicate copies, no theme changes. Without it, your images serve from your own server, untouched, and the free image tools keep working.

  • Broken and heaviest images found from real traffic at the edge, with where each is used and one-click fixes.

The numbers, inside WP admin (managed)

  • What the edge answered and what it refused, by window, with the most-requested and most-missed URLs.
  • Dead URLs on a Recent 404s page with one-click redirect or block; a Search Console 404 export imported, matched to your own pages and turned into redirect and block rules family by family; All rules: one ordered list of every edge rule with per-rule counts and reordering.
  • Audience without a tracking script: humans versus bots, countries, referrers, devices, served-from-cache speed.
  • Static assets: edge hit rate per file type and which files still travel on plain addresses.
  • A monthly report by email, white-label copies for clients on Agency.

Requirements

  • Free security tools: nothing. The security check, Code at login and Hardening work on any WordPress 6.2+ site.
  • Free image and page-cache tools: a Cloudflare zone with Image Resizing enabled for the image half (Pro+ plan or per-1000 pricing); a tag-aware edge (Fastly / CF Enterprise / your webhook) for the page-cache half. If Image Resizing isn’t enabled the rewritten URLs 404; Images Pipeline check has a one-click probe to verify.
  • Managed: none of the above for pages and security; for images, the Managed Images add-on. An API key from your Nivoli account, plus the DNS records the setup pane shows to put the site behind the edge.

External services

The free tier’s core image rewriting sends no data to any external service; it only rewrites <img> URLs in your site’s HTML so browsers fetch through your own Cloudflare zone. Beyond that, the plugin contacts external services only for the specific, opt-in features listed below.

Nivoli managed edge (api at html-caching-admin.nivoli.workers.dev, dashboard at console.nivoli.com): used only if you enter an API key. On activation and on a daily background re-check it sends your API key, this site’s URL, the plugin version, and the list of broken-image file paths you have marked handled (so the monthly report can exclude them; these are addresses the CDN already sees in its own traffic) to validate the key and provision your managed CDN/page-cache tenant; it then reads back the aggregate usage statistics shown on the dashboard. When content changes it sends the cache tags of the affected pages, so only those pages are purged. After each security check it sends the titles of any findings the check marked exposed (no paths or values), so the monthly report can list them. The page cache, stats and purge endpoint lives under console.nivoli.com. If you configure monthly reports or alerts, the recipient email address and optional report branding (a name and logo URL) are stored with your account. No visitor data is ever sent. Terms: https://nivoli.com/terms · Privacy: https://nivoli.com/privacy

Cloudflare (api.cloudflare.com): used only if you configure the Cloudflare Enterprise page-cache backend with your own API token, to dispatch tag-based cache purges when your content changes. Terms: https://www.cloudflare.com/terms/ · Privacy: https://www.cloudflare.com/privacypolicy/

Fastly (api.fastly.com): used only if you configure the Fastly page-cache backend with your own API token, to dispatch surrogate-key purges on content change. Terms: https://www.fastly.com/terms/ · Privacy: https://www.fastly.com/privacy/

TinyPNG / Tinify (api.tinify.com): used only if you add your own Tinify API key and click “Shrink original” on an image, to compress that source file. Only the image you choose is sent. Terms & Privacy: https://tinify.com/terms

Screenshots

Installation

  1. Install and activate the plugin. Open Nivoli Edge Security Security check and run it: no setup, no account. Code at login and Hardening sit beside it.
  2. Free images on your own Cloudflare zone: open Images Hosts & routing, confirm the auto-detected image host and path prefix, then switch Enabled on under Images Optimization. Add rules under Images Rules, or let Size mapping create them from your theme’s sizes in one click.
  3. Free page caching on your own edge: open Pages Cache backend and pick Fastly, Cloudflare Enterprise or a webhook.
  4. Managed edge: paste your API key on the Account tab. The edge provisions itself and the setup overview walks the rest: the DNS records, the shields, the locks, the report.

FAQ

Is the free version limited?

No trial, no time limit and no feature walls. Everything that runs on your own server is free and stays free: the security check, Code at login, Hardening, the image tools on your own Cloudflare zone, page-cache purging to your own edge, the audits and WP-CLI. The managed edge is a separate service for what a plugin cannot do from inside the site it protects.

Do I need an account?

Not for anything free. The security tools work on any WordPress site as soon as the plugin is active. An account and API key only come in when you connect the managed edge.

Does this replace Wordfence or Sucuri?

It sits above them. Those plugins inspect requests inside WordPress, after PHP has started; Nivoli Edge refuses hostile traffic at Cloudflare’s edge before your server sees it, and its settings cannot be switched off from inside a compromised WordPress. Run both if you like; they do not overlap.

What do the twelve shields stop?

Login, comment and search floods, XML-RPC abuse, logins from countries you do not serve, wp-admin from addresses that are not yours, AI crawlers, direct requests to PHP files that are not WordPress entry points, the probes that map a site (user lists, readme, license file, installer, debug.log), path traversal attempts in any encoding, addresses that keep probing after five refusals, and missing security headers. All twelve come with every managed plan.

Does this require Cloudflare Pro?

Only for the free image rewriting on your own zone: Cloudflare Image Resizing is bundled with Pro plans or available pay-as-you-go. The managed edge needs no Cloudflare account at all.

Will this break my theme?

No. The plugin only modifies URLs at the filter boundary; the HTML structure your theme outputs is unchanged. Use the no-cf CSS class on any element to opt out.

How is this different from Smush / ShortPixel / Optimole?

Those plugins compress and re-host images on their own CDN. Nivoli Edge transforms on the fly from your origin: no asset duplication, no migration step, no storage bill.

What’s the difference between Free and Managed?

Everything the plugin does on your own server is free and fully functional: the security check, Code at login, Hardening, image rewriting, page-cache purging, audits, prewarming and alerts. Nothing phones home. An API key connects the plugin to the Nivoli managed edge: we run the Cloudflare zone and page cache for you (no Cloudflare setup at all) and the service adds what a plugin alone can’t, such as edge-side usage statistics, per-URL traffic insights, edge URL rules and security shields, and multi-site fleet management; custom image hostnames and watermarking come with the Managed Images add-on.

What if I lose access to my license email?

Confirmation and unlock links go to the email address on your Nivoli license and nowhere else; that is what makes the locks hold against a takeover. Support can move the license to a new address after verifying you own it. Until then the locks stay as they are and the site keeps running; only changes that weaken protection wait.

Does the install lock break automatic updates?

No. Automatic background updates run from wp-cron on your server and WP-CLI runs on the box; neither passes through the edge, so neither is affected. Only installs, uploads, updates and deletes started from wp-admin are refused, and you open a 15-minute window by email when you want to do one yourself.

What if my site gets hacked anyway?

The locks stop the intruder from switching the shields off, installing anything through WordPress, or redirecting the confirmation address, and every attempt lands in your inbox and on the Locks page with its time and address. What no edge control can do is undo code already running on your server: cleaning the box is still yours (scan, restore, rotate). The locks make sure the compromise stays where it landed.

Does the page caching conflict with my security plugin (Wordfence, Sucuri)?

No. Different layers: security plugins inspect requests inside WordPress/PHP; Nivoli Edge’s twelve shields run at Cloudflare’s edge, before the request reaches your server. It sheds junk traffic so your origin and your security plugin only see real visitors. They complement each other.

Does the plugin add a link to my site?

Not unless you ask it to. Account, Footer credit has a switch, off by default, that prints one small “Protected by Nivoli Edge” line in your footer with a nofollow link. Nothing appears on your public site until you tick it, and unticking it removes the line again.

Do I need to change my nginx / web-server config?

Only if your origin runs its own micro-cache (nginx fastcgi/proxy cache, Varnish) and you use the manual purge trigger; the Cache protection pane shows the exact one-line snippet. A standard PHP-FPM origin needs no server changes at all.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“Nivoli Edge” is open source software. The following people have contributed to this plugin.

Contributors

Translate “Nivoli Edge” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

Recent releases are listed below. The full history for every version is in CHANGELOG.md, which ships with the plugin, and on the GitHub releases page.

1.92.1

The WordPress.org listing now leads with what the free plugin does on its own: the security check, Code at login and one-click Hardening, then the free image and page-cache tools, with the managed edge as what to add when you want more. New answers for “Is the free version limited?” and “Do I need an account?”. No change to the plugin itself.

1.92.0

The Nivoli Edge item in the WordPress sidebar now carries a red count when something waits for you, like Comments or Plugins: exposed security-check findings, a change waiting for your emailed click, shields still monitoring, broken, heavy or fake images, a license that needs attention. Each tab entry under it shows its own count, the same numbers as the dots on the tabs. The first entry is now called Overview, like the tab.

1.91.0

XML-RPC has a switch again on the Edge shields pane, and this one the edge obeys. The block is on by default; “Allow XML-RPC” opens /xmlrpc.php for sites that publish through the Jetpack app or the WordPress mobile app, or want pingbacks, and “Block XML-RPC” closes it again. With the change lock on, allowing waits for the emailed confirmation. The security check’s “Switch on at the edge” button for XML-RPC is back.

1.90.2

XML-RPC on the Edge shields pane now reports what the edge does. The edge refuses /xmlrpc.php on every enabled site with a 404, cached for five minutes, before any URL rule runs, so a site without the old 410 rule no longer reads “not blocked”. The “Block XML-RPC (410)” switch is gone because it changed nothing; a 410 rule already in your list stays. The security check no longer offers “Switch on at the edge” for XML-RPC.

1.90.1

Accuracy pass over the listing and the plugin’s own wording. The listing names all twelve shields, says how long Origin Shield serves on each plan (up to a day on Shield, 7 days on Shield Plus and Agency), uses the current tab names in the install steps, and its External services section now also covers the cache tags sent on purge and the finding titles sent after a security check. The plan card on free installs no longer says Shield Plus adds shields: every plan has every shield and lock. XML-RPC is described as what the edge really answers, a 404 cached for five minutes. WP-CLI help shows wp nivoli-edge examples.

1.90.0

New under Account, Your site: Footer credit, an optional small “Protected by Nivoli Edge” line at the bottom of your public pages. It is off unless you switch it on, the link is always nofollow, and it never shows in wp-admin, feeds or API responses. Themes can move or restyle it with two filters.

1.89.5

Code at login: room between its blocks, and the expected list shows every item, one line each under its source with a count, instead of merging them into one line per source.

1.89.4

Fixes Code at login drawing twice and the Edge shields pane appearing underneath it.

1.89.3

Code at login: more room between cards, the level shown as a coloured pill, and where the code lives set out one fact per line: from, file with its line range, the shared copy it links to, last changed.

1.89.2

Code at login recognises must-use files, plugins and themes that are links to a shared copy on the server, recognises login logging, and treats clean code from outside WordPress as something to confirm rather than an alarm. Every item that needs a decision can be accepted; an install lock that is already on shows as good news; rows are separated by thin lines.

1.89.1

Code at login reads more clearly: each card has a Danger signs row that says Found or None found, the install lock advice follows whether your lock is already on, paths and function names stand out, and the code view no longer doubles its lines.

1.89.0

New under Security, Check: Code at login. It lists every piece of code that takes part in logging in, in the Users screen or in the plugin list, says in plain words what each does and who put it there, and sorts it into expected, yours to confirm and act now. Act now comes with clean-up steps and the install lock; anything you recognise can be accepted and comes back only if its code changes.

1.88.0

The security check’s login hooks finding now names each function and its line, reads what the function does, and says what to do: an ordinary theme feature (log in with an email address) gets steps to check and accept it; code that sends data out, writes files, mails or stores what was typed is marked exposed, with what to do about a compromised site.