# WP Cerber Security, Anti-spam & Malware Scan

`meteorgpl-plugin/wp-cerber` — a WordPress plugin as a Composer package.

Defends WordPress against hacker attacks, spam, trojans, and viruses. Malware scanner and integrity checker. Hardening WordPress with a set of comprehensive security algorithms. Spam protection with a sophisticated bot detection engine and reCAPTCHA. Tracks user and intruder activity with powerful email, mobile and desktop notifications.

- Author: Cerber Tech Inc. — https://talk.wpcerber.com
- Homepage: https://wpcerber.com
- License: not declared
- Buy a license from the vendor: https://wpcerber.com
- Page: https://meteorgpl.com/packages/meteorgpl-plugin/wp-cerber
- Requires WordPress: 5.8
- Tested up to WordPress: 7.1
- Requires PHP: 7.4
- Vendor: Cerber Tech Inc. — https://meteorgpl.com/vendors/wpcerber.com

## About

Defends WordPress against hacker attacks, spam, trojans, and malware. Mitigates brute-force attacks by limiting the number of login attempts through the login form, XML-RPC / REST API requests, or using auth cookies. Tracks user and bad actors activity with flexible email, mobile and desktop notifications. Stops spammers by using a specialized anti-spam engine. Uses Google reCAPTCHA to protect registration, contact, and comments forms. Restricts access with IP Access Lists. Monitors the website integrity with an advanced malware scanner and integrity checker. Reinforces the security of WordPress with a set of flexible security rules and sophisticated security algorithms.

**Security Features To Fortify Your WordPress**

* Limit login attempts when logging in by IP address or entire subnet.
* Monitors logins made by login forms, XML-RPC requests or auth cookies.
* Permit or restrict access by [IP Access Lists](https://wpcerber.com/using-ip-access-lists-to-protect-wordpress/) with a single IP, IP range or subnet.
* Create **Custom login URL** ([rename wp-login.php](https://wpcerber.com/how-to-rename-wp-login-php/)).
* Cerber anti-spam engine for protecting contact and registration forms.
* Automatically detects and moves spam comments to trash or denies them completely.
* [Manage multiple WP Cerber instances from one dashboard](https://wpcerber.com/manage-multiple-websites/).
* [Two-Factor Authentication for WordPress](https://wpcerber.com/two-factor-authentication-for-wordpress/).
* Logs users, bots, hacker and other suspicious activities.
* Security scanner verifies the integrity of WordPress files, plugins and themes.
* Monitors file changes and new files with email notifications and reports.
* [Mobile and email notifications with a set of flexible filters](https://wpcerber.com/wordpress-notifications-made-easy/).
* Advanced users' sessions manager
* Protects wp-login.php, wp-signup.php and wp-register.php from attacks.
* Hides wp-admin (dashboard) if a visitor isn't logged in.
* Immediately blocks an intruder IP when attempting to log in with non-existent or prohibited username.
* Restrict user registration or login with a username matching REGEX patterns.
* [Restrict access to WP REST API with your own role-based security rules](https://wpcerber.com/restrict-access-to-wordpress-rest-api/).
* Block access to WordPress REST API completely.
* Block access to XML-RPC (block access to XML-RPC including Pingbacks and Trackbacks).
* Disable feeds (block access to the RSS, Atom and RDF feeds).
* Restrict access to XML-RPC, REST API and feeds by **White IP Access list** by an IP address or an IP range.
* [Authorized users only mode](https://wpcerber.com/only-logged-in-wordpress-users/)
* [Block a user account](https://wpcerber.com/how-to-block-wordpress-user/).
* Disable automatic redirection to the hidden login page.
* **Stop user enumeration** (blocks access to author pages and prevents user data leaks via REST API).
* Proactively **blocks IP subnet class C**.
* Anti-spam: **reCAPTCHA** to protect WordPress login, register and comment forms.
* [reCAPTCHA for WooCommerce & WordPress forms](https://wpcerber.com/how-to-setup-recaptcha/).
* Invisible reCAPTCHA for WordPress comments forms.
* A special Citadel mode for **massive brute force attacks**.
* [Play nice with fail2ban](https://wpcerber.com/how-to-protect-wordpress-with-fail2ban/): write failed attempts to the syslog or a custom log file.
* Filter out and inspect activities by IP address, user, username or a particular activity.
* Filter out activities and export them to a CSV file.
* Reporting: get weekly reports to specified email addresses.
* Limit login attempts works on a site/server behind a reverse proxy.
* [Be notified via mobile push notifications](https://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/).
* Trigger and action for the [jetFlow.io automation plugin](http://jetflow.io).
* Protection against (DoS) attacks (CVE-2018-6389).

= Limit login attempts done right =

By default, WordPress allows unlimited login attempts through the login form, XML-RPC or by sending special cookies. This allows passwords to be cracked with relative ease via brute force attack.

WP Cerber blocks intruders by IP or subnet from making further attempts after a specified limit on retries is reached, making brute force attacks or distributed brute force attacks from botnets impossible.

You will be able to create a **Black IP Access List** or **White IP Access List** to block or allow logins from a particular IP address, IP address range or a subnet any class (A,B,C).

Moreover, you can create your Custom login page and forget about automatic attacks to the default wp-login.php, which takes your attention and consumes a lot of server resources. If an attacker tries to access wp-login.php they will be blocked and get a 404 Error response.

= Malware scanner =

Cerber Security Scanner is a sophisticated and extremely powerful tool that thoroughly scans every folder and inspects every file on a website for traces of malware, trojans, backdoors, changed and new files.

[Read more about the malware scanner](https://wpcerber.com/wordpress-security-scanner/).

= Integrity checker =

The scanner checks if all WordPress folders and files match what exist in the official WordPress core repository, compares your plugins and themes with what are in the official WordPress repository and alerts you to any changes. As with scanning free plugins and themes, the scanner scans and verifies commercial plugins and themes that are installed manually.

= Scheduled Scans With Automatic File Recovery =

Cerber Security Scanner allows you to configure a schedule for automated recurring scanning easily. Once the schedule is configured the scanner automatically scans the website, deletes malware and recovers modified and infected WordPress files. After every scan, you can get an optional email report with the results of the scan.

[Read more about the scheduled scans](https://wpcerber.com/automated-recurring-malware-scans/).

= Two-Factor Authentication =

Two-Factor Authentication (2FA) provides an additional layer of security requiring a second factor of identification beyond just a username and password. When 2FA is enabled on a website, it requires a user to provide an additional verification code when signing into the website. This verification code is generated automatically and sent to the user by email.

[Read more about Two-Factor Authentication](https://wpcerber.com/wordpress/2fa/).

= Log, filter out and export activities =

WP Cerber tracks time, IP addresses and usernames for successful and failed login attempts, logins, logouts, password changes, blocked IP and actions taken by itself. You can export them to a CSV file.

= Limit login attempts reinvented =

You can **hide WordPress dashboard** (/wp-admin/) when a user isn't logged in. If a user isn't logged in and they attempt to access the dashboard by requesting /wp-admin/, WP Cerber will return a 404 Error.

Massive botnet brute force attack? That's no longer a problem. **Citadel mode** will automatically be activated for awhile and prevent your site from making further attempts to log in with any username.

= Cerber anti-spam engine =

Anti-spam and anti-bot protection for contact, registration, comments and other forms. WP Cerber anti-spam and bot detection engine now protects all forms on a website. No reCAPTCHA is needed. It’s compatible with virtually any form you have. Tested with Gravity Forms, Caldera Forms, HappyForms, Contact Form 7, Ninja Forms, Formidable Forms, Fast Secure Contact Form, Contact Form by WPForms.

= Anti-spam protection: invisible reCAPTCHA for WooCommerce =

* WooCommerce login form
* WooCommerce register form
* WooCommerce lost password form

= Anti-spam protection: invisible reCAPTCHA for WordPress =

* WordPress login form
* WordPress register form
* WordPress lost password form
* WordPress comment form

= Integration with Cloudflare =

A [special Cloudflare add-on for WP Cerber](https://wpcerber.com/cloudflare-add-on-wp-cerber/) keeps in sync the list of blocked IP addresses with Cloudflare IP Access Rules.

**Stay in compliance with GDPR**

How to get full control of personal data to be in compliance with data privacy laws such as GDPR in Europe or CCPA in California.

* [Personal data export feature](https://wpcerber.com/export-personal-data/)
* [Personal data erase feature](https://wpcerber.com/delete-personal-data/)
* [How WP Cerber processes browser cookies](https://wpcerber.com/browser-cookies-set-by-wp-cerber/)

**Documentation & Tutorials**

* [Configuring Two-Factor Authentication](https://wpcerber.com/two-factor-authentication-for-wordpress/)
* [How to set up notifications](https://wpcerber.com/wordpress-notifications-made-easy/)
* [Push notifications with Pushbullet](https://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/)
* [How to set up invisible reCAPTCHA for WooCommerce](https://wpcerber.com/how-to-setup-recaptcha/)
* [Changing default plugin messages](https://wpcerber.com/wordpress-hooks/)
* [2FA alternatives to the Clef plugin](https://wpcerber.com/two-factor-authentication-plugins-for-wordpress/)
* [Why reCAPTCHA does not protect WordPress from bots and brute-force attacks](https://wpcerber.com/why-recaptcha-does-not-protect-wordpress/)

**Translations**

* Czech, thanks to [Hrohh](https://profiles.wordpress.org/hrohh/)
* Deutsche, thanks to mario, Mike and [Daniel](http://detacu.de)
* Dutch, thanks to Jos Knippen and [Bernardo](https://twitter.com/bernardohulsman)
* Français, thanks to [hardesfred](https://profiles.wordpress.org/hardesfred/)
* Norwegian (Bokmål), thanks to [Eirik Vorland](https://www.facebook.com/KjellDaSensei)
* Portuguese (Portugal), thanks to Helderk
* Portuguese (Brazil), thanks to [Felipe Turcheti](http://felipeturcheti.com)
* Spanish, thanks to Ismael Murias and [leemon](https://profiles.wordpress.org/leemon/)
* Український, thanks to [Nadia](https://profiles.wordpress.org/webbistro)
* Русский, thanks to [Yui](https://profiles.wordpress.org/fierevere/)
* Italian, thanks to [Francesco Venuti](http://www.algostream.it/)
* Swedish, thanks to Fredrik Näslund

Thanks to [POEditor.com](https://poeditor.com) for helping to translate this project.

**Compatibility is not verified**

There are some plugins that were not checked to be compatible: Login LockDown, Login Security Solution, BruteProtect, Ajax Login & Register, Lockdown WP Admin, Loginizer, Sucuri, Wordfence, BulletProof Security, SiteGuard WP Plugin, iThemes Security, All In One WP Security & Firewall, Brute Force Login Protection

**Another reliable plugins from the trusted author**

* [Plugin Inspector reveals issues with installed plugins](https://wordpress.org/plugins/plugin-inspector/)

Checks plugins for deprecated WordPress functions, known security vulnerabilities, and some unsafe PHP functions

* [Translate sites with Google Translate Widget](https://wordpress.org/plugins/goo-translate-widget/)

Make your website instantly available in 90+ languages with Google Translate Widget. Add the power of Google automatic translations with one click.

## Changelog

### 9.10

Security: Two-factor authentication is now protected against PIN distributed brute-force attacks with per-account rate limiting. Each account can receive at most 5 new 2FA challenges per rolling hour and 10 per rolling 24 hours.
Security: When an account exceeds a 2FA challenge limit, WP Cerber blocks new sign-ins to that account for 24 hours and notifies the account owner of a possible password compromise.
Security: Hostnames obtained through reverse DNS lookups are now treated as untrusted data and escaped every time they are displayed in the admin area.
Security: Fixed a REST API user enumeration bypass. With "Block access to users' data via REST API" enabled, visitors blocked from the standard users route could still get the user list by changing the letter case or adding a trailing backslash or newline.
Fixed: A `rest_route` query parameter passed as an array, such as `?rest_route[]=x`, caused an uncaught `TypeError` (HTTP 500) in `CRB_Request::get_rest_api_path()`. WP Cerber now leaves such requests to WordPress, as on a site without WP Cerber.
Fixed: The "BLOCKED" and "PROHIBITED" user status labels and the red highlighting of usernames were missing on the WordPress "Users" admin page after a change in the WordPress Users table markup. They are displayed again.
Fixed: The GDPR personal data export now reports Activity log read errors. Previously, a database error could make the export state that no activity was logged or end the export early.
Fixed: The GDPR personal data erasure no longer confirms that data was erased when a database error prevents WP Cerber from verifying that Activity log records were removed.
Improved: WP Cerber now recognizes the core REST API users routes the same way WordPress dispatches them: regardless of letter case, with trailing slashes and backslashes removed, and with one trailing newline allowed. All requests that were blocked before remain blocked.

### 9.9.5

Improved: A setting link in admin UI now opens the matching role tab in the role-based settings and highlights the target setting, so you can jump from an Activity log event straight to the setting that affected WP Cerber's decision.
Improved: Following a setting link from a popup explainer now centers the target WP Cerber setting in the browser window instead of aligning it with the top of the page, where the WordPress admin bar could cover it.
Changed: URL escaping in the admin interface now accepts root-relative URLs that begin with a single slash, in addition to the already supported HTTP(S), FTP(S), and mailto URLs.
Changed: Admin announcements are now stored as structured JSON instead of pre-rendered HTML markup. A stored announcement that does not match the supported format is rejected instead of being displayed incorrectly.
Fixed: On the Activity log page, when several explainers described events for the same user and WP Cerber's decision was role-based, only the first setting link scrolled to and highlighted the target setting. The remaining links opened the settings page without scrolling to the target setting.
Fixed: The "Mail Transport" settings section displayed the raw HTML markup for the "Available in the professional version of WP Cerber" link instead of a working link.
Fixed: Non-ASCII characters in a URL path are no longer removed when WP Cerber escapes a URL, so URLs with non-ASCII path characters now point to the intended address.
Fixed: A URL containing invalid UTF-8 no longer becomes an empty link address when WP Cerber escapes it.
Changed: Quotes, angle brackets, and backticks are no longer deleted from URLs in admin pages. HTML escaping of the attribute value now handles these characters safely.

### 9.9.3

Fixed: When error logging was active, an uncaught PHP failure such as an unhandled exception, a type error, or a parse error could stop the standard PHP fatal error processing. WordPress can again show its critical error page, send the Recovery Mode email, and revert a broken PHP edit made in the built-in plugin or theme editor.
Fixed: Uncaught PHP exceptions and other fatal failures could be missing from the WordPress `debug.log` file when `WP_DEBUG_LOG` was enabled.
Fixed: Not all PHP errors were logged for a request. A fatal error that terminated the request could be replaced by a later diagnostic produced by WP Cerber's own shutdown routines, so the terminating error was missing from the request details in Traffic Inspector and from `cerber-errors.log`.
Fixed: On a non-English website, the issue message reporting a failed email delivery could be shown in the language of the request that failed to send the email, which is usually an unattended request such as a scheduled report or a visitor-triggered alert. The message is now translated into the language of the administrator who reads it.
Fixed: On a non-English website, the message reporting corrupted plugin settings and their recovery was shown untranslated. It is now translated at the moment it is displayed to the administrator.
Fixed: Some messages in the "System Readiness" widget were missing localization support and could not be translated.
Fixed: Rendering the quick navigation block in the admin area could produce `Array to string conversion` warnings when a query parameter carried more than one value. Depending on the PHP error configuration, these warnings could pollute the server logs, appear in the admin output, or corrupt an AJAX response.
Fixed: Some valid IPv6 ranges written in dash or wildcard notation were rejected when adding an entry to the IP Access Lists or filtering records in the Activity log and the Traffic log. Reversed and zero-length ranges are still rejected.
Fixed: IPv6 range matching now uses inclusive boundaries, so the first and the last address of a range are treated as part of that range.

### 9.9

New: WP Cerber now automatically maintains a backup copy of the last known valid plugin settings. The backup is refreshed after successful settings updates, settings imports, plugin upgrades, and during daily maintenance.
New: If the stored plugin settings become corrupted, WP Cerber now restores them automatically from the settings backup and shows a dismissible admin notice explaining what happened, what action was taken, and what the administrator should review.
New: The "System Readiness" widget now shows an advisory notice on servers where PHP is built without the modern `mysqlnd` database driver. The notice confirms that WP Cerber keeps working and recommends enabling `mysqlnd` for full compatibility and better performance.
Improved: Traffic Inspector now detects additional high-confidence JavaScript obfuscation patterns, including fully escaped strings that use `\uNNNN` and `\u{...}` escape sequences and dangerous execution, DOM, network, and system code decoded from explicit `fromCharCode()` calls, while preserving its low false-positive detection model.
Compatibility: WP Cerber now runs correctly on legacy hosting environments where PHP is built without the modern `mysqlnd` database driver. On such servers, database query results are retrieved through a slower compatible method instead of triggering a fatal error.
Fixed: A corrupted WP Cerber configuration value stored in the database could cause a fatal `TypeError` in `array_merge()` at plugin load time on PHP 8, taking the whole website down. WP Cerber now detects the unreadable stored value, falls back to the default settings, and reports the failure as a critical issue until the administrator re-saves the settings.
Fixed: A regression in the detection of obfuscated JavaScript by Traffic Inspector. JavaScript strings built entirely of `\xNN` hex escape sequences were not decoded, so obfuscated code such as `eval`, `script`, and `XMLHttpRequest` could go undetected when request fields were inspected.

### 9.8.3

New: The Activity log and Traffic log CSV exports now report the date range they cover, adding the oldest and newest record timestamps to the export header.
Improved: Activity log and Traffic log CSV exports now stream matching rows in a single unbuffered pass, keeping memory usage flat and avoiding deep-offset scanning, which makes exporting large logs faster and more reliable.
Improved: Activity log and Traffic log exports now send the `X-Accel-Buffering: no` response header so an Nginx proxy in front of PHP-FPM forwards each chunk immediately instead of buffering the whole export, improving time-to-first-byte on large exports.
Improved: Decoding of stored Traffic Inspector request field data is now more robust, consistently treating nullable legacy values, empty values, invalid JSON, and unsupported serialized payloads as an empty array.
Fixed: Corrected memory limit handling during Activity log and Traffic log exports, where a numeric limit such as `512` could be applied as bytes instead of megabytes, preventing WP Cerber from raising the available memory and causing exports to stop earlier than expected.
Fixed: In the Traffic Inspector Log "Advanced Search", combining the "Any software error" option with other filters could return requests with recorded PHP errors that did not match the other criteria; results now match all selected filters.
Fixed: Dashboard links in Activity alert notification emails could carry mismatched query parameters, for example the IP filter receiving an IP-range boundary value, which opened an unrelated filtered view; the links now use the correct values.
Fixed: Activity alerts that match on a search string now resolve the user of the logged event instead of falling back to the current administrator, so user-based alert matching behaves correctly.
Fixed: Prevented an undefined array key notice in `CRB_Activity::is_modified_since()` when the `data_modified` status value was missing, and corrected an operator-precedence error so a missing modification timestamp is correctly treated as modified.
Security: Sanitized user-controlled profile display names (first name, last name, and display name) before they are concatenated into `Name ` mail recipient strings, closing an email header injection vector that could add an extra recipient to the two-factor authentication PIN email and to Activity alert notification emails.
Security: Plugin ownership-change messages on the scanner page are now rendered through WP Cerber's UI layer with contextual output escaping instead of raw HTML, removing a potential stored admin XSS vector from externally supplied plugin ownership metadata provided by the WordPress.org plugin repository.
Security: Activity log and Traffic log CSV exports now send the `Cache-Control: no-store` response header to prevent a sensitive security-log export from being cached by the browser or an intermediate proxy.

Full changelog: https://meteorgpl.com/packages/meteorgpl-plugin/wp-cerber/changelog

## Install

```sh
composer config repositories.meteorgpl composer https://composer.meteorgpl.com
composer require meteorgpl-plugin/wp-cerber
```

The repository needs a token (see https://meteorgpl.com/docs). The vendor's license checks are intact: activate the plugin in WordPress with a key bought from the vendor.

## Versions

No version has been published yet.

