Accept Application Passwords Only From Trusted IP Addresses
Rejects REST API and XML-RPC logins made with application passwords unless they come from the IP addresses or networks you list, such as your office, CI server or integration partner.
Snippet Library
Snippets that harden WordPress: turn off XML-RPC, hide the version number, stop user enumeration, add security headers and block risky uploads. Small, reviewable changes for site owners who want fewer attack points without a heavy security plugin.
Rejects REST API and XML-RPC logins made with application passwords unless they come from the IP addresses or networks you list, such as your office, CI server or integration partner.
Keeps Application Passwords available for administrators (for integrations and apps) but removes them for every other user.
Adds a "Current password" field to the profile screen and refuses changes to your own email address or password unless it is correct, so someone using an unattended logged-in browser cannot take over the account.
Rejects the most common passwords, and passwords containing the username or site name, when users set or reset their password.
Checks new passwords against the Have I Been Pwned database of breached passwords when users change or reset them, and asks for a different one if it appears there.
Removes the Application Passwords feature, which lets external apps authenticate to the REST API. Disable it if you do not use it.
Removes the XML-RPC system.multicall method, which attackers use to try hundreds of passwords in a single request, while XML-RPC keeps working for apps and Jetpack.
Emails the user and the site administrator whenever a new application password is created for an account, since these passwords give API access that bypasses the normal login.
Makes the cookie that remembers a protected post's password last only until the browser is closed, instead of the default 10 days, which matters on shared and public computers.
Shows the same "check your email" screen for unknown usernames and emails on the lost password form, so it cannot be used to find valid accounts.
Allows each visitor at most 10 password attempts on password-protected posts and pages every 15 minutes, which stops bots from brute-forcing the post password.
Allows only a few password reset requests per hour from the same IP address, which stops reset-email flooding.
Remembers the last five password hashes of each user and refuses a new password that matches one of them, on the profile screen and on password reset.
Shows administrators a reminder when they have not changed their password for 180 days.
Requires at least 12 characters with letters, numbers and a symbol or mixed case for users who can edit other people's content.
Adds a short tip about choosing a strong, unique password just above the MemberPress checkout button.