Login protection, a firewall, hardening, file scans, an activity log and WooCommerce store protection. Here's how to install the plugin, review the defaults, allowlist your own IP, and tune each protection to your site.
Upload the plugin zip and activate.
Open Security — sensible protections are on.
Add your own IP for peace of mind.
2FA roles, firewall, hardening, scans, Woo.
Demfilz Security is a lightweight security plugin for WordPress with protections built specifically for WooCommerce stores: brute-force lockouts and email two-factor on the login, a firewall with IP block/allow lists and malicious request filtering, hardening switches, core file integrity scans against the official wordpress.org checksums, a filterable activity log, and WooCommerce defences against card testing and fake orders. The WordPress protections work on any site — the WooCommerce features switch on automatically when WooCommerce is active.
You'll need: a WordPress site running WordPress 5.6+ and PHP 7.2+. WooCommerce is optional — the store protections activate automatically when it's present. Nothing else: the plugin makes no calls to Demfilz servers, and its only outbound request is to wordpress.org for core file checksums.
Plugins → Add New → Upload Plugin..zip, click Install Now, then Activate.Sensible protections are already on the moment you activate — you don't have to configure anything for the basics to work. Open Security and walk through each tab so you know what's running on your site.
On the Firewall tab, add your own IP address to the allowlist (CIDR ranges are supported). This is the recommended first move for peace of mind — it keeps you clear of lockouts and firewall rules while you experiment with the settings.
wp-login.php, XML-RPC and the WooCommerce My Account login.Two-factor and apps: password-only logins over XML-RPC and the REST API are refused for two-factor users — otherwise a stolen password could bypass the emailed code. Create an application password (Users → Profile) for apps that need API access; those continue to work.
?author=N probing and hides the REST users endpoint from visitors.Enable “Behind a trusted proxy” on the Firewall tab so the real client IP is used. For Cloudflare, set the header to CF-Connecting-IP (recommended) — it carries a single, proxy-set client IP that cannot be spoofed. True-Client-IP and X-Real-IP work the same way. Only turn this on when a proxy you control fronts all traffic.
If you must use X-Forwarded-For (which can contain several addresses), also fill in Trusted proxy IPs with your proxy or load-balancer ranges. The plugin then skips those and takes the nearest address your infrastructure did not add, so a client cannot forge their IP by prepending fake entries. Leaving it on X-Forwarded-For without listing your proxies can either let attackers evade per-IP blocking or collapse every visitor onto one IP — use CF-Connecting-IP instead whenever you can.
wp-admin / wp-includes, and PHP files hiding in your uploads folder.Logins, failed logins, lockouts, firewall blocks, user and role changes, plugin and theme changes, core updates, password resets and scans all land in a filterable log. Set the retention to suit how much history you want to keep.
These settings appear when WooCommerce is active:
| Requirements | WordPress 5.6+ · PHP 7.2+ · WooCommerce optional (store protections switch on automatically). |
|---|---|
| Login | Per-IP lockouts with 24-hour escalation, email two-factor by role, honeypot, generic errors; covers wp-login.php, XML-RPC and the WooCommerce My Account login. |
| Firewall | IP block/allow lists (CIDR), malicious request filtering, optional attack-tool UA blocking, enumeration blocking, XML-RPC off-switch, trusted-proxy support. |
| Scanning | Core files vs official api.wordpress.org checksums, daily/weekly + manual, email alerts. |
| Emergency access | Lockouts expire (20 min default); rename the plugin folder over FTP/SFTP; define( 'DSEC_DISABLE_2FA', true ); in wp-config.php disables two-factor. |
| Data | No calls to Demfilz servers; the only outbound request is to wordpress.org for checksums. |
Lockouts expire automatically — 20 minutes by default. To get in immediately, connect over FTP/SFTP and rename the plugin folder, which deactivates the plugin (rename it back once you're in).
Use the emergency off-switch: add define( 'DSEC_DISABLE_2FA', true ); to wp-config.php to disable two-factor, log in, fix your email delivery, then remove the line.
The signatures are deliberately conservative (path traversal, <script, SQL UNION SELECT, code-execution probes) and logged-in administrators are always exempt. If something on your site does trip it, you can disable the filter separately from the rest of the firewall.
Your CDN or proxy is masking the real client IP. Enable Behind a trusted proxy on the Firewall tab and set the header — CF-Connecting-IP for Cloudflare (recommended), or True-Client-IP / X-Real-IP. If you must use X-Forwarded-For, also list your proxy ranges under Trusted proxy IPs so clients can't forge their address. See the proxy section above.
Demfilz Security contacts one external service: the official api.wordpress.org checksums API, used by the file scanner to fetch the core file checksums for your exact WordPress version and locale. No other external services are contacted, no data about your site is sent anywhere, and the plugin makes no calls to Demfilz servers. This plugin is independent; “WordPress” is a trademark of the WordPress Foundation.
Security, payments, integrations or something custom — tell us what you need and we'll come back with a plan and a fixed quote.