{"id":365458,"date":"2026-09-22T02:09:18","date_gmt":"2026-09-22T02:09:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/witen-blocker\/"},"modified":"2026-10-22T16:48:28","modified_gmt":"2026-10-22T16:48:28","slug":"witen-blocker","status":"publish","type":"plugin","link":"https:\/\/it.wordpress.org\/plugins\/witen-blocker\/","author":23559348,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.6.53","stable_tag":"0.6.53","tested":"7.1.3","requires":"6.2","requires_php":"8.1","requires_plugins":null,"header_name":"Witen Blocker \u2014 AI Crawler Control, Login Lockout & 2FA","header_author":"Witen Labs","header_description":"Blocks abusive requests with Witen threat intelligence and optional local Warden enforcement.","assets_banners_color":"101a2b","last_updated":"2026-10-22 16:48:28","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/witenlabs.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":460,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.6.46":{"tag":"0.6.46","author":"witenlabs","date":"2026-09-22 02:08:50","revision":3706512},"0.6.47":{"tag":"0.6.47","author":"witenlabs","date":"2026-09-22 23:56:44","revision":3708268},"0.6.48":{"tag":"0.6.48","author":"witenlabs","date":"2026-09-28 19:38:41","revision":3717827},"0.6.49":{"tag":"0.6.49","author":"witenlabs","date":"2026-10-02 17:56:30","revision":3725221},"0.6.50":{"tag":"0.6.50","author":"witenlabs","date":"2026-10-04 01:35:55","revision":3726860},"0.6.51":{"tag":"0.6.51","author":"witenlabs","date":"2026-10-15 00:05:37","revision":3747355},"0.6.52":{"tag":"0.6.52","author":"witenlabs","date":"2026-10-17 03:28:48","revision":3751362},"0.6.53":{"tag":"0.6.53","author":"witenlabs","date":"2026-10-22 16:48:28","revision":3760241}},"upgrade_notice":{"0.6.53":"<p>Turn on Vulnerability alerts in Settings to see which installed plugins and themes have known vulnerabilities. It is off until you turn it on. Settings, 2FA, and connection details are preserved.<\/p>","0.6.52":"<p>Connected sites now check comments against a shared spammer list; turn it off in Settings. Failed logins count against the account they tried, and signing in clears only that account&#039;s failures. Settings, 2FA, and connection details are preserved.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3706552,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3706552,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3706552,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3706552,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3706552,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.6.46","0.6.47","0.6.48","0.6.49","0.6.50","0.6.51","0.6.52","0.6.53"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3726860,"resolution":"1","location":"assets","locale":"","width":1440,"height":1100},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3726860,"resolution":"2","location":"assets","locale":"","width":1440,"height":1100},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3726860,"resolution":"3","location":"assets","locale":"","width":1440,"height":1100},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3726860,"resolution":"4","location":"assets","locale":"","width":1440,"height":1100}},"screenshots":{"1":"Protection active on an unconnected WordPress installation, with optional two-factor, crawler, and account setup.","2":"Per-crawler AI policies: choose which recognized crawlers are allowed or blocked.","3":"Login limits, two-factor setup links, and a custom login address in one place.","4":"File integrity and malware scan controls, with unscanned state shown accurately."}},"plugin_section":[],"plugin_tags":[246479,13859,247966,276451,9374],"plugin_category":[54],"plugin_contributors":[281942],"plugin_business_model":[],"class_list":["post-365458","plugin","type-plugin","status-publish","hentry","plugin_tags-ai-crawlers","plugin_tags-bot-blocker","plugin_tags-gptbot","plugin_tags-ip-blocklist","plugin_tags-limit-login-attempts","plugin_category-security-and-spam-protection","plugin_contributors-witenlabs","plugin_committers-witenlabs"],"banners":{"banner":"https:\/\/ps.w.org\/witen-blocker\/assets\/banner-772x250.png?rev=3706552","banner_2x":"https:\/\/ps.w.org\/witen-blocker\/assets\/banner-1544x500.png?rev=3706552","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/witen-blocker\/assets\/icon.svg?rev=3706552","icon":"https:\/\/ps.w.org\/witen-blocker\/assets\/icon.svg?rev=3706552","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/witen-blocker\/assets\/screenshot-1.png?rev=3726860","caption":"Protection active on an unconnected WordPress installation, with optional two-factor, crawler, and account setup."},{"src":"https:\/\/ps.w.org\/witen-blocker\/assets\/screenshot-2.png?rev=3726860","caption":"Per-crawler AI policies: choose which recognized crawlers are allowed or blocked."},{"src":"https:\/\/ps.w.org\/witen-blocker\/assets\/screenshot-3.png?rev=3726860","caption":"Login limits, two-factor setup links, and a custom login address in one place."},{"src":"https:\/\/ps.w.org\/witen-blocker\/assets\/screenshot-4.png?rev=3726860","caption":"File integrity and malware scan controls, with unscanned state shown accurately."}],"raw_content":"<!--section=description-->\n<p>You decide who gets into your WordPress site. Choose which AI crawlers can read your content, lock out bots guessing your password, and stop comment spam. Protection starts the moment you activate it, with no account and no setup wizard.<\/p>\n\n<h4>Choose which AI crawlers read your site<\/h4>\n\n<p>Every recognized crawler gets its own allow or block switch. Welcome every AI crawler, block them all, or pick one by one. Nothing is blocked until you choose.<\/p>\n\n<p>Witen Blocker recognizes GPTBot, ChatGPT-User, OAI-SearchBot, ClaudeBot, PerplexityBot, Common Crawl, Meta-ExternalAgent, Amazonbot, and Applebot, plus the major search engines and ten uptime monitors, so a rule for one bot never catches the services you rely on.<\/p>\n\n<p>robots.txt states your preference; Witen Blocker enforces it. A crawler you block gets an HTTP 403. Crawlers are matched by their published network ranges as well as their user agent, so a scraper pretending to be Googlebot doesn't get Googlebot's pass.<\/p>\n\n<h4>Lock out password guessers<\/h4>\n\n<p>Five failed logins in five minutes locks the address out for an hour, and you can change all three numbers. Add two-factor sign-in with any authenticator app and printable recovery codes, so a stolen password alone no longer opens your dashboard. Move the login page to an address only you know.<\/p>\n\n<h4>Block known WordPress exploits<\/h4>\n\n<p>Template traversal and comment exploit requests are refused before they reach the vulnerable WordPress code. No account needed.<\/p>\n\n<h4>Stop comment spam without a spam service<\/h4>\n\n<p>A hidden field and a timing check catch bots. No comment text ever leaves your site.<\/p>\n\n<p>Connected sites can also use a separate shared spammer list for comments. Repeated honeypot detections from different sensors and customer licenses can contribute addresses to this list. Timing checks and hits on the shared list do not contribute new shared reputation. Comments marked as spam remain in the Spam folder for review. This protection does not create login or site-wide blocks; you can turn it off in <strong>Witen &gt; Settings<\/strong>.<\/p>\n\n<h4>Catch unexpected file changes<\/h4>\n\n<p>A daily scan checks WordPress core against the official checksums, flags new and changed files, and looks for known malware patterns. Nothing is deleted or changed without you. Connected sites also receive maintained malware catalogs.<\/p>\n\n<h4>Block attackers before they reach you<\/h4>\n\n<p>Connect a free Witen account and your site gets blocklists built from attacks seen across every Witen site and server. An address caught attacking other sites is blocked on yours before it tries. Requests are checked against a local copy of the list, so no page load waits on Witen.<\/p>\n\n<p>Connecting requires a Witen account and security-event sharing. Every local feature stays free, with no trial expiry. Free connected sites get a daily blocklist update. Paid plans add more sites and servers, other feed profiles, and off-site backup storage.<\/p>\n\n<h4>Shared hosting or your own server<\/h4>\n\n<p>On shared hosting, blocked requests get an HTTP 403 from WordPress, with no server access needed. On your own Linux server, add the Witen Warden agent and blocks move to the firewall, before the traffic ever reaches PHP.<\/p>\n\n<p><strong>Get started:<\/strong> activate Witen Blocker and open <strong>Witen &gt; Dashboard<\/strong> to see what's already on. Use <strong>Firewall &gt; Bots and AI crawlers<\/strong> to choose which crawlers can visit, and <strong>Login<\/strong> to set up two-factor sign-in.<\/p>\n\n<p><a href=\"https:\/\/www.witenlabs.com\/docs\/wordpress\">Setup guide<\/a> | <a href=\"https:\/\/www.witenlabs.com\/pricing\">Witen plans<\/a> | <a href=\"https:\/\/wordpress.org\/support\/plugin\/witen-blocker\/\">Support<\/a><\/p>\n\n<h3>External Services<\/h3>\n\n<h4>Witen Collector<\/h4>\n\n<p>Connected features use <code>https:\/\/collector.witenlabs.com<\/code>. Enrollment exchanges your setup token and installation identity for a credential. Witen processes shared reports to identify distributed attacks and provide threat intelligence.<\/p>\n\n<p>Background sync sends events and site details (listed below) and retrieves blocklists, bot identities, signed malware catalogs, Tor exit nodes, allowlists, service status, network statistics, and feed profiles. Profile changes send your selection and site identifier; IP lookups send the queried address. Block reports include the IP, rule, outcome, request context, and site identifier.<\/p>\n\n<ul>\n<li><strong>Malware samples:<\/strong> off by default. Setting <code>WITEN_SEND_MALWARE_SAMPLES<\/code> to boolean <code>true<\/code> in <code>wp-config.php<\/code> permits file-content uploads. Scans do not require them.<\/li>\n<li><strong>Plugin and theme versions:<\/strong> off by default. Enabling vulnerability alerts sends each installed plugin and theme folder name, version, and active state, which Witen matches against known vulnerabilities. Turning the setting off deletes the list Witen holds. On sites connected through Warden, Warden sends the list, with the WordPress and PHP versions, only when package listing is also turned on for the server.<\/li>\n<li><strong>Off-site .htaccess backups:<\/strong> off by default. Enabling them permits encrypted file uploads, with checksum and size, and dashboard-requested restores. Witen can decrypt the files and keeps 10 versions. Restores validate content, make a local backup, and report results. Disabling the option stops uploads and remote restores; local backups remain available.<\/li>\n<\/ul>\n\n<p><a href=\"https:\/\/witenlabs.com\/terms\">Witen terms<\/a> | <a href=\"https:\/\/witenlabs.com\/privacy\">Witen privacy policy<\/a><\/p>\n\n<pre><code>WITEN_COLLECTOR_URL selects another collector if you operate one; its operator's policies apply. Explicitly configuring `WITEN_SOCKET_PATH` authorizes sharing with local Warden, whose configuration controls onward delivery. Detecting a socket alone does not enable sharing.\n<\/code><\/pre>\n\n<h4>Cloudflare proxy ranges<\/h4>\n\n<p>Enrolled sites refresh <code>https:\/\/www.cloudflare.com\/ips-v4\/<\/code> and <code>https:\/\/www.cloudflare.com\/ips-v6\/<\/code> during background maintenance to recognize trusted proxies. Offline sites use bundled ranges. Requests send ordinary HTTPS network metadata, not WordPress visitor events or account data.<\/p>\n\n<p><a href=\"https:\/\/www.cloudflare.com\/website-terms\/\">Cloudflare terms<\/a> | <a href=\"https:\/\/www.cloudflare.com\/privacypolicy\/\">Cloudflare privacy policy<\/a><\/p>\n\n<h4>WordPress.org core checksums<\/h4>\n\n<p>Integrity scans request official hashes from <code>https:\/\/api.wordpress.org\/core\/checksums\/1.0\/<\/code>, sending your WordPress version, locale, and ordinary HTTPS network metadata. No visitor events, account data, or site content is sent.<\/p>\n\n<p><a href=\"https:\/\/wordpress.org\/about\/privacy\/\">WordPress.org privacy policy<\/a><\/p>\n\n<p>The plugin does not remotely load executable code or frontend assets. Bundled bot references cause no remote requests or crawler DNS lookups. Collector connections use your DNS resolver. Background jobs and Apache rule checks call your own WordPress URLs.<\/p>\n\n<h3>Privacy Policy<\/h3>\n\n<p>Events stay local until enrollment or explicit Warden socket configuration. Earlier events are never uploaded retroactively. Connected intelligence requires event sharing. Deactivate the plugin to stop reporting from WordPress; a separately running Warden keeps its own reporting configuration.<\/p>\n\n<p><strong>What is shared:<\/strong> IP addresses; successful and failed logins; XML-RPC, comment, registration, and 404 events; request URLs, methods, User-Agent strings, referrers, and query information; and attempted usernames, which may be email addresses. Installation reports include site name and URL, WordPress\/PHP\/plugin versions, and a random installation identifier. An observed IP is not necessarily an attacker. Reports help identify distributed attacks, relate failed logins to later successful ones, and maintain blocklists.<\/p>\n\n<p>Event reports exclude form bodies, post content, comment text, password fields, cookies, and session data. URLs and metadata can contain personal data. File samples and .htaccess backups are separate options, described above. <code>WITEN_NO_TELEMETRY<\/code> stops daily installation reports, but not connected security-event sharing.<\/p>\n\n<p><strong>Local storage:<\/strong> the delivery queue holds up to 500 events for seven days. Witen also keeps the latest 100 dashboard events and blocks, block and allow lists, and health counters. Rejected events and block-decision reports have separate diagnostic queues, each limited to 100 records or 1 MiB. Older records are removed at the limit; diagnostics otherwise remain until uninstall.<\/p>\n\n<p>Deactivation preserves settings and existing .htaccess and Warden firewall rules. Uninstall removes Witen options, transients, scheduled actions, and database tables. Collector retention follows its operator's privacy policy; request collector-side deletion from that operator.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Open <strong>Plugins &gt; Add New Plugin<\/strong>, search for <strong>Witen Blocker<\/strong>, and install and activate it. You can also upload the plugin ZIP.<\/li>\n<li>Open <strong>Witen &gt; Firewall<\/strong> and add your own IP address to the never-block list. Then choose which bots and AI crawlers to allow.<\/li>\n<li>Open <strong>Witen &gt; Login<\/strong> to set up two-factor sign-in for your account.<\/li>\n<li>Optional: to add shared blocklists, create a <a href=\"https:\/\/www.witenlabs.com\">Witen account<\/a>, add your WordPress site from the dashboard, and enter its one-time setup token in <strong>Witen &gt; Settings<\/strong>. Review the terms and privacy information before connecting. The first blocklist arrives after background maintenance runs.<\/li>\n<\/ol>\n\n<p>See the <a href=\"https:\/\/www.witenlabs.com\/docs\/wordpress\">setup guide<\/a> to connect a local Warden agent or configure your site through wp-config.php.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20is%20this%20different%20from%20robots.txt%3F\"><h3>How is this different from robots.txt?<\/h3><\/dt>\n<dd><p>robots.txt states your preference, and crawlers that honor it follow it. Witen Blocker enforces your choice: a crawler you block gets an HTTP 403, and a crawler you allow passes. Use both if you like.<\/p><\/dd>\n<dt id=\"what%20can%20i%20use%20without%20an%20account%3F\"><h3>What can I use without an account?<\/h3><\/dt>\n<dd><p>Everything local: AI crawler and bot controls, login lockout, two-factor sign-in, comment spam checks, exploit blocks, file and malware scans, and the .htaccess editor. A Witen account adds shared blocklists and reporting.<\/p><\/dd>\n<dt id=\"will%20it%20slow%20down%20my%20site%3F\"><h3>Will it slow down my site?<\/h3><\/dt>\n<dd><p>No. Request checks use local data and never wait on a remote service. Blocklist updates, reporting, and scans run in background jobs.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20alongside%20another%20security%20plugin%3F\"><h3>Can I use it alongside another security plugin?<\/h3><\/dt>\n<dd><p>Yes. If both plugins handle two-factor, login limits, bot rules, or .htaccess, turn each feature on in one plugin only, then test your login.<\/p><\/dd>\n<dt id=\"how%20do%20i%20change%20login%20limits%20or%20recover%20from%20a%20lockout%3F\"><h3>How do I change login limits or recover from a lockout?<\/h3><\/dt>\n<dd><p>Open <strong>Witen &gt; Login &gt; Login lockout<\/strong> to set the failure window, failure count, and ban duration. Defaults are 5 failures in 5 minutes and a 1-hour ban. Saved settings override <code>WITEN_LOGIN_WINDOW_SEC<\/code>, <code>WITEN_LOGIN_MAX_FAILURES<\/code>, and <code>WITEN_LOGIN_BAN_SEC<\/code> in wp-config.php. Every failure from an address counts toward its ban. Signing in clears only the failures against your own account and never lifts a ban.<\/p>\n\n<p>Keep your 2FA recovery codes. If you lock yourself out, wait for the ban to expire or follow the <a href=\"https:\/\/www.witenlabs.com\/docs\/lockout\">recovery guide<\/a>, which covers WP-CLI and SFTP. Deactivating the plugin leaves existing .htaccess and Warden firewall rules in place; the guide shows how to remove them.<\/p><\/dd>\n<dt id=\"does%20a%20scan%20finding%20mean%20my%20site%20is%20hacked%3F\"><h3>Does a scan finding mean my site is hacked?<\/h3><\/dt>\n<dd><p>No. A finding is a file worth a look, and legitimate customizations can trigger one. Witen Blocker shows you which files to check. It doesn't clean an infected site for you.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20witen%20is%20unavailable%3F\"><h3>What happens if Witen is unavailable?<\/h3><\/dt>\n<dd><p>Your site stays protected. Local protection keeps running, cached blocklists stay in use until they expire, and reports queue and retry in the background. Sites that report through a local Warden agent wait for Warden rather than reporting to Witen directly.<\/p><\/dd>\n<dt id=\"does%20it%20support%20multisite%3F\"><h3>Does it support multisite?<\/h3><\/dt>\n<dd><p>Yes. Each site has its own settings, connection, logs, and jobs. The main site's network administrator controls the shared .htaccess, and user accounts and two-factor setup are network-wide. If you use a local Warden agent, connect each site separately.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.6.53<\/h4>\n\n<ul>\n<li>Turn on Vulnerability alerts in Settings to share your installed plugin and theme versions. Witen then lists the ones with known vulnerabilities, and the version that fixes each, on the Vulnerability Intel page. It is off until you turn it on, and only plugin and theme names and versions are sent.<\/li>\n<li>Turning Vulnerability alerts off deletes the shared list from Witen.<\/li>\n<li>Sites connected through a local Warden share the list through Warden 0.1.35 or later, only when package listing is turned on for the server too.<\/li>\n<li>Bundle Witen SDK 1.8.<\/li>\n<\/ul>\n\n<h4>0.6.52<\/h4>\n\n<ul>\n<li>Check comments on connected sites against a separate shared spammer list. An address joins it only after honeypot detections from different customer licenses and sensors. Matching comments go to the Spam folder for review and never block pages or logins. Turn it off in Settings.<\/li>\n<li>Report why a stored comment was marked as spam: honeypot, timing, or the shared list. Comment text and email addresses are never sent.<\/li>\n<li>Never ban an unlisted reverse proxy on a private network. Failed logins through it are still recorded and counted. Trusted proxies now says plainly when a public address that sends forwarding headers can be banned.<\/li>\n<li>Record a correct password still waiting for its two-factor code in the audit log. It never counts as a failed login, never resets the failure count, and never lifts a ban.<\/li>\n<li>Count each failed login against the account it tried. Signing in clears only that account's failures, so a valid password for one account cannot reset the count against another. Failed logins recorded before the update keep counting.<\/li>\n<li>With a local Warden, show which blocks live in the server firewall. WordPress cannot lift those, so the blocklist no longer offers Unblock for them, and a new note gives the exact server command for each kind of block.<\/li>\n<li>Never ask a local Warden to lock out an allowlisted address after failed logins.<\/li>\n<li>Bundle Witen SDK 1.7.<\/li>\n<\/ul>\n\n<p>See <code>changelog.txt<\/code> in the download for older releases.<\/p>","raw_excerpt":"Allow or block GPTBot, ClaudeBot, and every other AI crawler, one by one. Lock out password guessers, add 2FA, and stop comment spam. Free.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365458"}],"author":[{"embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/witenlabs"}],"wp:attachment":[{"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365458"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365458"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365458"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365458"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365458"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/it.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}