| 开发者 | solariane |
|---|---|
| 更新时间 | 2026年5月7日 22:26 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 6.9 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
wp-login.php) — protect against brute-force attacksassets/challenge-slider.js, admin/js/sos-admin.js, assets/*.css, admin/css/*.css) and the minified production builds (.min.js, .min.css). WordPress loads the minified versions in production and the source versions when SCRIPT_DEBUG is enabled (define('SCRIPT_DEBUG', true) in wp-config.php).
Yes. SOS Captcha:
Yes — the interactive slider requires JavaScript to work. If JavaScript is disabled, the form submission is blocked to protect against simple bots. For visitors without JavaScript, we recommend keeping a secondary spam protection layer.
No. The plugin adds less than 20KB of assets and uses efficient server-side processing. Operations use WordPress transients which auto-expire. There are no external API calls.
No anti-spam solution is 100% perfect, but SOS makes automation difficult:
Yes. The slider is optimized for touch interfaces with visual feedback. Touch offset correction ensures accurate control even on small screens. Tested on iOS, Android, and tablets.
Yes, Contact Form 7 is fully supported in the free version. Enable it in Settings → SOS Captcha → Integrations.
These are supported in the Premium version.
Yes, in the Premium version. SOS can protect:
wp-login.php — blocks brute-force login attacksYes. You can customize:
No limits on either version. Protect unlimited forms with unlimited submissions.
The challenge is designed to be easy for humans. If someone fails, they can simply try again. A rate limit (default 60s) prevents brute-force attempts.
Yes, in the Premium version. The local statistics dashboard shows blocked submissions, success/failure rates, and per-form breakdowns. All stats are stored on your server — nothing is sent externally.
EU customers have a 14-day statutory right of withdrawal on Premium subscriptions. After that, subscriptions can be cancelled at any time and remain active until the end of the current billing period.
SOSCAPTCHA_Generator::pro_extra_fields() / pro_extra_fields_html() — single source of truth for the Pro honeypot + browser-fingerprint hidden inputs that integrations need to render. Each of the 9 integration adapters (CF7, Comments, WPForms, Gravity Forms, Ninja Forms, WooCommerce reviews/checkout/registration, WP login/register/lost-password) now emits these fields when their toggles are on{ ua, lang, tz, screen }) on slider init and writes it into the hidden input — paired with Pro 1.0.10's rewritten validator that checks the claimed UA matches $_SERVER['HTTP_USER_AGENT'] to detect automation toolkitsassets/challenge-slider.js ran checkpointDots[lastCheckpoint + 1].style.borderColor = … after the AJAX block had already advanced lastCheckpoint to the final index — so it dereferenced undefined once the last dot was reached. The TypeError aborted the rest of updatePosition, including the setTimeout that writes collected tokens to the form's hidden soscaptcha_tokens input. End result: form submitted with empty tokens → server rejected with "invalid_tokens". Added a guard so the highlight only runs when there's actually a next checkpoint.action: soscaptcha_get_challenge_config). The three front-end AJAX endpoints (get_challenge_config, collect_token, refresh_challenge) were registered PHP-side under the legacy wp_ajax_sos_* prefix, but the slider JS sends action=soscaptcha_* (matching the WP.org 4+ char prefix rule applied in 1.0.54). Mismatch meant every challenge fetch returned 400 — the slider couldn't render and form submissions on protected pages couldn't validate. PHP side now uses wp_ajax_soscaptcha_* to match.disabled() helper instead of echoing a raw string), /* translators: */ comment moved adjacent to its __() call, and load_plugin_textdomain() removed (WP auto-loads translations for WP.org-hosted plugins since 4.6 — the call is flagged as discouraged)comments, cf7). Pro's filter (since 1.0.64) only flips lock flags on the canonical registry instead of adding entries, so any Pro toggle (wpforms, gravityforms, etc.) was silently stripped during save. The handler now seeds from SOSCAPTCHA_Integrations::filtered() so all 9 keys are accepted, with a server-side guard that still blocks Pro toggles when the license isn't active.mo)wp_ajax_sos_save_* but the JS auto-save POSTed action=soscaptcha_save_*. Mismatch meant every change failed silently. Both sides now use soscaptcha_save_*%s placeholders when translating short format strings, so printf( 'or %s/year (save 20%%)', $price ) blew up on PHP 8+ with ArgumentCountError. Refactored to two simpler translatable strings + runtime guard that falls back to English if the translation is missing the placeholderincludes/data/integrations.php (single source of truth, mirrors the tier matrix pattern) accessed via the new SOSCAPTCHA_Integrations helperSOSCAPTCHA_Tiers::is_pro_active() helper backed by the soscaptcha_pro_active filter; Pro flips it on when its license is validincludes/data/tier-matrix.php (readable through the SOSCAPTCHA_Tiers helper class). Both the free "Get Pro" page and the Pro plugin's "License" page render from it, kept in sync with sos-captcha.com pricingload_plugin_textdomain() so admin strings translate on manually-uploaded installs (not just WordPress.org-distributed ones)premium_locked flag exposed by the Pro plugin's soscaptcha_integrations filter)soscaptcha_show_get_pro_menu filter; the Pro plugin (1.0.2+) hooks it to hide the "Get Pro" upsell submenu once a license is activeadmin/js/sos-admin.{js,min.js} → admin/js/soscaptcha-admin.{js,min.js} so the file matches the prefixed enqueue path introduced in 1.0.54class-sos-*.php to class-soscaptcha-*.php so they match the require_once paths introduced in 1.0.54 (the rename touched the require paths but not the files on disk)admin/views/{settings,integrations,get-pro}.php with soscaptcha_ to clear WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound warningschallenge_session, challenge_nonce, collected_tokens → soscaptcha_session, soscaptcha_nonce, soscaptcha_tokens) to avoid collisions with other plugins on host formssoscaptcha- prefix to CSS classes and script handles (4+ char prefix everywhere) for WordPress.org complianceSOS_ to SOSCAPTCHA_ and function prefix from sos_ to soscaptcha_ (4+ char prefix per WordPress.org guidelines)sos-captcha-pro companion plugin loaded through WordPress filters/actionsRequires Plugins: sos-captcha (WP 6.5+)