Blackhole for Bad Bots
✨ Trap bad bots in a virtual black hole Important: Do NOT use this plugin on sites with caching. Learn more » 👾 Bye bye bad bots.. Bad bots are the worst. They do all sorts of nasty stuff and waste server resources. The Blackhole plugin helps to stop bad bots and save precious resources for legit visitors. 👾 How does it work? First the plugin adds a hidden trigger link to the footer of your pages. You then add a line to your robots.txt file that forbids all bots from following the hidden link. Bots that then ignore or disobey your robots rules will crawl the link and fall into the trap. Once trapped, bad bots are denied further access to your WordPress site. I call it the “one-strike” rule: bots have one chance to obey your site’s robots.txt rule. Failure to comply results in immediate banishment. The best part is that the Blackhole only affects bad bots: human users never see the hidden link, and good bots obey the robots rules in the first place. Win-win! 🙂 ✨ Add a blackhole trap to help stop bad bots Important: Do NOT use this plugin on sites with caching. Learn more » 👾 Features Easy to set up Squeaky clean code Focused and modular Lightweight, fast and flexible Built with the WordPress API Works with other security plugins Easy to reset the list of bad bots Easy to delete any bot from the list Regularly updated and “future proof” Blackhole link includes “nofollow” attribute Plugin options configurable via settings screen Works silently behind the scenes to protect your site Whitelists all major search engines to never block Focused on flexibility, performance, and security Email alerts with WHOIS lookup for blocked bots Complete inline documentation via the Help tab Provides setting to whitelist any IP addresses Customize the message displayed to bad bots 😉 One-click restore the plugin default options Does NOT use or require any .htaccess rules Blackhole for Bad Bots protects your site against bad bots, spammers, scrapers, scanners, and other automated threats. ✨ Not using WordPress? Check out the standalone PHP version of Blackhole! 👾 Whitelist By default, this plugin does NOT block any of the major search engines (user agents): AOL.com Baidu Bingbot/MSN DuckDuckGo Googlebot Teoma Yahoo! Yandex These search engines (and all of their myriad variations) are whitelisted via user agent. So are a bunch of other “useful” bots. They always are allowed full access to your site, even if they disobey your robots.txt rules. This list can be customized in the plugin settings. For a complete list of whitelisted bots, visit the Help tab in the plugin settings (under “Whitelist Settings”). ✨ Check out Blackhole Pro and level up with advanced features! 👾 Exclusive Pro Features Option to disable for logged-in users Threshold control (number of allowed hits) Custom email alerts Custom messages for blocked bots Custom redirect for blocked bots Custom blackhole trigger links Complete inline documentation Block bots based on user agent Block bots based on IP address Whitelist/allow bots by user agent Whitelist/allow bots by IP address Redirect whitelisted bots Set custom HTTP Status Code Full-featured Bad Bot Log with paging, sorting, and field search Manually add bad bots to the Bad Bot Log Geo/IP location lookups for each bad bot Logs number of blocked hits for each bot ..plus everything the free version can do and more. ✨ Learn more and get Blackhole Pro » 👾 Privacy User Data: This plugin automatically blocks bad bots. When bad bots fall into the trap, their IP address, user agent, and other request data are stored in the WP database. No other user data is collected by this plugin. At any time, the administrator may delete all saved data via the plugin settings. Services: This plugin does not connect to any third-party locations or services. Cookies: This plugin does not set any cookies. Credit: Header Image Courtesy NASA/JPL-Caltech. Blackhole for Bad Bots is developed and maintained by Jeff Starr, 15-year WordPress developer and book author. 👾 Support development I develop and maintain this free plugin with love for the WordPress community. To show support, you can make a donation or purchase one of my books: The Tao of WordPress Digging into WordPress .htaccess made easy WordPress Themes In Depth Wizard’s SQL Recipes for WordPress And/or purchase one of my premium WordPress plugins: BBQ Pro – Blazing fast WordPress firewall Blackhole Pro – Automatically block bad bots Banhammer Pro – Monitor traffic and ban the bad guys GA Google Analytics Pro – Connect WordPress to Google Analytics Head Meta Pro – Ultimate Meta Tags for WordPress REST Pro Tools – Awesome tools for managing the WP REST API Simple Ajax Chat Pro – Unlimited chat rooms USP Pro – Unlimited front-end forms Links, tweets and likes also appreciated. Thank you! 🙂
WPVulnerability
This plugin integrates with the WPVulnerability API to provide real-time vulnerability assessments for your WordPress core, plugins, themes, PHP version, Apache HTTPD, nginx, MariaDB, MySQL, ImageMagick, curl, memcached, Redis, and SQLite. It delivers detailed reports directly within your WordPress dashboard, helping you stay aware of potential security risks. Configure the plugin to send periodic notifications about your site’s security status, ensuring you remain informed without being overwhelmed. Designed for ease of use, it supports proactive security measures without storing or retrieving any personal data from your site. Data reliability The information provided by the information database comes from different sources that have been reviewed by third parties. There is no liability of any kind for the information. Act at your own risk. Using the plugin WP-CLI You can use the following WP-CLI commands to manage and check vulnerabilities: Core: wp wpvulnerability core Plugins: wp wpvulnerability plugins Themes: wp wpvulnerability themes PHP: wp wpvulnerability php Apache HTTPD: wp wpvulnerability apache nginx: wp wpvulnerability nginx MariaDB: wp wpvulnerability mariadb MySQL: wp wpvulnerability mysql ImageMagick: wp wpvulnerability imagemagick curl: wp wpvulnerability curl memcached: wp wpvulnerability memcached Redis: wp wpvulnerability redis SQLite: wp wpvulnerability sqlite To configure the plugin you can use: Hide component: wp wpvulnerability config hide [on|off] Notification email: wp wpvulnerability config email (comma separatted) Notification period: wp wpvulnerability config period Log retention: wp wpvulnerability config log-retention (in days) Cache duration: wp wpvulnerability config cache (in hours) All commands support the --format option to specify the output format: --format=table: Displays the results in a table format (default). --format=json: Displays the results in JSON format. Need help? wp wpvulnerability --help: Displays help information for WPVulnerability commands. wp wpvulnerability [command] --help: Displays help information for a WPVulnerability command. REST API The WPVulnerability plugin provides several REST API endpoints to fetch vulnerability information for different components of your WordPress site. Core: /wpvulnerability/v1/core Plugins: /wpvulnerability/v1/plugins Themes: /wpvulnerability/v1/themes PHP: /wpvulnerability/v1/php Apache HTTPD: /wpvulnerability/v1/apache nginx: /wpvulnerability/v1/nginx MariaDB: /wpvulnerability/v1/mariadb MySQL: /wpvulnerability/v1/mysql ImageMagick: /wpvulnerability/v1/imagemagick curl: /wpvulnerability/v1/curl memcached: /wpvulnerability/v1/memcached Redis: /wpvulnerability/v1/redis SQLite: /wpvulnerability/v1/sqlite The WPVulnerability REST API uses Application Passwords for authentication. You need to include a valid Application Password in the Authorization header of your requests. Example Request with Authentication curl -X GET https://example.com/wp-json/wpvulnerability/v1/plugins -u username:application_password Replace username with your WordPress username and application_password with your Application Password. Extra Configurations “From:” mail (since: 3.2.2) If, for some reason, you need the emails sent by the plugin to have a From different from the site administrator, you can change it from the wp-config.php by adding a constant: define( 'WPVULNERABILITY_MAIL', 'sender@example.com' ); If the constant is active, it will be visible in the configuration screen. Force hiding checks (since: 4.1.0) If you want to always hide a specific component, you can define a constant in wp-config.php. When set to true, the option will be checked automatically in the settings screen and the related analysis will be skipped. Example: define( 'WPVULNERABILITY_HIDE_APACHE', true ); Available constants: WPVULNERABILITY_HIDE_CORE, WPVULNERABILITY_HIDE_PLUGINS, WPVULNERABILITY_HIDE_THEMES, WPVULNERABILITY_HIDE_PHP, WPVULNERABILITY_HIDE_APACHE, WPVULNERABILITY_HIDE_NGINX, WPVULNERABILITY_HIDE_MARIADB, WPVULNERABILITY_HIDE_MYSQL, WPVULNERABILITY_HIDE_IMAGEMAGICK, WPVULNERABILITY_HIDE_CURL, WPVULNERABILITY_HIDE_MEMCACHED, WPVULNERABILITY_HIDE_REDIS, WPVULNERABILITY_HIDE_SQLITE. Cache duration (since: 4.1.0) By default, data from the API is cached for 12 hours. To change this, define WPVULNERABILITY_CACHE_HOURS in wp-config.php with one of 1, 6, 12 or 24. This value overrides the setting screen and WP-CLI command. define( 'WPVULNERABILITY_CACHE_HOURS', 24 ); Log rotation (since: 4.2.0) WPVulnerability stores the most recent API responses so you can review recent calls from the new log tab. Define WPVULNERABILITY_LOG_RETENTION_DAYS in wp-config.php to control how many days of entries are preserved. Supported values are 0, 1, 7, 14 or 28; using 0 disables logging entirely. define( 'WPVULNERABILITY_LOG_RETENTION_DAYS', 14 ); When the constant is present its value is enforced in the settings UI and through WP-CLI, ensuring consistent log rotation across environments. Security configuration (since: 4.3.0) WPVulnerability uses a hybrid detection approach for server software (ImageMagick, Redis, Memcached, SQLite): PHP extensions first (most secure), then shell commands as fallback (most accurate). You can control this behavior using security configuration constants in wp-config.php. Global disable of shell commands: define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true ); Completely disables shell command usage. Falls back to PHP extensions only. Use for maximum security when accuracy loss is acceptable. Security mode (standard/strict/disabled): define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' ); standard – Hybrid detection: PHP extensions first, shell commands fallback (default, best accuracy) strict – PHP extensions only, no shell commands (high security, lower accuracy) disabled – No software detection at all (maximum security) Component whitelist: define( 'WPVULNERABILITY_SHELL_EXEC_WHITELIST', 'imagemagick,redis' ); Allows shell commands only for specified components. Available components: imagemagick, redis, memcached, sqlite. Use for granular control. Examples: Maximum security (no shell commands): define( 'WPVULNERABILITY_SECURITY_MODE', 'strict' ); Only allow ImageMagick shell detection: define( 'WPVULNERABILITY_SHELL_EXEC_WHITELIST', 'imagemagick' ); Complete disable: define( 'WPVULNERABILITY_DISABLE_SHELL_EXEC', true ); All shell commands are hardcoded and validated – no user input is involved. Commands are logged for security auditing. Compatibility WordPress: 4.7 – 7.1 PHP: 7.0 – 8.5 WP-CLI: 2.3.0 – 2.12.0 Security This plugin adheres to the following security measures and review protocols for each version: WordPress Plugin Handbook WordPress Plugin Security WordPress APIs Security WordPress Coding Standards Plugin Check (PCP) Privacy This plugin or the WordPress Vulnerability Database API does not collect any information about your site, your identity, the plugins, themes or content the site has. Vulnerabilities A security vulnerability was found and fixed in version 4.2.2.1. All previous versions (3.3.0 – 4.2.1) are affected. Please update to version 4.2.2.1 or later. Found a security vulnerability? Please report it to us privately at ROBOTSTXT. Contributors You can contribute to this plugin at the WPVulnerability repository.