{"id":609,"date":"2026-06-29T11:26:58","date_gmt":"2026-06-29T11:26:58","guid":{"rendered":"https:\/\/brutefort.com\/blog\/how-to-limit-login-attempts-wordpress\/"},"modified":"2026-07-15T13:48:09","modified_gmt":"2026-07-15T13:48:09","slug":"how-to-limit-login-attempts-wordpress","status":"publish","type":"post","link":"https:\/\/brutefort.com\/blog\/how-to-limit-login-attempts-wordpress\/","title":{"rendered":"How to Limit Login Attempts in WordPress (Step by Step)"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1126\" height=\"750\" src=\"https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/06\/pexels-photo-270557.jpeg\" alt=\"WordPress admin dashboard showing how to limit login attempts settings\" class=\"wp-image-608\" srcset=\"https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/06\/pexels-photo-270557.jpeg 1126w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/06\/pexels-photo-270557-300x200.jpeg 300w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/06\/pexels-photo-270557-1024x682.jpeg 1024w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/06\/pexels-photo-270557-768x512.jpeg 768w\" sizes=\"auto, (max-width: 1126px) 100vw, 1126px\" \/><figcaption>Photo by Pixabay from Pexels<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">A bot can hammer your WordPress login page with thousands of username and password combinations, and WordPress won&#8217;t push back once. There&#8217;s no built-in limit \u2014 every attempt just goes through.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s not something you&#8217;re missing in your settings. Rate limiting was simply never built into WordPress core, which is exactly why brute force attacks remain one of the most common ways WordPress sites get compromised.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adding a login attempt limit closes that gap and turns an unlimited attack surface into a dead end. This guide shows exactly how to set it up with BruteFort, plus the thresholds worth using for your site&#8217;s risk level.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Quick Answer:<\/strong> Install BruteFort, go to <strong>Settings \u2192 Rate Limit Settings<\/strong>, and set <strong>Max Allowed Attempts<\/strong> to 5 and <strong>Time Period<\/strong> to 30 minutes \u2014 the defaults that work for most sites. Click <strong>Save<\/strong> and the limit is active immediately, no code required.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Login Attempt Limiting Actually Does<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A login attempt limit \u2014 also called rate limiting \u2014 watches how many failed login attempts come from a single IP address within a defined time window. Once the threshold is crossed, that IP is locked out from the login page for a set period.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The effect on a brute force attack is immediate. A bot that could try hundreds of passwords per minute is suddenly limited to 5 attempts every 30 minutes. At that rate, cycling through even a modest credential list would take years. Most attack bots move on to easier targets the moment they hit a rate limit.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Rate limiting also protects against credential stuffing attacks \u2014 where real leaked username\/password pairs from data breaches are tried against your login. Even targeted attempts using real credentials are slowed to the point of being impractical.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to Set Up Login Attempt Limiting with BruteFort<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">BruteFort is a focused WordPress brute force protection plugin that handles rate limiting, login lockout, custom login URL, and IP management from a single settings panel. Install it from your WordPress dashboard under <strong>Plugins \u2192 Add New<\/strong> and search for BruteFort, then activate it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Once active, go to <strong>BruteFort \u2192 Settings \u2192 Rate Limit Settings<\/strong>. You&#8217;ll see three fields to configure:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Max Allowed Attempts<\/strong> \u2014 the number of failed logins allowed before lockout triggers. The default is 5, which is appropriate for most sites.<\/li><li><strong>Time Period<\/strong> \u2014 the rolling window in minutes during which those attempts are counted. Default is 30 minutes.<\/li><li><strong>Custom Error Message<\/strong> \u2014 the message shown to a locked-out IP. You can use the <code>{{locked_out_until}}<\/code> variable to insert the exact time the lockout expires.<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"415\" src=\"https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/Brutefort-General-Rate-Limits.webp\" alt=\"BruteFort General Rate Limits panel showing max attempts, time period, and custom error message fields\" class=\"wp-image-666\" srcset=\"https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/Brutefort-General-Rate-Limits.webp 1024w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/Brutefort-General-Rate-Limits-300x122.webp 300w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/Brutefort-General-Rate-Limits-768x311.webp 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Click <strong>Save<\/strong> and rate limiting is active immediately. No code changes, no server configuration.<\/p>\n\n\n\n<div class=\"wp-block-stackable-button-group stk-block-button-group stk-block stk-b4f19d8\" data-block-id=\"b4f19d8\"><div class=\"stk-row stk-inner-blocks stk-block-content stk-button-group\">\n<div class=\"wp-block-stackable-button stk-block-button stk-block stk-05c3a7e\" data-block-id=\"05c3a7e\"><style>.stk-05c3a7e .stk-button{background:#f13434 !important;border-top-left-radius:var(--stk--preset--border-radius--small, 4px) !important;border-top-right-radius:var(--stk--preset--border-radius--small, 4px) !important;border-bottom-right-radius:var(--stk--preset--border-radius--small, 4px) !important;border-bottom-left-radius:var(--stk--preset--border-radius--small, 4px) !important;}.stk-05c3a7e .stk-button:before{border-color:#0f0e17 !important;}<\/style><a class=\"stk-link stk-button stk--hover-effect-darken\" href=\"https:\/\/brutefort.com\/blog\/best-security-plugins-wordpress\/\"><span class=\"stk-button__inner-text\">Get BruteFort Now!<\/span><\/a><\/div>\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Configuring IP Lockout Behavior<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">BruteFort also has a dedicated Lockout Settings section where you can enable WordPress IP lockout after failed logins \u2014 a more persistent block for IPs that repeatedly trigger rate limits. This is useful for IPs that keep coming back after each temporary lockout expires.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"415\" src=\"https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/brutefort-lockout-settings.webp\" alt=\"BruteFort Lockout Settings showing enable lockout toggle, duration, and lockout extension\" class=\"wp-image-665\" srcset=\"https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/brutefort-lockout-settings.webp 1024w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/brutefort-lockout-settings-300x122.webp 300w, https:\/\/brutefort.com\/blog\/wp-content\/uploads\/2026\/07\/brutefort-lockout-settings-768x311.webp 768w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The Logs section in BruteFort records every lockout event with the IP address, failed attempt count, current status, and timestamp. This is your audit trail \u2014 if you&#8217;re seeing the same IP triggering lockouts repeatedly, you can move it to a permanent blacklist from the IP Settings tab.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Protecting Yourself from Getting Locked Out<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With aggressive rate limiting in place, there&#8217;s a small risk of accidentally locking yourself out if you mistype your password several times.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pro Tip:<\/strong> Whitelist your own IP address before enabling strict limits. Go to <strong>BruteFort \u2192 Settings \u2192 IP Settings<\/strong>, select <strong>WhiteList<\/strong> from the dropdown, enter your IP address, and click <strong>Add<\/strong>. Whitelisted IPs are exempt from rate limiting entirely.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you don&#8217;t have a static IP, consider whitelisting the IP range your ISP typically assigns to you, or use BruteFort&#8217;s Custom Login URL feature alongside rate limiting \u2014 a custom, unpredictable login slug means bots never even find your login form, reducing the chance of legitimate mistype lockouts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What Thresholds to Use<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">For most WordPress sites, 5 attempts per 30 minutes is the right starting point. It&#8217;s strict enough to stop automated attacks cold while still accommodating a real user who genuinely misremembers their password a few times.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For higher-security sites \u2014 WooCommerce stores with customer payment data, membership sites, or any site where admin compromise would be especially costly \u2014 3 attempts per 60 minutes is a reasonable tightening. Make sure your own IP is whitelisted before making the limit more aggressive.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions About Limiting Login Attempts in WordPress<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Does WordPress have a built-in login attempt limit?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">No. WordPress has no native rate limiting on login attempts. Without a plugin or server-level configuration, a bot can attempt to log in an unlimited number of times without any automatic response from WordPress. This is one of the most commonly exploited gaps in unprotected WordPress installations.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">What happens to legitimate users who get locked out?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">They&#8217;ll see the custom error message you configure \u2014 which with the <code>{{locked_out_until}}<\/code> variable tells them exactly when they can try again. The lockout is temporary and lifts automatically after the time period expires. For site admins, whitelisting your IP prevents any chance of accidental self-lockout.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Is rate limiting enough on its own, or do I need more protection?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Rate limiting is the most important layer, but it works best in combination with a custom login URL. BruteFort&#8217;s Custom Login URL moves your login page away from the default <code>\/wp-login.php<\/code> path, making your site invisible to bots that specifically target WordPress sites. Together, rate limiting and a custom login URL eliminate the vast majority of automated login attack traffic.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Can I see which IPs are being blocked?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Yes. BruteFort&#8217;s Logs screen shows every lockout event with the triggering IP, number of failed attempts, current status (locked or expired), and the timestamp. You can search by IP address and filter by date. IPs that appear repeatedly can be permanently blacklisted from the IP Settings tab.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">Limiting login attempts is the most effective single improvement you can make to WordPress login security \u2014 and it takes about two minutes to configure. <a href=\"https:\/\/wordpress.org\/plugins\/brutefort\/\" target=\"_blank\" rel=\"noopener\">BruteFort<\/a> handles rate limiting, lockout logging, IP whitelisting and blacklisting, and custom login URL from a single free plugin.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You might also like:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/brutefort.com\/blog\/wordpress-login-security\/\">WordPress Login Security: How to Protect Your Site from Unauthorized Access<\/a><\/li><li><a href=\"https:\/\/brutefort.com\/blog\/brute-force-attack-wordpress\/\">What Is a Brute Force Attack on WordPress (And How to Stop One)<\/a><\/li><li><a href=\"https:\/\/brutefort.com\/blog\/how-bots-attack-wordpress\/\">How Bots Attack WordPress Sites (And How to Stop Them)<\/a><\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>WordPress has no built-in login attempt limit \u2014 making it an open target for brute force attacks. Here&#8217;s how to add rate limiting in minutes using BruteFort.<\/p>\n","protected":false},"author":1,"featured_media":608,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[34],"tags":[],"class_list":["post-609","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-login-protection"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/posts\/609","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/comments?post=609"}],"version-history":[{"count":1,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/posts\/609\/revisions"}],"predecessor-version":[{"id":705,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/posts\/609\/revisions\/705"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/media\/608"}],"wp:attachment":[{"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/media?parent=609"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/categories?post=609"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/brutefort.com\/blog\/wp-json\/wp\/v2\/tags?post=609"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}