=== Stop User Enumeration === Contributors: alanfuller, fullworks Donate Link: https://www.buymeacoffee.com/wpdevalan Tags: User Enumeration, Security, WPSCAN, fail2ban, security Requires at least: 6.3 Tested up to: 6.6 Requires PHP: 7.4 Stable tag: 1.6.3 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Helps secure your site against hacking attacks through detecting User Enumeration == Description == Stop User Enumeration is a security plugin designed to detect and prevent hackers scanning your site for user login names. User Enumeration is a type of attack where nefarious parties can probe your website to discover your login name. This is often a pre-cursor to brute-force password attacks. Stop User Enumeration helps block this initial attack and allows you to log IPs launching these attacks to block further attacks in the future. Tools like WPSCAN are designed for use by ethical hackers and make efforts to find user login names. Ethical hackers ask permission first, this plugin is designed to reduce the tools when used without permission and when used in conjunction with fail2ban can block those attempts at the firewall. If you are on a VPS or dedicated server, as the attack IP is logged, you can use (optional additional configuration) fail2ban to block the attack directly at your server's firewall, a very powerful solution for VPS owners to stop brute force attacks as well as DDoS attacks. If you don't have access to install fail2ban ( e.g. on a Shared Host ) you can still use this plugin. The plugin can stop the user id being leaked by the oEmbed API call. Since WordPress 4.5 user data can also be obtained by API calls without logging in, this is a WordPress feature, but if you don't need it to get user data, this plugin will restrict and log that too. Since WordPress 5.5 sitemaps are generated by core WP ( wp-sitemap.xml ) which includes a user/author sitemap that exposes the user id. You can enable / disable this in the plugin settings. = PHP 8.2 compatible = Tested on PHP 8.2 = Features Include = * Blocks user enumeration requests by GET or POST * Syslogs a block so Fail2Ban can be used to block an IP * Optionally blocks REST API user requests for non authorized users * Optionally removes author sitemap * Optionally removes author from OEMBED * Optionally removes numbers from comment authors == Installation == This section describes how to install the plugin and get it working. [youtube https://youtu.be/jZxZFoYOGY0 ] Either using the dashboard 'Add Plugin' feature to find, install and activate the plugin, or 1. Download and the plugin from the download link 2. Upload the entire stop-user-enumeration directory to your website's /wp-contents/plugins/stop-user-enumeration using a file manager or FTP 3. Activate the plugin through the Plugins menu == Frequently asked questions == = It doesn't seem to work! == Are you logged in? This plugin won't do anything for logged in users, it only works when you are logged out. This is the way it is designed. A common mistake is to install the plugin and test it, while still logged in as admin. = My username still seems to be leaked! == Themes and xml feeds will include your user 'Display Name'. If you do not specify any name details or nick name, the 'Display Name' will default to your user login name. Make sure your Display Name is always set NOT to your user name or it will be leaked in multiple places. = Are there any settings? = Yes, but the default ones are fine for most cases = This doesn't work with PHP 5.2! = This plugin does not support PHP 5.2. PHP 5.2 is very old and you really need to sort out your hosting, running version of software way past its supported end of life is a security risk. = Will it work on Multisite? = Yes = Why don't I just block with .htaccess = A .htaccess solution is insufficient for several reasons, but most published posts on the subject do not cover POST blocking, REST API blocking and inadvertently block admin users access. And don't log the IP to a firewall, the major benefit! = Does it break anything? = If a comment is left by someone just giving a number that comment would be forbidden, as it is assumed a hack attempt, but the plugin has a bit of code that strips out numbers from comment author namesa1 Also usernames containing numbers may not work in the front end. Additionally the default rule for Rest APi is anything with users in it, so other plugins may set up endpoints. = How can I change the Rest API match rules = There are two filters `stop_user_enumeration_rest_stop_match` set to `/users/i` by default and `stop_user_enumeration_rest_allow_match` set to `simple-jwt-login` by default ( to allow that plugin's endpoints ) = Do I need fail2ban for this to work? = No, but fail2ban will allow you to block IP addresses at your VPS / Dedicated server firewall that attempt user enumeration. = What is the fail2ban config?= An fail2ban config file, wordpress-userenum.conf is found in the plugin directory stop-user-enumeration/fail2ban/filter.d = What needs to go in the fail2ban jail.local?= An example jail.local is found in plugin directory stop-user-enumeration/fail2ban = How can I report security bugs? = You can report security bugs through the Patchstack Vulnerability Disclosure Program. The Patchstack team help validate, triage and handle any security vulnerabilities. [Report a security vulnerability.](https://patchstack.com/database/vdp/stop-user-enumeration) == Upgrade Notice == == Changelog == = 1.6.3 = * fix warning with die = 1.6.2 = * set wp_die to return 403 * added defer to script = 1.6.1 = * updated tested to 6.6 = 1.6 = * change getenv to $_SERVER for better compatability * added extra sanitization to meet current plugin repo standards * allow exception for Simple JWT Login rest route and add filters to adjust match and exception of rest rules = 1.5.0 = * remove admin notifications for reviews and donations [Full Change History](https://plugins.trac.wordpress.org/browser/stop-user-enumeration/trunk/changelog.txt)