{"id":239253,"date":"2026-03-23T13:06:00","date_gmt":"2026-03-23T13:06:00","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/block-logins-with-cloudflare\/"},"modified":"2026-03-27T18:41:43","modified_gmt":"2026-03-27T18:41:43","slug":"block-logins-cf","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/block-logins-cf\/","author":12345487,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1","stable_tag":"1.1","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Block Logins with Cloudflare","header_author":"supersoju","header_description":"Blocks failed login attempts directly through Cloudflare.","assets_banners_color":"","last_updated":"2026-03-27 18:41:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/supersoju\/block-logins-cf","header_author_uri":"https:\/\/supersoju.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":107,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"supersoju","date":"2026-03-23 13:06:38"},"1.1":{"tag":"1.1","author":"supersoju","date":"2026-03-27 18:41:43"}},"upgrade_notice":{"1.1":"<p>Adds 404 blocking, XML-RPC protection, block source tracking, Cloudflare sync, and IPv6 CIDR whitelist support.<\/p>","1.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3489069,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3489069,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"<strong>Settings Page:<\/strong> Configure your Cloudflare credentials, blocking thresholds, and auto-unblock duration.","2":"<strong>Blocked IPs Management:<\/strong> View currently blocked IPs with source tracking, unblock them, and manage your whitelist.","3":"<strong>Whitelist Management:<\/strong> Add or remove IP addresses (including IPv6 CIDR ranges) from the whitelist."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[2439,3882,1174,602,600],"plugin_category":[38,54],"plugin_contributors":[82396],"plugin_business_model":[],"class_list":["post-239253","plugin","type-plugin","status-publish","hentry","plugin_tags-brute-force","plugin_tags-cloudflare","plugin_tags-firewall","plugin_tags-login","plugin_tags-security","plugin_category-authentication","plugin_category-security-and-spam-protection","plugin_contributors-supersoju","plugin_committers-supersoju"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/block-logins-cf\/assets\/icon-128x128.png?rev=3489069","icon_2x":"https:\/\/ps.w.org\/block-logins-cf\/assets\/icon-256x256.png?rev=3489069","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Block Logins with Cloudflare<\/strong> helps protect your WordPress site from brute-force attacks by blocking IPs at the Cloudflare firewall after a configurable number of failed login attempts.<\/p>\n\n<ul>\n<li>Block IPs via Cloudflare after X failed login attempts<\/li>\n<li>Block IPs that generate excessive 404 responses (bots and scanners)<\/li>\n<li>Block IPs attacking via XML-RPC with intelligent detection<\/li>\n<li>Automatic unblocking after a configurable duration<\/li>\n<li>Whitelist IPs to never block or track them (supports IPv6 CIDR ranges)<\/li>\n<li>View and manually unblock blocked IPs from the admin<\/li>\n<li>Block source tracking \u2014 see whether each IP was blocked via login, XML-RPC, or 404<\/li>\n<li>Sync existing Cloudflare blocks into the local blocked IPs list<\/li>\n<li>Secure settings page with Cloudflare API token validation<\/li>\n<li>Hourly cron job for automatic maintenance<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin relies on the <strong>Cloudflare API<\/strong> to function. It communicates with Cloudflare's external servers to block IP addresses at the firewall level.<\/p>\n\n<p><strong>What is the Cloudflare API and what is it used for?<\/strong>\nThe Cloudflare API is a RESTful service provided by Cloudflare, Inc. that allows programmatic management of Cloudflare firewall rules. This plugin uses it to automatically block and unblock IP addresses based on failed login attempts, XML-RPC attacks, and 404 scanning activity.<\/p>\n\n<p><strong>What data is sent and when?<\/strong>\nThe plugin sends the following data to Cloudflare's API servers:<\/p>\n\n<ol>\n<li><p><strong>During settings validation<\/strong> (when you save Cloudflare credentials):<\/p>\n\n<ul>\n<li>Your Cloudflare API token (for verification)<\/li>\n<li>Endpoint: <code>https:\/\/api.cloudflare.com\/client\/v4\/user\/tokens\/verify<\/code><\/li>\n<\/ul><\/li>\n<li><p><strong>When blocking an IP<\/strong> (after a threshold is reached):<\/p>\n\n<ul>\n<li>The IP address to be blocked<\/li>\n<li>Your Cloudflare email address and API key\/token<\/li>\n<li>Your Cloudflare Zone ID<\/li>\n<li>A note describing the reason for the block<\/li>\n<li>Endpoint: <code>https:\/\/api.cloudflare.com\/client\/v4\/zones\/{zone_id}\/firewall\/access_rules\/rules<\/code><\/li>\n<\/ul><\/li>\n<li><p><strong>When syncing from Cloudflare<\/strong> (on demand):<\/p>\n\n<ul>\n<li>Fetches existing firewall rules from your Cloudflare zone<\/li>\n<li>Endpoint: <code>https:\/\/api.cloudflare.com\/client\/v4\/zones\/{zone_id}\/firewall\/access_rules\/rules<\/code><\/li>\n<\/ul><\/li>\n<\/ol>\n\n<p>No personally identifiable information about your WordPress users is transmitted. Only IP addresses are sent to Cloudflare.<\/p>\n\n<p><strong>Service provider information:<\/strong>\n- Service: Cloudflare API\n- Provider: Cloudflare, Inc.\n- Terms of Service: https:\/\/www.cloudflare.com\/terms\/\n- Privacy Policy: https:\/\/www.cloudflare.com\/privacypolicy\/\n- API Documentation: https:\/\/developers.cloudflare.com\/api\/<\/p>\n\n<p><strong>Required for functionality:<\/strong>\nThis plugin requires a Cloudflare account and will not function without valid Cloudflare API credentials. The external API calls are essential to the plugin's core functionality.<\/p>\n\n<h3>License<\/h3>\n\n<p>GNU General Public License v2 or later<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/block-logins-cf<\/code> directory, or install through the WordPress plugins screen.<\/li>\n<li>Activate the plugin through the 'Plugins' screen.<\/li>\n<li>Go to <strong>Block Logins CF<\/strong> in the admin sidebar to configure your Cloudflare credentials and settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"what%20permissions%20does%20my%20cloudflare%20api%20token%20need%3F\"><h3>What permissions does my Cloudflare API token need?<\/h3><\/dt>\n<dd><p>Your token needs <code>Zone.Zone<\/code> and <code>Zone.Firewall<\/code> permissions for the relevant zone.<\/p><\/dd>\n<dt id=\"where%20do%20i%20find%20my%20cloudflare%20zone%20id%3F\"><h3>Where do I find my Cloudflare Zone ID?<\/h3><\/dt>\n<dd><p>In your Cloudflare dashboard, select your domain and look for the Zone ID in the Overview tab.<\/p><\/dd>\n<dt id=\"does%20this%20block%20at%20the%20cloudflare%20level%20or%20just%20wordpress%3F\"><h3>Does this block at the Cloudflare level or just WordPress?<\/h3><\/dt>\n<dd><p>This plugin blocks IPs at the Cloudflare firewall, stopping attacks before they reach your server.<\/p><\/dd>\n<dt id=\"what%20does%20404%20blocking%20protect%20against%3F\"><h3>What does 404 blocking protect against?<\/h3><\/dt>\n<dd><p>It detects bots and vulnerability scanners that probe your site by requesting many non-existent URLs. When an IP exceeds the configurable 404 threshold, it is blocked via Cloudflare just like a brute-force login attacker.<\/p><\/dd>\n<dt id=\"can%20i%20sync%20blocks%20i%20already%20have%20in%20cloudflare%3F\"><h3>Can I sync blocks I already have in Cloudflare?<\/h3><\/dt>\n<dd><p>Yes. Use the \"Sync from Cloudflare\" button on the Blocked IPs page to import existing Cloudflare firewall rules into the plugin's local list.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1<\/h4>\n\n<ul>\n<li>Added 404-based IP blocking to detect and block bots and vulnerability scanners<\/li>\n<li>Added XML-RPC protection with intelligent attack detection<\/li>\n<li>Added block source tracking \u2014 blocked IPs now show whether they were blocked via login, XML-RPC, or 404<\/li>\n<li>Added 404 activity log in the Blocked IPs admin page<\/li>\n<li>Added \"Sync from Cloudflare\" to import existing Cloudflare firewall rules into the local list<\/li>\n<li>Added IPv6 CIDR range support in the IP whitelist<\/li>\n<li>Added caching for Cloudflare API token validation to prevent throttling<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Block brute-force login attempts by integrating with Cloudflare&#039;s firewall to automatically block IPs after failed logins.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/239253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=239253"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/supersoju"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=239253"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=239253"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=239253"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=239253"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=239253"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=239253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}