تغییرات لاگ Captcha
نسخه: 1.5.0 - تاریخ انتشار: 2026-05-22
- جدید: محدودکننده نرخ (Rate Limiter) با توقف سخت — هر درخواست GET و POST را که روی صفحات محافظت شده توسط Captcha (wp-login / register / lost-password / comments، WooCommerce my-account / checkout / pay-for-order، Ultimate Multisite checkout / inline-login) رخ میدهد، شمارش میکند و با کد وضعیت HTTP 429، یک هدر
Retry-After، و یک خواباندن تصادفی (tarpit sleep) (۱ تا ۵ ثانیه، با سقف ۱5 ثانیه) پاسخ میدهد. - جدید: تنظیمات
cap_rate_limit_tarpit_min/cap_rate_limit_tarpit_maxبرای تنظیم پنجره خواباندن (tarpit window). - جدید: فیلتر
wu_cap_rate_limit_whitelist_ipبرای معاف کردن محدودههای IP مورد اعتماد. - جدید: اکشن
wu_cap_rate_limit_will_blockکه بلافاصله قبل از ارسال پاسخ توقف سخت (hard-stop response) فعال میشود. - جدید: تشخیص آدرس IP کلاینت مقاوم در برابر جعل (Spoof-resistant). تابع
Captcha_Core::get_client_ip()(منبع اصلی کلیدهای سطل محدودکننده نرخ،remoteipسایتتایید Captcha، و هشهای IP آمار) اکنون یک مدل اعتماد سختگیرانه اعمال میکند:REMOTE_ADDRحداقل است،CF-Connecting-IPتنها زمانی مورد احترام قرار میگیرد که همتای فوری در محدوده IP فعلی Cloudflare باشد، وX-Forwarded-Forتنها زمانی مورد احترام قرار میگیرد که همتای فوری در لیست پروکسیهای مورد اعتماد تنظیم شده توسط ادمین باشد، و با پیمایش از راست به چپ، پرشهای مورد اعتماد/CF را نادیده گرفته و سپس روی IP بازدیدکننده متوقف میشود. - جدید: تنظیم
cap_trust_cloudflare_headers(پیشفرض خاموش) — برای استفاده از اعتماد بهCF-Connecting-IPزمانی که پشت Cloudflare هستید، این گزینه را فعال کنید. این پلاگین یک快نمای (snapshot) CIDR Cloudflare بستهبندی شده را همراه دارد و آن را هر هفته از طریق wp-cron با یک fallback بستهبندی شده در صورت شکست بهروزرسانی، رفرش میکند. - جدید: تنظیم
cap_trusted_proxies— یک ناحیه متنی (textarea) برای CIDRها یا IPهای خام (یکی در هر خط، کامنتهای#مجاز است) که پروکسیها/Load-balancerهای خط مقدم شما را لیست میکند. بدون این تنظیم،X-Forwarded-Forحتی زمانی که محدودکننده نرخ فعال است، نادیده گرفته میشود. - جدید: تشخیص خودکار اولیه وضعیت احتمالی Cloudflare / پروکسی با یک اعلان ادمین "اعمال تنظیمات شناسایی شده". این پلاگین هرگز مقادیر ذخیره شده شما را بازنویسی نمیکند؛ اگر ترافیک بعدی نشان دهد که پیکربندی شما دیگر با واقعیت مطابقت ندارد (مثلاً Cloudflare محدودههای CIDR خود را تغییر داده و CIDR پروکسی شما قدیمی شده است)، یک اعلان عدم تطابق غیرقابل نادیده گرفتن، بهروزرسانی پیشنهادی را نمایش میدهد.
- ثابت شده: حالت نامرئی دیگر به طور پیشفرض
cap_security_levelرا به FAST کاهش نمیدهد — سطح پیکربندی شده توسط ادمین رعایت میشود. یک فیلتر جدید به نامwu_cap_server_security_levelبرای سایتهایی که منطق سفارشیسازی شده میخواهند، در دسترس است. - ثابت شده: شمارنده آمار
rate_limits_triggeredاکنون در هر مسدودسازی افزایش مییابد، نه فقط در مسیر پسپرسیار نادر پس از موفقیت. - ثابت شده:
Captcha_Core::get_client_ip()اکنون منبع واحد حقیقت برای انتساب IP بازدیدکننده در سراسر محدودکننده نرخ، ارائهدهندگان Captcha (reCAPTCHA + hCaptchasiteverify) و آمار است — این کار یک مسیر جعل را مسدود میکند که در آن درخواستهای مستقیم سرور مبدأ با هدر جعلیCF-Connecting-IP، به جای سطل همتای واقعی، توسط IP جعل شده شمارش میشدند. - ثابت شده: دروازه محدودکننده نرخ خروج کلاسیک WooCommerce اکنون به جای
woocommerce_before_checkout_form، رویtemplate_redirect(اولویت ۱) فعال میشود. هوک سطح فرم هرگز زمانی که سبد خرید خالی است، فعال نمیشود، بنابراین ترافیک سیلآور که هرگز محصولی اضافه نمیکند، کاملاً از محدودکننده دور میشد. - ثابت شده: دروازه محدودکننده نرخ پرداخت WooCommerce اکنون به جای
woocommerce_before_pay_action، رویtemplate_redirectفعال میشود. مورد دوم فقط پس از موفقیتwp_verify_nonce('woocommerce-pay')فعال میشود، به این معنی که مهاجمان غیرمجاز (مدل تهدید واقعی) هرگز محدودکننده را فعال نمیکردند. - ثابت شده: دروازه محدودکننده نرخ خروج WooCommerce Store API (blocks) اکنون به جای
woocommerce_store_api_checkout_update_order_from_request، رویrest_pre_dispatchفعال میشود. مورد دوم فقط پس از اینکه Store API سبد خرید و فیلدهای صورتحساب را اعتبارسنجی کرد، فعال میشود، بنابراین رباتهای غیرمجاز یک ۴۰۰ از اعتبارسنجکننده دریافت میکردند و هرگز محدودکننده را فعال نمیکردند. - ثابت شده: دروازه محدودکننده نرخ خروج inline-login Ultimate Multisite اکنون به جای
wu_before_inline_login، رویwu_ajax_nopriv_wu_inline_loginبا اولویت ۱ (و آینه لاگین شده) فعال میشود. مورد دوم فقط پس از موفقیتcheck_ajax_referer('wu_checkout')فعال میشود، بنابراین رباتهای غ یرمجاز بدون یک nonce معتبرwu_checkout، یک ۴۰۳ دریافت میکردند و هرگز محدودکننده را فعال نمیکردند. - ثابت شده:
Rate_Limiter::enforce()اکنون یک محافظ "یک بار در هر درخواست" را با کلیدsurface|ipاعمال میکند، بنابراین هوکهای بالادستی که در هر رندر دو بار فعال میشوند (به ویژهwu_setup_checkoutدر Ultimate Multisite)، دیگر آستانه مؤثر محدودکننده نرخ را نصف نمیکنند. - ثابت شده: دروازههای سطح محدودکننده نرخ دیگر
Captcha_Core::is_whitelisted()(wu_captcha_whitelistedfilter) را بررسی نمیکنند. این فیلتر سیگنال میدهد که "Captcha توسط سطح دیگری مدیریت شده است" و مستقل از حفاظت سیلآور است — یکپارچهسازی WooCommerce آن را برای دور زدن Captcha ورود WordPress زمانی که یک nonce Woo وجود داشت، هوک کرده بود، که باعث نشت به شمارش نرخ شد و اجازه داد POSTهای Woo از محدودکننده دور بمانند. تنها فیلترwu_cap_rate_limit_whitelist_ipمخصوص محدودکننده نرخ است که اکنون اعمال میشود.
نسخه: 1.3.2 - تاریخ انتشار: 2026-01-27
- ثابت شده: ویجت Captcha روی فرمهای خروج که از Elementor یا سایر Page Builder استفاده میکنند، رندر نمیشد.
- ثابت شده: عنصر سفارشی cap-widget توسط پاککننده (sanitization) wp_kses() حذف میشد.
- بهبود یافته: استفاده از محتوای قابل فراخوانی (callable content) برای فیلد Captcha خروج جهت دور زدن فیلتر HTML.
- بهبود یافته: سادهسازی JavaScript با fallback برای موارد لبهای.
نسخه: 1.3.1 - تاریخ انتشار: 2026-01-26
- ثابت شده: حالت نامرئی Captcha در فرمهای خروج پویا Ultimate Multisite به صورت خودکار حل نمیشد.
- بهبود یافته: اسکریپت خروج Captcha اکنون از MutationObserver برای تشخیص ویجتهای بارگذاری شده پویا استفاده میکند.
- بهبود یافته: رهگیری دکمه خروج اضافه شد تا قبل از ارسال، منتظر توکن بماند.
نسخه: 1.3.0 - تاریخ انتشار: 2026-01-27
- جدید: یکپارچهسازی خروج WooCommerce Blocks با رهگیری فراخوانی Store API.
- جدید: پشتیبانی Captcha نامرئی برای خروج WooCommerce (hCaptcha نامرئی، reCAPTCHA v2 نامرئی، v3).
- جدید: صفحه تنظیمات مستقل برای استفاده بدون Ultimate Multisite.
- جدید: Jetpack Autoloader برای جلوگیری از تداخل وابستگیها.
- ثابت شده: hCaptcha روی خروج پویا Ultimate Multisite (محتوای AJAX-بارگذاری شده) رندر نمیشد.
- ثابت شده: Captcha در صورت بروز خطای اعتبارسنجی فرم، رفرش/ریست نمیشد.
- ثابت شده: hCaptcha روی صفحه خروج WooCommerce نمایش داده نمیشد.
- ثابت شده: خطای عدم یافتن کلاس reCAPTCHA (کتابخانه PHP google/recaptcha اضافه شد).
- بهبود یافته: تشخیص خطا از طریق هوکهای WordPress، MutationObserver و رهگیری AJAX.
- بهبود یافته: توضیحات تنظیمات اکنون شامل URLهای داشبورد برای کلیدهای API هستند.
نسخه: 1.2.2 - تاریخ انتشار: 2026-01-24
- ثابت شده: Captcha روی عنصر فرم ورود Ultimate Multisite نمایش داده نمیشد (نام عدم تطابق فیلتر).
- ثابت شده: HTML ویجت Cap توسط پاککننده wp_kses() حذف میشد.
- ثابت شده: سلکتورهای JavaScript فرمهایی را پیدا نمیکردند که در ID عناصر شامل اسلش بودند.
- اضافه شده: هوک فیلتر
wu_kses_allowed_htmlبرای classaddons جهت گسترش تگهای HTML مجاز. - حذف شده: فایلهای JavaScript کد مرده با اسکریپتهای مخصوص ارائهدهنده جایگزین شدند.
نسخه: 1.2.1 - تاریخ انتشار: 2026-01-23
- ثابت شده: اعتبارسنجی توکن Captcha در محیطهای multisite شکست میخورد (اکنون از transients در سطح شبکه استفاده میکند).
- ثابت شده: Captcha اکنون برای همه کاربران، صرف نظر از وضعیت ورود، به طور مداوم رندر میشود.
- ثابت شده: عدم تطابق بین رندر و اعتبارسنجی Captcha که باعث شکستهای خروج میشد.
نسخه: 1.2.0 - تاریخ انتشار: 2026-01-21
- جدید: Cap Captcha - Captcha اثبات کار (proof-of-work) میزبانی شده، که به طور پیشفرض هنگام فعالسازی فعال میشود.
- جدید: حفاظت با پیکربندی صفر - افزونه را فعال کنید و بلافاصله محافظت خواهید شد.
- جدید: معماری ارائهدهنده Captcha چندریختی (Polymorphic) برای قابلیت توسعه آسان.
- جدید: حفاظت خروج WooCommerce Store API در برابر حملات تست کارت.
- جدید: داشبورد ردیابی آمار که چالشها، تأییدیهها و حملات مسدود شده را نشان میدهد.
- جدید: پیشتنظیمات سطح امنیتی (Fast, Medium, Max) برای دشواری Cap Captcha.
- جدید: کلاسهای پایه انتزاعی برای ارائهدهندگان reCAPTCHA و hCaptcha.
- بهبود یافته: بازسازی کد پایه به کلاسهای ارائهدهنده ماژولار.
- بهبود یافته: جداسازی بهتر وظایف با کلاس مدیر (manager class) اختصاصی.
- ثابت شده: بهبودهای امنیتی برای پاکسازی متغیر $_SERVER.
- ثابت شده: پیکربندی تست PHPUnit برای قراردادهای نامگذاری WordPress.
نسخه: 1.0.1 - تاریخ انتشار: 2025-09-28
- تغییر پیشوند به ultimate-multisite؛ بهروزرسانی دامنه متن؛ افزایش نسخه.