Changeset 3049221
- Timestamp:
- 03/11/2024 03:26:35 PM (21 months ago)
- Location:
- wordfence-login-security
- Files:
-
- 44 added
- 42 deleted
- 20 edited
- 1 copied
-
tags/1.1.10 (copied) (copied from wordfence-login-security/trunk)
-
tags/1.1.10/classes/controller/captcha.php (modified) (1 diff)
-
tags/1.1.10/classes/controller/settings.php (modified) (1 diff)
-
tags/1.1.10/classes/controller/users.php (modified) (1 diff)
-
tags/1.1.10/classes/controller/wordfencels.php (modified) (3 diffs)
-
tags/1.1.10/classes/model/tokenbucket.php (modified) (2 diffs)
-
tags/1.1.10/classes/utility/sleep.php (added)
-
tags/1.1.10/css/admin-global.1707926306.css (deleted)
-
tags/1.1.10/css/admin-global.1710170444.css (added)
-
tags/1.1.10/css/admin.1707926306.css (deleted)
-
tags/1.1.10/css/admin.1710170444.css (added)
-
tags/1.1.10/css/colorbox.1707926306.css (deleted)
-
tags/1.1.10/css/colorbox.1710170444.css (added)
-
tags/1.1.10/css/embedded.1707926306.css (deleted)
-
tags/1.1.10/css/embedded.1710170444.css (added)
-
tags/1.1.10/css/font-awesome.1707926306.css (deleted)
-
tags/1.1.10/css/font-awesome.1710170444.css (added)
-
tags/1.1.10/css/ionicons.1707926306.css (deleted)
-
tags/1.1.10/css/ionicons.1710170444.css (added)
-
tags/1.1.10/css/jquery-ui.min.1707926306.css (deleted)
-
tags/1.1.10/css/jquery-ui.min.1710170444.css (added)
-
tags/1.1.10/css/jquery-ui.structure.min.1707926306.css (deleted)
-
tags/1.1.10/css/jquery-ui.structure.min.1710170444.css (added)
-
tags/1.1.10/css/jquery-ui.theme.min.1707926306.css (deleted)
-
tags/1.1.10/css/jquery-ui.theme.min.1710170444.css (added)
-
tags/1.1.10/css/login.1707926306.css (deleted)
-
tags/1.1.10/css/login.1710170444.css (added)
-
tags/1.1.10/css/wfselect2.min.1707926306.css (deleted)
-
tags/1.1.10/css/wfselect2.min.1710170444.css (added)
-
tags/1.1.10/css/woocommerce-account.1707926306.css (deleted)
-
tags/1.1.10/css/woocommerce-account.1710170444.css (added)
-
tags/1.1.10/js/admin-global.1707926306.js (deleted)
-
tags/1.1.10/js/admin-global.1710170444.js (added)
-
tags/1.1.10/js/admin.1707926306.js (deleted)
-
tags/1.1.10/js/admin.1710170444.js (added)
-
tags/1.1.10/js/chart.umd.1707926306.js (deleted)
-
tags/1.1.10/js/chart.umd.1710170444.js (added)
-
tags/1.1.10/js/jquery.colorbox.1707926306.js (deleted)
-
tags/1.1.10/js/jquery.colorbox.1710170444.js (added)
-
tags/1.1.10/js/jquery.colorbox.min.1707926306.js (deleted)
-
tags/1.1.10/js/jquery.colorbox.min.1710170444.js (added)
-
tags/1.1.10/js/jquery.qrcode.min.1707926306.js (deleted)
-
tags/1.1.10/js/jquery.qrcode.min.1710170444.js (added)
-
tags/1.1.10/js/jquery.tmpl.min.1707926306.js (deleted)
-
tags/1.1.10/js/jquery.tmpl.min.1710170444.js (added)
-
tags/1.1.10/js/login.1707926306.js (deleted)
-
tags/1.1.10/js/login.1710170444.js (added)
-
tags/1.1.10/js/wfselect2.min.1707926306.js (deleted)
-
tags/1.1.10/js/wfselect2.min.1710170444.js (added)
-
tags/1.1.10/languages/wordfence-login-security.pot (modified) (10 diffs)
-
tags/1.1.10/readme.txt (modified) (2 diffs)
-
tags/1.1.10/views/email/login-verification.php (modified) (2 diffs)
-
tags/1.1.10/views/options/option-captcha-threshold.php (modified) (2 diffs)
-
tags/1.1.10/wordfence-login-security.php (modified) (2 diffs)
-
trunk/classes/controller/captcha.php (modified) (1 diff)
-
trunk/classes/controller/settings.php (modified) (1 diff)
-
trunk/classes/controller/users.php (modified) (1 diff)
-
trunk/classes/controller/wordfencels.php (modified) (3 diffs)
-
trunk/classes/model/tokenbucket.php (modified) (2 diffs)
-
trunk/classes/utility/sleep.php (added)
-
trunk/css/admin-global.1707926306.css (deleted)
-
trunk/css/admin-global.1710170444.css (added)
-
trunk/css/admin.1707926306.css (deleted)
-
trunk/css/admin.1710170444.css (added)
-
trunk/css/colorbox.1707926306.css (deleted)
-
trunk/css/colorbox.1710170444.css (added)
-
trunk/css/embedded.1707926306.css (deleted)
-
trunk/css/embedded.1710170444.css (added)
-
trunk/css/font-awesome.1707926306.css (deleted)
-
trunk/css/font-awesome.1710170444.css (added)
-
trunk/css/ionicons.1707926306.css (deleted)
-
trunk/css/ionicons.1710170444.css (added)
-
trunk/css/jquery-ui.min.1707926306.css (deleted)
-
trunk/css/jquery-ui.min.1710170444.css (added)
-
trunk/css/jquery-ui.structure.min.1707926306.css (deleted)
-
trunk/css/jquery-ui.structure.min.1710170444.css (added)
-
trunk/css/jquery-ui.theme.min.1707926306.css (deleted)
-
trunk/css/jquery-ui.theme.min.1710170444.css (added)
-
trunk/css/login.1707926306.css (deleted)
-
trunk/css/login.1710170444.css (added)
-
trunk/css/wfselect2.min.1707926306.css (deleted)
-
trunk/css/wfselect2.min.1710170444.css (added)
-
trunk/css/woocommerce-account.1707926306.css (deleted)
-
trunk/css/woocommerce-account.1710170444.css (added)
-
trunk/js/admin-global.1707926306.js (deleted)
-
trunk/js/admin-global.1710170444.js (added)
-
trunk/js/admin.1707926306.js (deleted)
-
trunk/js/admin.1710170444.js (added)
-
trunk/js/chart.umd.1707926306.js (deleted)
-
trunk/js/chart.umd.1710170444.js (added)
-
trunk/js/jquery.colorbox.1707926306.js (deleted)
-
trunk/js/jquery.colorbox.1710170444.js (added)
-
trunk/js/jquery.colorbox.min.1707926306.js (deleted)
-
trunk/js/jquery.colorbox.min.1710170444.js (added)
-
trunk/js/jquery.qrcode.min.1707926306.js (deleted)
-
trunk/js/jquery.qrcode.min.1710170444.js (added)
-
trunk/js/jquery.tmpl.min.1707926306.js (deleted)
-
trunk/js/jquery.tmpl.min.1710170444.js (added)
-
trunk/js/login.1707926306.js (deleted)
-
trunk/js/login.1710170444.js (added)
-
trunk/js/wfselect2.min.1707926306.js (deleted)
-
trunk/js/wfselect2.min.1710170444.js (added)
-
trunk/languages/wordfence-login-security.pot (modified) (10 diffs)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/views/email/login-verification.php (modified) (2 diffs)
-
trunk/views/options/option-captcha-threshold.php (modified) (2 diffs)
-
trunk/wordfence-login-security.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
wordfence-login-security/tags/1.1.10/classes/controller/captcha.php
r2560586 r3049221 57 57 */ 58 58 public function threshold() { 59 return Controller_Settings::shared()->get_float(Controller_Settings::OPTION_RECAPTCHA_THRESHOLD, 0.5);59 return max(0.1, Controller_Settings::shared()->get_float(Controller_Settings::OPTION_RECAPTCHA_THRESHOLD, 0.5)); 60 60 } 61 61 -
wordfence-login-security/tags/1.1.10/classes/controller/settings.php
r2937680 r3049221 218 218 return is_numeric($value) && $value > 0; 219 219 case self::OPTION_RECAPTCHA_THRESHOLD: 220 return is_numeric($value) && $value > =0 && $value <= 1;220 return is_numeric($value) && $value > 0 && $value <= 1; 221 221 case self::OPTION_RECAPTCHA_SITE_KEY: 222 222 if (empty($value)) { -
wordfence-login-security/tags/1.1.10/classes/controller/users.php
r2982696 r3049221 318 318 public function record_captcha_score($user, $score) { 319 319 if (!Controller_CAPTCHA::shared()->enabled()) { return; } 320 if ($this->has_2fa_active($user)) { return; } //2FA activated users do not retrieve a score321 320 322 321 if ($user) { update_user_meta($user->ID, 'wfls-last-captcha-score', $score); } -
wordfence-login-security/tags/1.1.10/classes/controller/wordfencels.php
r3016540 r3049221 559 559 560 560 $isLogin = !(defined('WORDFENCE_LS_AUTHENTICATION_CHECK') && WORDFENCE_LS_AUTHENTICATION_CHECK); //Checking for the purpose of prompting for 2FA, don't enforce it here 561 $isCombinedCheck = (defined('WORDFENCE_LS_CHECKING_COMBINED') && WORDFENCE_LS_CHECKING_COMBINED); 561 562 $combinedTwoFactor = false; 562 563 … … 610 611 * 3. A filter does not override it. This is to allow plugins with REST endpoints that handle authentication 611 612 * themselves to opt out of the requirement. 612 * 4. The user does not have 2FA enabled. 2FA exempts the user from requiring email verification if the score is 613 * below the threshold. 613 * 4. The user is not providing a combined credentials + 2FA authentication login request. 614 614 * 5. The request is not a WooCommerce login while WC integration is disabled 615 615 */ 616 if ( $isLogin&& !empty($username) && (!$this->_is_woocommerce_login() || Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION))) { //Login attempt, not just a wp-login.php page load616 if (!$combinedTwoFactor && !$isCombinedCheck && !empty($username) && (!$this->_is_woocommerce_login() || Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION))) { //Login attempt, not just a wp-login.php page load 617 617 618 618 $requireCAPTCHA = Controller_CAPTCHA::shared()->is_captcha_required(); 619 $performVerification = false; 619 620 620 $performVerification = false;621 621 $token = Controller_CAPTCHA::shared()->get_token(); 622 622 if ($requireCAPTCHA && empty($token) && !Controller_CAPTCHA::shared()->test_mode()) { //No CAPTCHA token means forced additional verification (if neither 2FA nor test mode are active) … … 624 624 } 625 625 626 if (is_object($user) && $user instanceof \WP_User && $this->validate_email_verification_token($user)) { //Skip the CAPTCHA check if the email address was verified 627 $requireCAPTCHA = false; 628 $performVerification = false; 629 630 //Reset token rate limit 631 $identifier = sprintf('wfls-captcha-%d', $user->ID); 632 $tokenBucket = new Model_TokenBucket('rate:' . $identifier, 3, 1 / (WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES * Model_TokenBucket::MINUTE)); //Maximum of three requests, refilling at a rate of one per token expiration period 633 $tokenBucket->reset(); 634 } 635 636 $score = false; 626 637 if ($requireCAPTCHA && !$performVerification) { 627 638 $score = Controller_CAPTCHA::shared()->score($token); 628 if ($score === false && !Controller_CAPTCHA::shared()->test_mode()) { //An invalid token will require additional verification (if neither 2FA nor test mode areactive)639 if ($score === false && !Controller_CAPTCHA::shared()->test_mode()) { //An invalid token will require additional verification (if test mode is not active) 629 640 $performVerification = true; 630 641 } 631 } 632 633 if (!isset($score)) { $score = false; } 642 else if (is_object($user) && $user instanceof \WP_User) { 643 Controller_Users::shared()->record_captcha_score($user, $score); 644 } 645 } 634 646 635 if (is_object($user) && $user instanceof \WP_User) { 636 if (Controller_Users::shared()->has_2fa_active($user)) { //CAPTCHA enforcement skipped for users with 2FA active 637 $requireCAPTCHA = false; 638 $performVerification = false; 639 } 640 641 Controller_Users::shared()->record_captcha_score($user, $score); 642 643 //Skip the CAPTCHA check if the email address was verified 644 if ($this->validate_email_verification_token($user)) { 645 $requireCAPTCHA = false; 646 $performVerification = false; 647 } 648 649 if ($requireCAPTCHA && ($performVerification || !Controller_CAPTCHA::shared()->is_human($score))) { 650 if ($this->has_woocommerce() && array_key_exists('woocommerce-login-nonce', $_POST)) { 651 $loginUrl = get_permalink(get_option('woocommerce_myaccount_page_id')); 647 if ($requireCAPTCHA) { 648 if ($performVerification || !Controller_CAPTCHA::shared()->is_human($score)) { 649 if (is_object($user) && $user instanceof \WP_User) { 650 $identifier = sprintf('wfls-captcha-%d', $user->ID); 651 $tokenBucket = new Model_TokenBucket('rate:' . $identifier, 3, 1 / (WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES * Model_TokenBucket::MINUTE)); //Maximum of three requests, refilling at a rate of one per token expiration period 652 if ($tokenBucket->consume(1)) { 653 if ($this->has_woocommerce() && array_key_exists('woocommerce-login-nonce', $_POST)) { 654 $loginUrl = get_permalink(get_option('woocommerce_myaccount_page_id')); 655 } 656 else { 657 $loginUrl = wp_login_url(); 658 } 659 $verificationUrl = add_query_arg( 660 array( 661 'wfls-email-verification' => rawurlencode(Controller_Users::shared()->generate_verification_token($user)) 662 ), 663 $loginUrl 664 ); 665 $view = new Model_View('email/login-verification', array( 666 'siteName' => get_bloginfo('name', 'raw'), 667 'verificationURL' => $verificationUrl, 668 'ip' => Model_Request::current()->ip(), 669 'canEnable2FA' => Controller_Users::shared()->can_activate_2fa($user), 670 )); 671 wp_mail($user->user_email, __('Login Verification Required', 'wordfence-login-security'), $view->render(), "Content-Type: text/html"); 672 } 652 673 } 653 else { 654 $loginUrl = wp_login_url(); 655 } 656 $verificationUrl = add_query_arg( 657 array( 658 'wfls-email-verification' => rawurlencode(Controller_Users::shared()->generate_verification_token($user)) 659 ), 660 $loginUrl 661 ); 662 $view = new Model_View('email/login-verification', array( 663 'siteName' => get_bloginfo('name', 'raw'), 664 'siteURL' => rtrim(site_url(), '/') . '/', 665 'verificationURL' => $verificationUrl, 666 'ip' => Model_Request::current()->ip(), 667 'canEnable2FA' => Controller_Users::shared()->can_activate_2fa($user), 668 )); 669 wp_mail($user->user_email, __('Login Verification Required', 'wordfence-login-security'), $view->render(), "Content-Type: text/html"); 670 671 return new \WP_Error('wfls_captcha_verify', wp_kses(__('<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. Please check the email address associated with the account for a verification link.', 'wordfence-login-security'), array('strong'=>array()))); 672 } 673 674 675 Utility_Sleep::sleep(Model_Crypto::random_int(0, 2000) / 1000); 676 return new \WP_Error('wfls_captcha_verify', wp_kses(__('<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. If there is a valid account for the provided login credentials, please check the email address associated with it for a verification link to continue logging in.', 'wordfence-login-security'), array('strong' => array()))); 677 } 674 678 } 675 679 } 676 680 677 681 if (!$combinedTwoFactor) { 678 679 682 if ($isLogin && $user instanceof \WP_User) { 680 683 if (Controller_Users::shared()->has_2fa_active($user)) { -
wordfence-login-security/tags/1.1.10/classes/model/tokenbucket.php
r2098090 r3049221 140 140 } 141 141 else { 142 $this->_unlock(); 142 143 return false; 143 144 } … … 171 172 } 172 173 174 public function reset() { 175 if (!$this->_lock()) { return false; } 176 177 if ($this->_backing == self::BACKING_WP_OPTIONS) { 178 delete_transient('wflsbucket:' . $this->_identifier); 179 } 180 else if ($this->_backing == self::BACKING_REDIS) { 181 $this->_redis->del('bucket:' . $this->_identifier); 182 } 183 184 $this->_unlock(); 185 } 186 173 187 /** 174 188 * Creates an initial record with the given number of tokens. -
wordfence-login-security/tags/1.1.10/languages/wordfence-login-security.pot
r3035804 r3049221 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Wordfence Login Security 1.1. 9\n"6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wordfence-login-security-zip- zYfqhi7Al\n"5 "Project-Id-Version: Wordfence Login Security 1.1.10\n" 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wordfence-login-security-zip-Cjy0sfiYR\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 8 8 "Language-Team: LANGUAGE <[email protected]>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2024-0 2-14T15:58:26+00:00\n"12 "POT-Creation-Date: 2024-03-11T15:20:44+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.7.1\n" … … 26 26 27 27 #. Author URI of the plugin 28 msgid "http ://www.wordfence.com/"28 msgid "https://www.wordfence.com/" 29 29 msgstr "" 30 30 … … 265 265 msgstr "" 266 266 267 #: classes/controller/users.php:51 8267 #: classes/controller/users.php:517 268 268 #: classes/controller/wordfencels.php:486 269 269 msgid "2FA Status" 270 270 msgstr "" 271 271 272 #: classes/controller/users.php:52 2272 #: classes/controller/users.php:521 273 273 msgid "Last Login" 274 274 msgstr "" 275 275 276 #: classes/controller/users.php:52 4276 #: classes/controller/users.php:523 277 277 msgid "Last CAPTCHA" 278 278 msgstr "" 279 279 280 #: classes/controller/users.php:53 4280 #: classes/controller/users.php:533 281 281 msgid "Not Allowed" 282 282 msgstr "" 283 283 284 #: classes/controller/users.php:53 9284 #: classes/controller/users.php:538 285 285 #: classes/controller/wordfencels.php:490 286 286 msgid "Active" 287 287 msgstr "" 288 288 289 #: classes/controller/users.php:54 2289 #: classes/controller/users.php:541 290 290 msgid "Inactive<small class=\"wfls-sub-status\">(Grace Period)</small>" 291 291 msgstr "" 292 292 293 #: classes/controller/users.php:54 5293 #: classes/controller/users.php:544 294 294 msgid "Locked Out<small class=\"wfls-sub-status\">(Grace Period Disabled)</small>" 295 295 msgstr "" 296 296 297 #: classes/controller/users.php:54 5297 #: classes/controller/users.php:544 298 298 msgid "Locked Out<small class=\"wfls-sub-status\">(Grace Period Exceeded)</small>" 299 299 msgstr "" 300 300 301 #: classes/controller/users.php:54 8301 #: classes/controller/users.php:547 302 302 #: classes/controller/wordfencels.php:490 303 303 msgid "Inactive" 304 304 msgstr "" 305 305 306 #: classes/controller/users.php:56 1306 #: classes/controller/users.php:560 307 307 msgid "(not required)" 308 308 msgstr "" 309 309 310 #: classes/controller/users.php:65 5310 #: classes/controller/users.php:654 311 311 msgid "Edit two-factor authentication for %s" 312 312 msgstr "" 313 313 314 #: classes/controller/users.php:65 5314 #: classes/controller/users.php:654 315 315 #: views/settings/options.php:9 316 316 msgid "2FA" 317 317 msgstr "" 318 318 319 #: classes/controller/users.php:66 6319 #: classes/controller/users.php:665 320 320 #: views/settings/user-stats.php:25 321 321 msgid "2FA Active" 322 322 msgstr "" 323 323 324 #: classes/controller/users.php:66 7324 #: classes/controller/users.php:666 325 325 #: views/settings/user-stats.php:26 326 326 msgid "2FA Inactive" … … 442 442 443 443 #: classes/controller/wordfencels.php:490 444 #: classes/controller/wordfencels.php:85 2444 #: classes/controller/wordfencels.php:855 445 445 #: views/manage/grace-period.php:22 446 446 msgid "Locked Out" … … 500 500 msgstr "" 501 501 502 #: classes/controller/wordfencels.php:6 69502 #: classes/controller/wordfencels.php:671 503 503 msgid "Login Verification Required" 504 504 msgstr "" 505 505 506 #: classes/controller/wordfencels.php:67 1507 msgid "<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. Please check the email address associated with the account for a verification link."508 msgstr "" 509 510 #: classes/controller/wordfencels.php:6 89506 #: classes/controller/wordfencels.php:676 507 msgid "<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. If there is a valid account for the provided login credentials, please check the email address associated with it for a verification link to continue logging in." 508 msgstr "" 509 510 #: classes/controller/wordfencels.php:692 511 511 msgid "<strong>CODE INVALID</strong>: The 2FA code provided is either expired or invalid. Please try again." 512 512 msgstr "" 513 513 514 #: classes/controller/wordfencels.php: 698514 #: classes/controller/wordfencels.php:701 515 515 msgid "<strong>CODE REQUIRED</strong>: Please enter your 2FA code immediately after your password in the same field." 516 516 msgstr "" 517 517 518 #: classes/controller/wordfencels.php:70 0518 #: classes/controller/wordfencels.php:703 519 519 msgid "<strong>CODE REQUIRED</strong>: Please provide your 2FA code when prompted." 520 520 msgstr "" 521 521 522 #: classes/controller/wordfencels.php:70 3522 #: classes/controller/wordfencels.php:706 523 523 msgid "<strong>LOGIN BLOCKED</strong>: 2FA is required to be active on your account. Please contact the site administrator." 524 524 msgstr "" 525 525 526 #: classes/controller/wordfencels.php:70 6526 #: classes/controller/wordfencels.php:709 527 527 msgid "You do not currently have two-factor authentication active on your account, which will be required beginning %s. <a href=\"%s\">Configure 2FA</a>" 528 528 msgstr "" 529 529 530 #: classes/controller/wordfencels.php:75 6530 #: classes/controller/wordfencels.php:759 531 531 msgid "Email verification succeeded. Please continue logging in." 532 532 msgstr "" 533 533 534 #: classes/controller/wordfencels.php:7 59534 #: classes/controller/wordfencels.php:762 535 535 msgid "Email verification invalid or expired. Please try again." 536 536 msgstr "" 537 537 538 #: classes/controller/wordfencels.php:813539 538 #: classes/controller/wordfencels.php:816 539 #: classes/controller/wordfencels.php:819 540 540 msgid "Login Security" 541 541 msgstr "" 542 542 543 #: classes/controller/wordfencels.php:84 4543 #: classes/controller/wordfencels.php:847 544 544 #: views/settings/options.php:23 545 545 #: views/settings/user-stats.php:33 … … 547 547 msgstr "" 548 548 549 #: classes/controller/wordfencels.php:8 48549 #: classes/controller/wordfencels.php:851 550 550 #: views/manage/grace-period.php:22 551 551 #: views/options/option-roles.php:57 … … 553 553 msgstr "" 554 554 555 #: classes/controller/wordfencels.php:8 67555 #: classes/controller/wordfencels.php:870 556 556 msgid "Users without 2FA active (%s)" 557 557 msgstr "" 558 558 559 #: classes/controller/wordfencels.php:88 5560 #: classes/controller/wordfencels.php:88 6559 #: classes/controller/wordfencels.php:888 560 #: classes/controller/wordfencels.php:889 561 561 msgid "Two-Factor Authentication" 562 562 msgstr "" 563 563 564 #: classes/controller/wordfencels.php:88 6564 #: classes/controller/wordfencels.php:889 565 565 msgid "Learn more<span class=\"wfls-hidden-xs\"> about Two-Factor Authentication</span>" 566 566 msgstr "" 567 567 568 #: classes/controller/wordfencels.php:89 5568 #: classes/controller/wordfencels.php:898 569 569 msgid "Settings" 570 570 msgstr "" 571 571 572 #: classes/controller/wordfencels.php:89 6572 #: classes/controller/wordfencels.php:899 573 573 msgid "Login Security Settings" 574 574 msgstr "" 575 575 576 #: classes/controller/wordfencels.php:89 6576 #: classes/controller/wordfencels.php:899 577 577 msgid "Learn more<span class=\"wfls-hidden-xs\"> about Login Security</span>" 578 578 msgstr "" 579 579 580 #: classes/controller/wordfencels.php:92 2580 #: classes/controller/wordfencels.php:925 581 581 msgid "<strong>REGISTRATION ATTEMPT BLOCKED</strong>: This site requires a security token created when the page loads for all registration attempts. Please ensure JavaScript is enabled and try again." 582 582 msgstr "" 583 583 584 #: classes/controller/wordfencels.php:9 29584 #: classes/controller/wordfencels.php:932 585 585 msgid "<strong>REGISTRATION ATTEMPT BLOCKED</strong>: The security token for the login attempt was invalid or expired. Please reload the page and try again." 586 586 msgstr "" 587 587 588 #: classes/controller/wordfencels.php:94 2588 #: classes/controller/wordfencels.php:945 589 589 msgid "<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or <a href=\"#\" class=\"wfls-registration-captcha-contact\" data-token=\"%s\">contact the site owner</a> for help." 590 590 msgstr "" 591 591 592 #: classes/controller/wordfencels.php:94 5592 #: classes/controller/wordfencels.php:948 593 593 msgid "<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or contact the site owner for help." 594 594 msgstr "" 595 595 596 #: classes/controller/wordfencels.php:101 5596 #: classes/controller/wordfencels.php:1018 597 597 msgid "Wordfence 2FA" 598 598 msgstr "" … … 647 647 msgstr "" 648 648 649 #: views/email/login-verification.php:11 650 msgid "Please verify a login attempt for your account on <a href=\"%s\"><strong>%s</strong></a>." 649 #: views/email/login-verification.php:10 650 msgid "Please verify a login attempt for your account on: %s" 651 msgstr "" 652 653 #: views/email/login-verification.php:12 654 msgid "Request Time:" 651 655 msgstr "" 652 656 653 657 #: views/email/login-verification.php:13 654 msgid "Request Time:"655 msgstr ""656 657 #: views/email/login-verification.php:14658 658 msgid "IP:" 659 659 msgstr "" 660 660 661 #: views/email/login-verification.php:1 6661 #: views/email/login-verification.php:15 662 662 msgid "The request was flagged as suspicious, and we need verification that you attempted to log in to allow it to proceed. This verification link <b>will be valid for 15 minutes</b> from the time it was sent. If you did not attempt this login, please change your password immediately." 663 663 msgstr "" 664 664 665 #: views/email/login-verification.php:19 666 msgid "You may bypass this verification step permanently by enabling two-factor authentication on your account." 667 msgstr "" 668 669 #: views/email/login-verification.php:22 670 msgid "<a href=\"%s\"><b>Verify and Log In</b></a>" 665 #: views/email/login-verification.php:17 666 msgid "If you were attempting to log in to this site, <a href=\"%s\"><strong>Verify and Log In</strong></a>" 671 667 msgstr "" 672 668 … … 872 868 873 869 #: views/options/option-captcha-threshold.php:16 874 msgid "0.1 "875 msgstr "" 876 877 #: views/options/option-captcha-threshold.php: 17878 msgid " 0.0 (definitely a bot)"870 msgid "0.1 (probably a bot)" 871 msgstr "" 872 873 #: views/options/option-captcha-threshold.php:27 874 msgid "reCAPTCHA human/bot threshold score" 879 875 msgstr "" 880 876 881 877 #: views/options/option-captcha-threshold.php:28 882 msgid "reCAPTCHA human/bot threshold score"883 msgstr ""884 885 #: views/options/option-captcha-threshold.php:29886 878 msgid "A reCAPTCHA score equal to or higher than this value will be considered human. Anything lower will be treated as a bot and require additional verification for login and registration." 887 879 msgstr "" 888 880 889 #: views/options/option-captcha-threshold.php:5 1881 #: views/options/option-captcha-threshold.php:50 890 882 msgid "Reset Score Statistics" 891 883 msgstr "" 892 884 893 #: views/options/option-captcha-threshold.php:8 8885 #: views/options/option-captcha-threshold.php:87 894 886 msgid "Requests" 895 887 msgstr "" 896 888 897 #: views/options/option-captcha-threshold.php:10 6889 #: views/options/option-captcha-threshold.php:105 898 890 msgid "reCAPTCHA Score History" 899 891 msgstr "" 900 892 901 #: views/options/option-captcha-threshold.php:11 3893 #: views/options/option-captcha-threshold.php:112 902 894 msgid "Count" 903 895 msgstr "" -
wordfence-login-security/tags/1.1.10/readme.txt
r3035812 r3049221 5 5 Requires PHP: 5.5 6 6 Tested up to: 6.4 7 Stable tag: 1.1. 97 Stable tag: 1.1.10 8 8 9 9 Secure your website with Wordfence Login Security, providing two-factor authentication, login and registration CAPTCHA, and XML-RPC protection. … … 58 58 59 59 == Changelog == 60 61 = 1.1.10 - March 11, 2024 = 62 * Change: Removed the extra site link from the CAPTCHA verification email message to avoid confusion with the verify link 63 * Change: CAPTCHA verification when enabled now additionally applies to 2FA logins (may send an email verification on low scores) and no longer reveals whether a user exists for the submitted account credentials (credit: Raxis) 60 64 61 65 = 1.1.9 - February 14, 2024 = -
wordfence-login-security/tags/1.1.10/views/email/login-verification.php
r2937680 r3049221 4 4 * @var string $ip The requesting IP. Required. 5 5 * @var string $siteName The site name. Required. 6 * @var string $siteURL The site URL. Required.7 6 * @var string $verificationURL The verification URL. Required. 8 7 * @var bool $canEnable2FA Whether or not the user this is being sent to can enable 2FA. Optional 9 8 */ 10 9 ?> 11 <strong><?php echo wp_kses(sprintf(__('Please verify a login attempt for your account on <a href="%s"><strong>%s</strong></a>.', 'wordfence-login-security'), esc_url($siteURL), $siteName), array('a'=>array('href'=>array()),'strong'=>array())); ?></strong>10 <strong><?php echo wp_kses(sprintf(__('Please verify a login attempt for your account on: %s', 'wordfence-login-security'), $siteName), array('strong'=>array())); ?></strong> 12 11 <br><br> 13 12 <?php echo '<strong>' . esc_html__('Request Time:', 'wordfence-login-security') . '</strong> ' . esc_html(\WordfenceLS\Controller_Time::format_local_time('F j, Y h:i:s A')); ?><br> … … 16 15 <?php echo wp_kses(__('The request was flagged as suspicious, and we need verification that you attempted to log in to allow it to proceed. This verification link <b>will be valid for 15 minutes</b> from the time it was sent. If you did not attempt this login, please change your password immediately.', 'wordfence-login-security'), array('b'=>array())); ?> 17 16 <br><br> 18 <?php if (isset($canEnable2FA) && $canEnable2FA): ?> 19 <?php esc_html_e('You may bypass this verification step permanently by enabling two-factor authentication on your account.', 'wordfence-login-security'); ?> 20 <br><br> 21 <?php endif; ?> 22 <?php echo wp_kses(sprintf(__('<a href="%s"><b>Verify and Log In</b></a>', 'wordfence-login-security'), esc_url($verificationURL)), array('a'=>array('href'=>array()), 'b'=>array())); ?> 17 <?php echo wp_kses(sprintf(__('If you were attempting to log in to this site, <a href="%s"><strong>Verify and Log In</strong></a>', 'wordfence-login-security'), esc_url($verificationURL)), array('a' => array('href' => array()), 'strong' => array())); ?> -
wordfence-login-security/tags/1.1.10/views/options/option-captcha-threshold.php
r2937680 r3049221 5 5 $currentValue = \WordfenceLS\Controller_Settings::shared()->get_float($optionName, 0.5); 6 6 $selectOptions = array( 7 array('label' => __('1.0 (definitely a human)', 'wordfence-login-security'), 'value' => 1.0), 8 array('label' => __('0.9', 'wordfence-login-security'), 'value' => 0.9), 9 array('label' => __('0.8', 'wordfence-login-security'), 'value' => 0.8), 10 array('label' => __('0.7', 'wordfence-login-security'), 'value' => 0.7), 11 array('label' => __('0.6', 'wordfence-login-security'), 'value' => 0.6), 12 array('label' => __('0.5 (probably a human)', 'wordfence-login-security'), 'value' => 0.5), 13 array('label' => __('0.4', 'wordfence-login-security'), 'value' => 0.4), 14 array('label' => __('0.3', 'wordfence-login-security'), 'value' => 0.3), 15 array('label' => __('0.2', 'wordfence-login-security'), 'value' => 0.2), 16 array('label' => __('0.1', 'wordfence-login-security'), 'value' => 0.1), 17 array('label' => __('0.0 (definitely a bot)', 'wordfence-login-security'), 'value' => 0.0), 7 array('label' => __('1.0 (definitely a human)', 'wordfence-login-security'), 'value' => 1.0, 'selected' => ((int) ($currentValue * 10)) == 10), 8 array('label' => __('0.9', 'wordfence-login-security'), 'value' => 0.9, 'selected' => ((int) ($currentValue * 10)) == 9), 9 array('label' => __('0.8', 'wordfence-login-security'), 'value' => 0.8, 'selected' => ((int) ($currentValue * 10)) == 8), 10 array('label' => __('0.7', 'wordfence-login-security'), 'value' => 0.7, 'selected' => ((int) ($currentValue * 10)) == 7), 11 array('label' => __('0.6', 'wordfence-login-security'), 'value' => 0.6, 'selected' => ((int) ($currentValue * 10)) == 6), 12 array('label' => __('0.5 (probably a human)', 'wordfence-login-security'), 'value' => 0.5, 'selected' => ((int) ($currentValue * 10)) == 5), 13 array('label' => __('0.4', 'wordfence-login-security'), 'value' => 0.4, 'selected' => ((int) ($currentValue * 10)) == 4), 14 array('label' => __('0.3', 'wordfence-login-security'), 'value' => 0.3, 'selected' => ((int) ($currentValue * 10)) == 3), 15 array('label' => __('0.2', 'wordfence-login-security'), 'value' => 0.2, 'selected' => ((int) ($currentValue * 10)) == 2), 16 array('label' => __('0.1 (probably a bot)', 'wordfence-login-security'), 'value' => 0.1, 'selected' => ((int) ($currentValue * 10)) <= 1), 18 17 ); 19 18 ?> … … 33 32 <select aria-labelledby="wfls-option-recaptcha-threshold-label"> 34 33 <?php foreach ($selectOptions as $o): ?> 35 <option class="wfls-option-select-option" value="<?php echo esc_attr($o['value']); ?>"<?php if ( ((int) ($o['value'] * 10)) == ((int) ($currentValue * 10))) { echo ' selected'; } ?>><?php echo esc_html($o['label']); ?></option>34 <option class="wfls-option-select-option" value="<?php echo esc_attr($o['value']); ?>"<?php if ($o['selected']) { echo ' selected'; } ?>><?php echo esc_html($o['label']); ?></option> 36 35 <?php endforeach; ?> 37 36 </select> -
wordfence-login-security/tags/1.1.10/wordfence-login-security.php
r3035804 r3049221 4 4 Description: Wordfence Login Security 5 5 Author: Wordfence 6 Author URI: http ://www.wordfence.com/7 Version: 1.1. 96 Author URI: https://www.wordfence.com/ 7 Version: 1.1.10 8 8 Network: true 9 9 Requires at least: 4.5 … … 39 39 define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading)); 40 40 41 define('WORDFENCE_LS_VERSION', '1.1. 9');42 define('WORDFENCE_LS_BUILD_NUMBER', '17 07926306');41 define('WORDFENCE_LS_VERSION', '1.1.10'); 42 define('WORDFENCE_LS_BUILD_NUMBER', '1710170444'); 43 43 44 44 define('WORDFENCE_LS_PLUGIN_BASENAME', plugin_basename(__FILE__)); -
wordfence-login-security/trunk/classes/controller/captcha.php
r2560586 r3049221 57 57 */ 58 58 public function threshold() { 59 return Controller_Settings::shared()->get_float(Controller_Settings::OPTION_RECAPTCHA_THRESHOLD, 0.5);59 return max(0.1, Controller_Settings::shared()->get_float(Controller_Settings::OPTION_RECAPTCHA_THRESHOLD, 0.5)); 60 60 } 61 61 -
wordfence-login-security/trunk/classes/controller/settings.php
r2937680 r3049221 218 218 return is_numeric($value) && $value > 0; 219 219 case self::OPTION_RECAPTCHA_THRESHOLD: 220 return is_numeric($value) && $value > =0 && $value <= 1;220 return is_numeric($value) && $value > 0 && $value <= 1; 221 221 case self::OPTION_RECAPTCHA_SITE_KEY: 222 222 if (empty($value)) { -
wordfence-login-security/trunk/classes/controller/users.php
r2982696 r3049221 318 318 public function record_captcha_score($user, $score) { 319 319 if (!Controller_CAPTCHA::shared()->enabled()) { return; } 320 if ($this->has_2fa_active($user)) { return; } //2FA activated users do not retrieve a score321 320 322 321 if ($user) { update_user_meta($user->ID, 'wfls-last-captcha-score', $score); } -
wordfence-login-security/trunk/classes/controller/wordfencels.php
r3016540 r3049221 559 559 560 560 $isLogin = !(defined('WORDFENCE_LS_AUTHENTICATION_CHECK') && WORDFENCE_LS_AUTHENTICATION_CHECK); //Checking for the purpose of prompting for 2FA, don't enforce it here 561 $isCombinedCheck = (defined('WORDFENCE_LS_CHECKING_COMBINED') && WORDFENCE_LS_CHECKING_COMBINED); 561 562 $combinedTwoFactor = false; 562 563 … … 610 611 * 3. A filter does not override it. This is to allow plugins with REST endpoints that handle authentication 611 612 * themselves to opt out of the requirement. 612 * 4. The user does not have 2FA enabled. 2FA exempts the user from requiring email verification if the score is 613 * below the threshold. 613 * 4. The user is not providing a combined credentials + 2FA authentication login request. 614 614 * 5. The request is not a WooCommerce login while WC integration is disabled 615 615 */ 616 if ( $isLogin&& !empty($username) && (!$this->_is_woocommerce_login() || Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION))) { //Login attempt, not just a wp-login.php page load616 if (!$combinedTwoFactor && !$isCombinedCheck && !empty($username) && (!$this->_is_woocommerce_login() || Controller_Settings::shared()->get_bool(Controller_Settings::OPTION_ENABLE_WOOCOMMERCE_INTEGRATION))) { //Login attempt, not just a wp-login.php page load 617 617 618 618 $requireCAPTCHA = Controller_CAPTCHA::shared()->is_captcha_required(); 619 $performVerification = false; 619 620 620 $performVerification = false;621 621 $token = Controller_CAPTCHA::shared()->get_token(); 622 622 if ($requireCAPTCHA && empty($token) && !Controller_CAPTCHA::shared()->test_mode()) { //No CAPTCHA token means forced additional verification (if neither 2FA nor test mode are active) … … 624 624 } 625 625 626 if (is_object($user) && $user instanceof \WP_User && $this->validate_email_verification_token($user)) { //Skip the CAPTCHA check if the email address was verified 627 $requireCAPTCHA = false; 628 $performVerification = false; 629 630 //Reset token rate limit 631 $identifier = sprintf('wfls-captcha-%d', $user->ID); 632 $tokenBucket = new Model_TokenBucket('rate:' . $identifier, 3, 1 / (WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES * Model_TokenBucket::MINUTE)); //Maximum of three requests, refilling at a rate of one per token expiration period 633 $tokenBucket->reset(); 634 } 635 636 $score = false; 626 637 if ($requireCAPTCHA && !$performVerification) { 627 638 $score = Controller_CAPTCHA::shared()->score($token); 628 if ($score === false && !Controller_CAPTCHA::shared()->test_mode()) { //An invalid token will require additional verification (if neither 2FA nor test mode areactive)639 if ($score === false && !Controller_CAPTCHA::shared()->test_mode()) { //An invalid token will require additional verification (if test mode is not active) 629 640 $performVerification = true; 630 641 } 631 } 632 633 if (!isset($score)) { $score = false; } 642 else if (is_object($user) && $user instanceof \WP_User) { 643 Controller_Users::shared()->record_captcha_score($user, $score); 644 } 645 } 634 646 635 if (is_object($user) && $user instanceof \WP_User) { 636 if (Controller_Users::shared()->has_2fa_active($user)) { //CAPTCHA enforcement skipped for users with 2FA active 637 $requireCAPTCHA = false; 638 $performVerification = false; 639 } 640 641 Controller_Users::shared()->record_captcha_score($user, $score); 642 643 //Skip the CAPTCHA check if the email address was verified 644 if ($this->validate_email_verification_token($user)) { 645 $requireCAPTCHA = false; 646 $performVerification = false; 647 } 648 649 if ($requireCAPTCHA && ($performVerification || !Controller_CAPTCHA::shared()->is_human($score))) { 650 if ($this->has_woocommerce() && array_key_exists('woocommerce-login-nonce', $_POST)) { 651 $loginUrl = get_permalink(get_option('woocommerce_myaccount_page_id')); 647 if ($requireCAPTCHA) { 648 if ($performVerification || !Controller_CAPTCHA::shared()->is_human($score)) { 649 if (is_object($user) && $user instanceof \WP_User) { 650 $identifier = sprintf('wfls-captcha-%d', $user->ID); 651 $tokenBucket = new Model_TokenBucket('rate:' . $identifier, 3, 1 / (WORDFENCE_LS_EMAIL_VALIDITY_DURATION_MINUTES * Model_TokenBucket::MINUTE)); //Maximum of three requests, refilling at a rate of one per token expiration period 652 if ($tokenBucket->consume(1)) { 653 if ($this->has_woocommerce() && array_key_exists('woocommerce-login-nonce', $_POST)) { 654 $loginUrl = get_permalink(get_option('woocommerce_myaccount_page_id')); 655 } 656 else { 657 $loginUrl = wp_login_url(); 658 } 659 $verificationUrl = add_query_arg( 660 array( 661 'wfls-email-verification' => rawurlencode(Controller_Users::shared()->generate_verification_token($user)) 662 ), 663 $loginUrl 664 ); 665 $view = new Model_View('email/login-verification', array( 666 'siteName' => get_bloginfo('name', 'raw'), 667 'verificationURL' => $verificationUrl, 668 'ip' => Model_Request::current()->ip(), 669 'canEnable2FA' => Controller_Users::shared()->can_activate_2fa($user), 670 )); 671 wp_mail($user->user_email, __('Login Verification Required', 'wordfence-login-security'), $view->render(), "Content-Type: text/html"); 672 } 652 673 } 653 else { 654 $loginUrl = wp_login_url(); 655 } 656 $verificationUrl = add_query_arg( 657 array( 658 'wfls-email-verification' => rawurlencode(Controller_Users::shared()->generate_verification_token($user)) 659 ), 660 $loginUrl 661 ); 662 $view = new Model_View('email/login-verification', array( 663 'siteName' => get_bloginfo('name', 'raw'), 664 'siteURL' => rtrim(site_url(), '/') . '/', 665 'verificationURL' => $verificationUrl, 666 'ip' => Model_Request::current()->ip(), 667 'canEnable2FA' => Controller_Users::shared()->can_activate_2fa($user), 668 )); 669 wp_mail($user->user_email, __('Login Verification Required', 'wordfence-login-security'), $view->render(), "Content-Type: text/html"); 670 671 return new \WP_Error('wfls_captcha_verify', wp_kses(__('<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. Please check the email address associated with the account for a verification link.', 'wordfence-login-security'), array('strong'=>array()))); 672 } 673 674 675 Utility_Sleep::sleep(Model_Crypto::random_int(0, 2000) / 1000); 676 return new \WP_Error('wfls_captcha_verify', wp_kses(__('<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. If there is a valid account for the provided login credentials, please check the email address associated with it for a verification link to continue logging in.', 'wordfence-login-security'), array('strong' => array()))); 677 } 674 678 } 675 679 } 676 680 677 681 if (!$combinedTwoFactor) { 678 679 682 if ($isLogin && $user instanceof \WP_User) { 680 683 if (Controller_Users::shared()->has_2fa_active($user)) { -
wordfence-login-security/trunk/classes/model/tokenbucket.php
r2098090 r3049221 140 140 } 141 141 else { 142 $this->_unlock(); 142 143 return false; 143 144 } … … 171 172 } 172 173 174 public function reset() { 175 if (!$this->_lock()) { return false; } 176 177 if ($this->_backing == self::BACKING_WP_OPTIONS) { 178 delete_transient('wflsbucket:' . $this->_identifier); 179 } 180 else if ($this->_backing == self::BACKING_REDIS) { 181 $this->_redis->del('bucket:' . $this->_identifier); 182 } 183 184 $this->_unlock(); 185 } 186 173 187 /** 174 188 * Creates an initial record with the given number of tokens. -
wordfence-login-security/trunk/languages/wordfence-login-security.pot
r3035804 r3049221 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: Wordfence Login Security 1.1. 9\n"6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wordfence-login-security-zip- zYfqhi7Al\n"5 "Project-Id-Version: Wordfence Login Security 1.1.10\n" 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wordfence-login-security-zip-Cjy0sfiYR\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 8 8 "Language-Team: LANGUAGE <[email protected]>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2024-0 2-14T15:58:26+00:00\n"12 "POT-Creation-Date: 2024-03-11T15:20:44+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.7.1\n" … … 26 26 27 27 #. Author URI of the plugin 28 msgid "http ://www.wordfence.com/"28 msgid "https://www.wordfence.com/" 29 29 msgstr "" 30 30 … … 265 265 msgstr "" 266 266 267 #: classes/controller/users.php:51 8267 #: classes/controller/users.php:517 268 268 #: classes/controller/wordfencels.php:486 269 269 msgid "2FA Status" 270 270 msgstr "" 271 271 272 #: classes/controller/users.php:52 2272 #: classes/controller/users.php:521 273 273 msgid "Last Login" 274 274 msgstr "" 275 275 276 #: classes/controller/users.php:52 4276 #: classes/controller/users.php:523 277 277 msgid "Last CAPTCHA" 278 278 msgstr "" 279 279 280 #: classes/controller/users.php:53 4280 #: classes/controller/users.php:533 281 281 msgid "Not Allowed" 282 282 msgstr "" 283 283 284 #: classes/controller/users.php:53 9284 #: classes/controller/users.php:538 285 285 #: classes/controller/wordfencels.php:490 286 286 msgid "Active" 287 287 msgstr "" 288 288 289 #: classes/controller/users.php:54 2289 #: classes/controller/users.php:541 290 290 msgid "Inactive<small class=\"wfls-sub-status\">(Grace Period)</small>" 291 291 msgstr "" 292 292 293 #: classes/controller/users.php:54 5293 #: classes/controller/users.php:544 294 294 msgid "Locked Out<small class=\"wfls-sub-status\">(Grace Period Disabled)</small>" 295 295 msgstr "" 296 296 297 #: classes/controller/users.php:54 5297 #: classes/controller/users.php:544 298 298 msgid "Locked Out<small class=\"wfls-sub-status\">(Grace Period Exceeded)</small>" 299 299 msgstr "" 300 300 301 #: classes/controller/users.php:54 8301 #: classes/controller/users.php:547 302 302 #: classes/controller/wordfencels.php:490 303 303 msgid "Inactive" 304 304 msgstr "" 305 305 306 #: classes/controller/users.php:56 1306 #: classes/controller/users.php:560 307 307 msgid "(not required)" 308 308 msgstr "" 309 309 310 #: classes/controller/users.php:65 5310 #: classes/controller/users.php:654 311 311 msgid "Edit two-factor authentication for %s" 312 312 msgstr "" 313 313 314 #: classes/controller/users.php:65 5314 #: classes/controller/users.php:654 315 315 #: views/settings/options.php:9 316 316 msgid "2FA" 317 317 msgstr "" 318 318 319 #: classes/controller/users.php:66 6319 #: classes/controller/users.php:665 320 320 #: views/settings/user-stats.php:25 321 321 msgid "2FA Active" 322 322 msgstr "" 323 323 324 #: classes/controller/users.php:66 7324 #: classes/controller/users.php:666 325 325 #: views/settings/user-stats.php:26 326 326 msgid "2FA Inactive" … … 442 442 443 443 #: classes/controller/wordfencels.php:490 444 #: classes/controller/wordfencels.php:85 2444 #: classes/controller/wordfencels.php:855 445 445 #: views/manage/grace-period.php:22 446 446 msgid "Locked Out" … … 500 500 msgstr "" 501 501 502 #: classes/controller/wordfencels.php:6 69502 #: classes/controller/wordfencels.php:671 503 503 msgid "Login Verification Required" 504 504 msgstr "" 505 505 506 #: classes/controller/wordfencels.php:67 1507 msgid "<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. Please check the email address associated with the account for a verification link."508 msgstr "" 509 510 #: classes/controller/wordfencels.php:6 89506 #: classes/controller/wordfencels.php:676 507 msgid "<strong>VERIFICATION REQUIRED</strong>: Additional verification is required for login. If there is a valid account for the provided login credentials, please check the email address associated with it for a verification link to continue logging in." 508 msgstr "" 509 510 #: classes/controller/wordfencels.php:692 511 511 msgid "<strong>CODE INVALID</strong>: The 2FA code provided is either expired or invalid. Please try again." 512 512 msgstr "" 513 513 514 #: classes/controller/wordfencels.php: 698514 #: classes/controller/wordfencels.php:701 515 515 msgid "<strong>CODE REQUIRED</strong>: Please enter your 2FA code immediately after your password in the same field." 516 516 msgstr "" 517 517 518 #: classes/controller/wordfencels.php:70 0518 #: classes/controller/wordfencels.php:703 519 519 msgid "<strong>CODE REQUIRED</strong>: Please provide your 2FA code when prompted." 520 520 msgstr "" 521 521 522 #: classes/controller/wordfencels.php:70 3522 #: classes/controller/wordfencels.php:706 523 523 msgid "<strong>LOGIN BLOCKED</strong>: 2FA is required to be active on your account. Please contact the site administrator." 524 524 msgstr "" 525 525 526 #: classes/controller/wordfencels.php:70 6526 #: classes/controller/wordfencels.php:709 527 527 msgid "You do not currently have two-factor authentication active on your account, which will be required beginning %s. <a href=\"%s\">Configure 2FA</a>" 528 528 msgstr "" 529 529 530 #: classes/controller/wordfencels.php:75 6530 #: classes/controller/wordfencels.php:759 531 531 msgid "Email verification succeeded. Please continue logging in." 532 532 msgstr "" 533 533 534 #: classes/controller/wordfencels.php:7 59534 #: classes/controller/wordfencels.php:762 535 535 msgid "Email verification invalid or expired. Please try again." 536 536 msgstr "" 537 537 538 #: classes/controller/wordfencels.php:813539 538 #: classes/controller/wordfencels.php:816 539 #: classes/controller/wordfencels.php:819 540 540 msgid "Login Security" 541 541 msgstr "" 542 542 543 #: classes/controller/wordfencels.php:84 4543 #: classes/controller/wordfencels.php:847 544 544 #: views/settings/options.php:23 545 545 #: views/settings/user-stats.php:33 … … 547 547 msgstr "" 548 548 549 #: classes/controller/wordfencels.php:8 48549 #: classes/controller/wordfencels.php:851 550 550 #: views/manage/grace-period.php:22 551 551 #: views/options/option-roles.php:57 … … 553 553 msgstr "" 554 554 555 #: classes/controller/wordfencels.php:8 67555 #: classes/controller/wordfencels.php:870 556 556 msgid "Users without 2FA active (%s)" 557 557 msgstr "" 558 558 559 #: classes/controller/wordfencels.php:88 5560 #: classes/controller/wordfencels.php:88 6559 #: classes/controller/wordfencels.php:888 560 #: classes/controller/wordfencels.php:889 561 561 msgid "Two-Factor Authentication" 562 562 msgstr "" 563 563 564 #: classes/controller/wordfencels.php:88 6564 #: classes/controller/wordfencels.php:889 565 565 msgid "Learn more<span class=\"wfls-hidden-xs\"> about Two-Factor Authentication</span>" 566 566 msgstr "" 567 567 568 #: classes/controller/wordfencels.php:89 5568 #: classes/controller/wordfencels.php:898 569 569 msgid "Settings" 570 570 msgstr "" 571 571 572 #: classes/controller/wordfencels.php:89 6572 #: classes/controller/wordfencels.php:899 573 573 msgid "Login Security Settings" 574 574 msgstr "" 575 575 576 #: classes/controller/wordfencels.php:89 6576 #: classes/controller/wordfencels.php:899 577 577 msgid "Learn more<span class=\"wfls-hidden-xs\"> about Login Security</span>" 578 578 msgstr "" 579 579 580 #: classes/controller/wordfencels.php:92 2580 #: classes/controller/wordfencels.php:925 581 581 msgid "<strong>REGISTRATION ATTEMPT BLOCKED</strong>: This site requires a security token created when the page loads for all registration attempts. Please ensure JavaScript is enabled and try again." 582 582 msgstr "" 583 583 584 #: classes/controller/wordfencels.php:9 29584 #: classes/controller/wordfencels.php:932 585 585 msgid "<strong>REGISTRATION ATTEMPT BLOCKED</strong>: The security token for the login attempt was invalid or expired. Please reload the page and try again." 586 586 msgstr "" 587 587 588 #: classes/controller/wordfencels.php:94 2588 #: classes/controller/wordfencels.php:945 589 589 msgid "<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or <a href=\"#\" class=\"wfls-registration-captcha-contact\" data-token=\"%s\">contact the site owner</a> for help." 590 590 msgstr "" 591 591 592 #: classes/controller/wordfencels.php:94 5592 #: classes/controller/wordfencels.php:948 593 593 msgid "<strong>REGISTRATION BLOCKED</strong>: The registration request was blocked because it was flagged as spam. Please try again or contact the site owner for help." 594 594 msgstr "" 595 595 596 #: classes/controller/wordfencels.php:101 5596 #: classes/controller/wordfencels.php:1018 597 597 msgid "Wordfence 2FA" 598 598 msgstr "" … … 647 647 msgstr "" 648 648 649 #: views/email/login-verification.php:11 650 msgid "Please verify a login attempt for your account on <a href=\"%s\"><strong>%s</strong></a>." 649 #: views/email/login-verification.php:10 650 msgid "Please verify a login attempt for your account on: %s" 651 msgstr "" 652 653 #: views/email/login-verification.php:12 654 msgid "Request Time:" 651 655 msgstr "" 652 656 653 657 #: views/email/login-verification.php:13 654 msgid "Request Time:"655 msgstr ""656 657 #: views/email/login-verification.php:14658 658 msgid "IP:" 659 659 msgstr "" 660 660 661 #: views/email/login-verification.php:1 6661 #: views/email/login-verification.php:15 662 662 msgid "The request was flagged as suspicious, and we need verification that you attempted to log in to allow it to proceed. This verification link <b>will be valid for 15 minutes</b> from the time it was sent. If you did not attempt this login, please change your password immediately." 663 663 msgstr "" 664 664 665 #: views/email/login-verification.php:19 666 msgid "You may bypass this verification step permanently by enabling two-factor authentication on your account." 667 msgstr "" 668 669 #: views/email/login-verification.php:22 670 msgid "<a href=\"%s\"><b>Verify and Log In</b></a>" 665 #: views/email/login-verification.php:17 666 msgid "If you were attempting to log in to this site, <a href=\"%s\"><strong>Verify and Log In</strong></a>" 671 667 msgstr "" 672 668 … … 872 868 873 869 #: views/options/option-captcha-threshold.php:16 874 msgid "0.1 "875 msgstr "" 876 877 #: views/options/option-captcha-threshold.php: 17878 msgid " 0.0 (definitely a bot)"870 msgid "0.1 (probably a bot)" 871 msgstr "" 872 873 #: views/options/option-captcha-threshold.php:27 874 msgid "reCAPTCHA human/bot threshold score" 879 875 msgstr "" 880 876 881 877 #: views/options/option-captcha-threshold.php:28 882 msgid "reCAPTCHA human/bot threshold score"883 msgstr ""884 885 #: views/options/option-captcha-threshold.php:29886 878 msgid "A reCAPTCHA score equal to or higher than this value will be considered human. Anything lower will be treated as a bot and require additional verification for login and registration." 887 879 msgstr "" 888 880 889 #: views/options/option-captcha-threshold.php:5 1881 #: views/options/option-captcha-threshold.php:50 890 882 msgid "Reset Score Statistics" 891 883 msgstr "" 892 884 893 #: views/options/option-captcha-threshold.php:8 8885 #: views/options/option-captcha-threshold.php:87 894 886 msgid "Requests" 895 887 msgstr "" 896 888 897 #: views/options/option-captcha-threshold.php:10 6889 #: views/options/option-captcha-threshold.php:105 898 890 msgid "reCAPTCHA Score History" 899 891 msgstr "" 900 892 901 #: views/options/option-captcha-threshold.php:11 3893 #: views/options/option-captcha-threshold.php:112 902 894 msgid "Count" 903 895 msgstr "" -
wordfence-login-security/trunk/readme.txt
r3035812 r3049221 58 58 59 59 == Changelog == 60 61 = 1.1.10 - March 11, 2024 = 62 * Change: Removed the extra site link from the CAPTCHA verification email message to avoid confusion with the verify link 63 * Change: CAPTCHA verification when enabled now additionally applies to 2FA logins (may send an email verification on low scores) and no longer reveals whether a user exists for the submitted account credentials (credit: Raxis) 60 64 61 65 = 1.1.9 - February 14, 2024 = -
wordfence-login-security/trunk/views/email/login-verification.php
r2937680 r3049221 4 4 * @var string $ip The requesting IP. Required. 5 5 * @var string $siteName The site name. Required. 6 * @var string $siteURL The site URL. Required.7 6 * @var string $verificationURL The verification URL. Required. 8 7 * @var bool $canEnable2FA Whether or not the user this is being sent to can enable 2FA. Optional 9 8 */ 10 9 ?> 11 <strong><?php echo wp_kses(sprintf(__('Please verify a login attempt for your account on <a href="%s"><strong>%s</strong></a>.', 'wordfence-login-security'), esc_url($siteURL), $siteName), array('a'=>array('href'=>array()),'strong'=>array())); ?></strong>10 <strong><?php echo wp_kses(sprintf(__('Please verify a login attempt for your account on: %s', 'wordfence-login-security'), $siteName), array('strong'=>array())); ?></strong> 12 11 <br><br> 13 12 <?php echo '<strong>' . esc_html__('Request Time:', 'wordfence-login-security') . '</strong> ' . esc_html(\WordfenceLS\Controller_Time::format_local_time('F j, Y h:i:s A')); ?><br> … … 16 15 <?php echo wp_kses(__('The request was flagged as suspicious, and we need verification that you attempted to log in to allow it to proceed. This verification link <b>will be valid for 15 minutes</b> from the time it was sent. If you did not attempt this login, please change your password immediately.', 'wordfence-login-security'), array('b'=>array())); ?> 17 16 <br><br> 18 <?php if (isset($canEnable2FA) && $canEnable2FA): ?> 19 <?php esc_html_e('You may bypass this verification step permanently by enabling two-factor authentication on your account.', 'wordfence-login-security'); ?> 20 <br><br> 21 <?php endif; ?> 22 <?php echo wp_kses(sprintf(__('<a href="%s"><b>Verify and Log In</b></a>', 'wordfence-login-security'), esc_url($verificationURL)), array('a'=>array('href'=>array()), 'b'=>array())); ?> 17 <?php echo wp_kses(sprintf(__('If you were attempting to log in to this site, <a href="%s"><strong>Verify and Log In</strong></a>', 'wordfence-login-security'), esc_url($verificationURL)), array('a' => array('href' => array()), 'strong' => array())); ?> -
wordfence-login-security/trunk/views/options/option-captcha-threshold.php
r2937680 r3049221 5 5 $currentValue = \WordfenceLS\Controller_Settings::shared()->get_float($optionName, 0.5); 6 6 $selectOptions = array( 7 array('label' => __('1.0 (definitely a human)', 'wordfence-login-security'), 'value' => 1.0), 8 array('label' => __('0.9', 'wordfence-login-security'), 'value' => 0.9), 9 array('label' => __('0.8', 'wordfence-login-security'), 'value' => 0.8), 10 array('label' => __('0.7', 'wordfence-login-security'), 'value' => 0.7), 11 array('label' => __('0.6', 'wordfence-login-security'), 'value' => 0.6), 12 array('label' => __('0.5 (probably a human)', 'wordfence-login-security'), 'value' => 0.5), 13 array('label' => __('0.4', 'wordfence-login-security'), 'value' => 0.4), 14 array('label' => __('0.3', 'wordfence-login-security'), 'value' => 0.3), 15 array('label' => __('0.2', 'wordfence-login-security'), 'value' => 0.2), 16 array('label' => __('0.1', 'wordfence-login-security'), 'value' => 0.1), 17 array('label' => __('0.0 (definitely a bot)', 'wordfence-login-security'), 'value' => 0.0), 7 array('label' => __('1.0 (definitely a human)', 'wordfence-login-security'), 'value' => 1.0, 'selected' => ((int) ($currentValue * 10)) == 10), 8 array('label' => __('0.9', 'wordfence-login-security'), 'value' => 0.9, 'selected' => ((int) ($currentValue * 10)) == 9), 9 array('label' => __('0.8', 'wordfence-login-security'), 'value' => 0.8, 'selected' => ((int) ($currentValue * 10)) == 8), 10 array('label' => __('0.7', 'wordfence-login-security'), 'value' => 0.7, 'selected' => ((int) ($currentValue * 10)) == 7), 11 array('label' => __('0.6', 'wordfence-login-security'), 'value' => 0.6, 'selected' => ((int) ($currentValue * 10)) == 6), 12 array('label' => __('0.5 (probably a human)', 'wordfence-login-security'), 'value' => 0.5, 'selected' => ((int) ($currentValue * 10)) == 5), 13 array('label' => __('0.4', 'wordfence-login-security'), 'value' => 0.4, 'selected' => ((int) ($currentValue * 10)) == 4), 14 array('label' => __('0.3', 'wordfence-login-security'), 'value' => 0.3, 'selected' => ((int) ($currentValue * 10)) == 3), 15 array('label' => __('0.2', 'wordfence-login-security'), 'value' => 0.2, 'selected' => ((int) ($currentValue * 10)) == 2), 16 array('label' => __('0.1 (probably a bot)', 'wordfence-login-security'), 'value' => 0.1, 'selected' => ((int) ($currentValue * 10)) <= 1), 18 17 ); 19 18 ?> … … 33 32 <select aria-labelledby="wfls-option-recaptcha-threshold-label"> 34 33 <?php foreach ($selectOptions as $o): ?> 35 <option class="wfls-option-select-option" value="<?php echo esc_attr($o['value']); ?>"<?php if ( ((int) ($o['value'] * 10)) == ((int) ($currentValue * 10))) { echo ' selected'; } ?>><?php echo esc_html($o['label']); ?></option>34 <option class="wfls-option-select-option" value="<?php echo esc_attr($o['value']); ?>"<?php if ($o['selected']) { echo ' selected'; } ?>><?php echo esc_html($o['label']); ?></option> 36 35 <?php endforeach; ?> 37 36 </select> -
wordfence-login-security/trunk/wordfence-login-security.php
r3035804 r3049221 4 4 Description: Wordfence Login Security 5 5 Author: Wordfence 6 Author URI: http ://www.wordfence.com/7 Version: 1.1. 96 Author URI: https://www.wordfence.com/ 7 Version: 1.1.10 8 8 Network: true 9 9 Requires at least: 4.5 … … 39 39 define('WORDFENCE_LS_FROM_CORE', ($wfCoreActive && isset($wfCoreLoading) && $wfCoreLoading)); 40 40 41 define('WORDFENCE_LS_VERSION', '1.1. 9');42 define('WORDFENCE_LS_BUILD_NUMBER', '17 07926306');41 define('WORDFENCE_LS_VERSION', '1.1.10'); 42 define('WORDFENCE_LS_BUILD_NUMBER', '1710170444'); 43 43 44 44 define('WORDFENCE_LS_PLUGIN_BASENAME', plugin_basename(__FILE__));
Note: See TracChangeset
for help on using the changeset viewer.