

Comments & WordPress Core Forms settings
Init Void Shield protects WordPress comment forms, the default login/registration/lost-password forms, and popular form plugins with a layered honeypot defense that requires no database tables, no external JavaScript, and no user friction.
This plugin is part of the Init Plugin Suite — a collection of minimalist, fast, and developer-focused tools for WordPress.
GitHub repository: https://github.com/brokensmile2103/init-void-shield
Core honeypot engine (always on for comments):
display:none or visibility:hidden, the two patterns CSS-aware bots specifically look for and skip) that bots fill but humans never see. The text field is also marked readonly, so browser and password-manager autofill (Chrome, saved-password prompts, and similar) never writes into it either — bots that scrape the raw HTML or drive a headless browser still fall for it exactly the same.hash_equals() to prevent timing attacks. Submissions under the minimum threshold are rejected; login/registration/other account-style forms use their own, shorter threshold by default (see Account Forms Minimum Submit Time), since a browser autofilling saved credentials lets a genuine visitor submit faster than someone typing a comment from scratch.navigator.webdriver, a zero-size browser window, HeadlessChrome/PhantomJS, Selenium/ChromeDriver traces) picked up from real Selenium/Puppeteer/Playwright sessions. The proof is bound to the form’s own time token and never appears in plain text in the page, so a bot that scrapes the HTML and replays hidden values can’t produce it. Static crawlers, instant bots, and unmasked headless browsers all get caught; real users don’t.Sec-Fetch-Site: cross-site), a header page scripts cannot forge and privacy extensions don’t strip. A request without the header is never rejected by this check. On by default.wp/v2/comments REST endpoint, which the classic form-based layers cannot cover since those requests never carry the honeypot fields or tokens.Key design goals:
A short reference of the developer filters shipped with the plugin (all are standard WordPress filters, added with add_filter()):
init_plugin_suite_void_shield_skip_verification — skip comment-form verification for a request.init_plugin_suite_void_shield_skip_login_verification / _register_verification / _lostpassword_verification / _multisite_signup_verification — force-disable an individual WordPress Core Forms guard, overriding its settings-page toggle.init_plugin_suite_void_shield_login_scope_exempt — override the Referer-based heuristic used by the “wp-login.php only” Login Guard Scope.init_plugin_suite_void_shield_honeypot_html — filter the rendered honeypot HTML block; receives the context string as a second argument.init_plugin_suite_void_shield_kill_response_message / _title / _code — customize the soft-kill response shown to bots on the comment form.init_plugin_suite_void_shield_min_time / _max_time / _js_delay — override the Minimum Submit Time, Maximum Token Age, and JS Token Delay thresholds.init_plugin_suite_void_shield_hidden_style_variants — customize the pool of CSS techniques used to hide honeypot fields.init_plugin_suite_void_shield_{context}_blocked_message — customize the rejection message for a given guard (e.g. ..._login_blocked_message, ..._woocommerce_blocked_message, ..._bbpress_blocked_message).init_plugin_suite_void_shield_blocked_user_agent_signatures — customize the list of non-browser User-Agent substrings checked by Block Non-Browser User Agents.init_plugin_suite_void_shield_js_delay_jitter_max — override the maximum random jitter (milliseconds) added on top of the JavaScript Token Delay.init_plugin_suite_void_shield_min_interaction_delay — override the minimum time (milliseconds) that must pass before a Require Real User Interaction event is accepted.init_plugin_suite_void_shield_referer_exempt — force-exempt a request from the Require Same-Site Referer check regardless of its settings-page toggle.init_plugin_suite_void_shield_cross_site_exempt — force-exempt a request from the Block Cross-Site Submissions check; receives the guard context as a second argument.init_plugin_suite_void_shield_submit_hold_enabled — enable or disable Submit Hold for a given guard context (e.g. for a custom natively-submitted form added via init_plugin_suite_void_shield_build_guard_markup()).init_plugin_suite_void_shield_submit_hold_fetch_wait — maximum time (milliseconds) Submit Hold waits for a pending Lazy Fetch request. Default 4000.init_plugin_suite_void_shield_skip_content_filters — skip the comment content filters for a request.init_plugin_suite_void_shield_comment_content_violation — add your own comment content rules: return a reason key to block a comment, or an empty string to allow it.This plugin is licensed under the GPLv2 or later.