| 开发者 | carlocozzetto |
|---|---|
| 更新时间 | 2026年9月27日 17:15 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
define( 'SPIDY_2FA_OFF', true );) disables 2FA for everyone — no need to rename or delete the plugin folderspidy-2fa-login text domain) — ready to receive community translations via translate.wordpress.org once listedwp_mail() function: no data is transmitted to third parties for this feature.
The Biometric login method (WebAuthn/FIDO2) never sends any data to third parties: the cryptographic verification happens entirely on your own server and the user's own device.
If you configure SMS delivery, the 6-digit login code and your site name are sent to your own Twilio or Clickatell account (whichever you choose) each time a user with SMS as their method and a saved phone number logs in. Message delivery, retention, and pricing are governed by the provider you choose — see Twilio's privacy policy or Clickatell's privacy policy.
SPIDY uses WordPress's own wp_mail(). If your server can't deliver email (common on self-hosted servers or residential connections), configure an SMTP plugin that sends through your mail provider. Meanwhile, users can sign in with one of their backup codes (Your Profile > Backup codes). To see the exact delivery error, add define( 'SPIDY_WP_DEBUG', true ); to wp-config.php and check the plugin's debug.log.
Add define( 'SPIDY_2FA_OFF', true ); to wp-config.php (via FTP or your hosting file manager), log in normally, fix the issue, then remove the line. A red notice in the dashboard reminds you while 2FA is switched off.
SPIDY_2FA_OFF emergency switch in wp-config.php, a clearer name for the existing SPIDY_WP_BYPASS_BIOMETRIC (which keeps working). While either is active, administrators see a red dashboard notice.wp_mail() delivery errors are written to the plugin log, to help diagnose why codes aren't arriving.debug.log (inside the plugin folder, reachable from the web) was always written and could contain usernames and user IDs. It is now written only when SPIDY_WP_DEBUG is set to true in wp-config.php.wp_authenticate_user, a WordPress core filter that fires before the password itself is checked (wp_check_password() runs afterwards, inside wp_authenticate_username_password()). Combined with the redirect-and-exit() used to send the user to the 2FA verification page, this meant the second factor — and the OTP email/SMS send that goes with it — could be triggered by a valid username alone, with any password, since the password was never actually checked in that request. Not a full authentication bypass (the real OTP code, or a registered biometric device, is still required to finish signing in), but it allowed username enumeration and could be abused to trigger unwanted OTP emails/SMS at will (a direct cost where a paid SMS gateway is configured). Fixed by moving to the authenticate filter at priority 30 (after WordPress's own core password checks, which run at priority 20), so the code guarantees $user is only ever a real WP_User when both username and password have already been verified successfully — matching the fix already applied on a different branch of this plugin, ported back here.Domain Path: /languages header pointing to a folder that isn't bundled with the plugin (already listed as fixed in the 1.6.1 changelog entry below, but still present in this build).SPIDY_WP_VERSION constant (used for cache-busting of CSS/JS assets) was still hardcoded to 1.6.0 while the plugin header had advanced through several releases; now kept in sync with the plugin version.languages/ folder (translation files are managed by translate.wordpress.org, not shipped in the plugin package) — per WordPress.org Plugins Team review feedback.vendor/ (PHPUnit test helpers, Symfony contract test base classes) that don't belong in a production release.authenticatorAttachment: 'platform', requiring the browser to use ONLY the device's built-in biometric sensor (Windows Hello/Touch ID/Face ID) — on a computer where it isn't set up, this surfaced as an OS-level "Turn on Windows Hello" prompt with no way to proceed otherwise. Removed the restriction: the browser now offers every available option (built-in sensor, USB security key, browser-synced passkey, phone via QR/Bluetooth), and the user picks whichever they actually have.window.prompt() asking for a device name was called right after the async WebAuthn ceremony, and modern browsers (Chrome/Edge) block or auto-dismiss native dialogs in that situation, since the "user gesture" is considered already consumed. Replaced with an inline on-page input, which isn't subject to this restriction.languages/ folder with a complete English translation (134 strings) and the Italian source identity file, matching the current v1.6.2 codebase — the source strings inside the plugin remain Italian, but English is now the fallback for anyone whose site language isn't Italian, as required for WordPress.org submission./languages folder (no .mo/.po files were bundled). Corrected the description accordingly — the plugin is translation-ready, not yet pre-translated.$_POST['transports'] value during WebAuthn credential registration; now sanitized before decoding and filtered against the list of valid WebAuthn transport values.wp_login core hook manually fired after 2FA verification was flagged as an unprefixed custom hook; documented with an inline justification (it is WordPress's own hook, not a custom one).