PluginProbe ʕ •ᴥ•ʔ
Wordfence Security – Firewall, Malware Scan, and Login Security / 8.0.3
Wordfence Security – Firewall, Malware Scan, and Login Security v8.0.3
8.2.2 8.2.1 8.2.0 3.7.1 3.7.2 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.8.7 3.8.8 3.8.9 3.9.1 4.0.1 4.0.2 4.0.3 5.0.1 5.0.2 5.0.3 5.0.4 5.0.5 5.0.6 5.0.7 5.0.8 5.0.9 5.1.1 5.1.2 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.2.1 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.1 5.3.10 5.3.11 5.3.12 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.3.8 5.3.9 6.0.1 6.0.10 6.0.11 6.0.12 6.0.14 6.0.15 6.0.16 6.0.17 6.0.18 6.0.19 6.0.2 6.0.20 6.0.21 6.0.22 6.0.23 6.0.24 6.0.25 6.0.3 6.0.4 6.0.5 6.0.6 6.0.7 6.0.8 6.0.9 6.1.1 6.1.10 6.1.11 6.1.12 6.1.14 6.1.15 6.1.16 6.1.17 6.1.2 6.1.3 6.1.4 6.1.5 6.1.6 6.1.7 6.1.8 6.1.9 6.2.0 6.2.1 6.2.10 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6 6.2.7 6.2.8 6.2.9 6.3.0 6.3.1 6.3.10 6.3.11 6.3.12 6.3.14 6.3.15 6.3.16 6.3.17 6.3.18 6.3.19 6.3.2 6.3.20 6.3.21 6.3.22 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.3.8 6.3.9 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1.0 7.1.1 7.1.10 7.1.11 7.1.12 7.1.14 7.1.15 7.1.16 7.1.17 7.1.18 7.1.19 7.1.2 7.1.20 7.1.3 7.1.4 7.1.5 7.1.6 7.1.7 7.1.8 7.1.9 7.10.0 7.10.1 7.10.2 7.10.3 7.10.4 7.10.5 7.10.6 7.10.7 7.11.0 7.11.1 7.11.2 7.11.3 7.11.4 7.11.5 7.11.6 7.11.7 7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 7.3.6 7.4.0 7.4.1 7.4.10 7.4.11 7.4.12 7.4.14 7.4.2 7.4.3 trunk 7.4.4 1.1 7.4.5 1.2 7.4.6 1.3 7.4.7 1.3.1 7.4.8 1.3.2 7.4.9 1.3.3 7.5.0 1.4.2 7.5.1 1.4.3 7.5.10 1.4.4 7.5.11 1.4.5 7.5.2 1.4.6 7.5.3 1.4.7 7.5.4 1.4.8 7.5.5 1.5.1 7.5.6 1.5.2 7.5.7 1.5.3 7.5.8 1.5.4 7.5.9 1.5.5 7.6.0 1.5.6 7.6.1 2.0.1 7.6.2 2.0.2 7.7.0 2.0.3 7.7.1 2.0.5 7.8.0 2.0.6 7.8.1 2.0.7 7.8.2 2.1.0 7.9.0 2.1.1 7.9.1 2.1.2 7.9.2 2.1.3 7.9.3 2.1.4 8.0.0 2.1.5 8.0.1 3.0.2 8.0.2 3.0.3 8.0.3 3.0.4 8.0.4 3.0.5 8.0.5 3.0.6 8.1.0 3.0.7 8.1.1 3.0.8 8.1.2 3.0.9 8.1.3 3.1.0 8.1.4 3.1.1 v1.4.1 3.1.2 3.1.4 3.1.6 3.2.1 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.4.1 3.4.4 3.4.5 3.5.1 3.5.2 3.6.1 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.6.8 3.6.9
wordfence / lib / wfDashboard.php
wordfence / lib Last commit date
Diff 1 year ago audit-log 1 year ago dashboard 1 year ago rest-api 1 year ago .htaccess 7 years ago Diff.php 6 years ago GeoLite2-Country.mmdb 1 year ago IPTraf.php 1 year ago IPTrafList.php 1 year ago WFLSPHP52Compatability.php 6 years ago compat.php 8 years ago diffResult.php 1 year ago email_genericAlert.php 5 years ago email_newIssues.php 3 years ago email_unlockRequest.php 5 years ago email_unsubscribeRequest.php 4 years ago flags.php 7 years ago live_activity.php 4 years ago menu_dashboard.php 3 years ago menu_dashboard_options.php 3 years ago menu_firewall.php 3 years ago menu_firewall_blocking.php 4 years ago menu_firewall_blocking_options.php 3 years ago menu_firewall_waf.php 4 years ago menu_firewall_waf_options.php 3 years ago menu_install.php 3 years ago menu_options.php 1 year ago menu_scanner.php 2 years ago menu_scanner_credentials.php 1 year ago menu_scanner_options.php 3 years ago menu_support.php 1 year ago menu_tools.php 1 year ago menu_tools_auditlog.php 1 year ago menu_tools_diagnostic.php 1 year ago menu_tools_importExport.php 4 years ago menu_tools_livetraffic.php 2 years ago menu_tools_twoFactor.php 4 years ago menu_tools_whois.php 3 years ago menu_wordfence_central.php 3 years ago noc1.key 7 years ago sodium_compat_fast.php 2 years ago sysinfo.php 1 year ago viewFullActivityLog.php 4 years ago wf503.php 2 years ago wfAPI.php 1 year ago wfActivityReport.php 1 year ago wfAdminNoticeQueue.php 4 years ago wfAlerts.php 5 years ago wfArray.php 3 years ago wfAuditLog.php 1 year ago wfBrowscap.php 3 years ago wfBrowscapCache.php 7 years ago wfBulkCountries.php 2 years ago wfCache.php 3 years ago wfCentralAPI.php 1 year ago wfConfig.php 1 year ago wfCrawl.php 1 year ago wfCredentialsController.php 1 year ago wfCrypt.php 6 years ago wfCurlInterceptor.php 3 years ago wfDB.php 1 year ago wfDashboard.php 1 year ago wfDateLocalization.php 2 years ago wfDeactivationOption.php 3 years ago wfDiagnostic.php 1 year ago wfDict.php 8 years ago wfDirectoryIterator.php 7 years ago wfFileUtils.php 2 years ago wfHelperBin.php 11 years ago wfHelperString.php 1 year ago wfIPWhitelist.php 5 years ago wfImportExportController.php 5 years ago wfInaccessibleDirectoryException.php 2 years ago wfInvalidPathException.php 3 years ago wfIpLocation.php 3 years ago wfIpLocator.php 3 years ago wfIssues.php 1 year ago wfJWT.php 7 years ago wfLicense.php 3 years ago wfLockedOut.php 2 years ago wfLog.php 1 year ago wfMD5BloomFilter.php 8 years ago wfModuleController.php 7 years ago wfNotification.php 8 years ago wfOnboardingController.php 1 year ago wfPersistenceController.php 1 year ago wfRESTAPI.php 7 years ago wfScan.php 2 years ago wfScanEngine.php 1 year ago wfScanEntrypoint.php 3 years ago wfScanFile.php 1 year ago wfScanFileLink.php 3 years ago wfScanFileListItem.php 1 year ago wfScanFileProperties.php 1 year ago wfScanMonitor.php 2 years ago wfScanPath.php 3 years ago wfSchema.php 1 year ago wfStyle.php 1 year ago wfSupportController.php 1 year ago wfUnlockMsg.php 5 years ago wfUpdateCheck.php 1 year ago wfUtils.php 1 year ago wfVersionCheckController.php 3 years ago wfVersionSupport.php 1 year ago wfView.php 5 years ago wfViewResult.php 1 year ago wfWebsite.php 3 years ago wordfenceClass.php 1 year ago wordfenceConstants.php 1 year ago wordfenceHash.php 1 year ago wordfenceScanner.php 1 year ago wordfenceURLHoover.php 2 years ago
wfDashboard.php
235 lines
1 <?php
2
3 class wfDashboard {
4 const SCAN_SUCCESS = 1;
5 const SCAN_FAILED = 0;
6 const SCAN_NEVER_RAN = -1;
7 const SCAN_WARNINGS = 2;
8
9 const FEATURE_ENABLED = 1;
10 const FEATURE_DISABLED = 0;
11 const FEATURE_PREMIUM = -1;
12
13 public $scanLastCompletion;
14 public $scanLastStatusMessage;
15 public $scanLastStatus;
16
17 public $notifications = array();
18
19 public $features = array();
20
21 public $lastGenerated;
22
23 public $tdfCommunity;
24 public $tdfPremium;
25
26 public $ips24h;
27 public $ips7d;
28 public $ips30d;
29
30 public $loginsSuccess;
31 public $loginsFail;
32
33 public $localBlocks;
34
35 public $networkBlock24h;
36 public $networkBlock7d;
37 public $networkBlock30d;
38
39 public $countriesLocal;
40 public $countriesNetwork;
41 public $wordfenceCentralConnected;
42 public $wordfenceCentralConnectTime;
43 public $wordfenceCentralConnectEmail;
44 public $wordfenceCentralDisconnected;
45 public $wordfenceCentralDisconnectTime;
46 public $wordfenceCentralDisconnectEmail;
47
48 public static function processDashboardResponse($data) {
49 if (isset($data['notifications'])) {
50 foreach ($data['notifications'] as $n) {
51 if (!isset($n['id']) || !isset($n['priority']) || !isset($n['html'])) {
52 continue;
53 }
54
55 new wfNotification($n['id'], $n['priority'], $n['html'], (isset($n['category']) ? $n['category'] : null));
56 }
57
58 unset($data['notifications']);
59 }
60
61 if (isset($data['revoked'])) {
62 foreach ($data['revoked'] as $r) {
63 if (!isset($r['id'])) {
64 continue;
65 }
66
67 $notification = wfNotification::getNotificationForID($r['id']);
68 if ($notification !== null) {
69 $notification->markAsRead();
70 }
71 }
72
73 unset($data['revoked']);
74 }
75 wfConfig::set_ser('dashboardData', $data, false, wfConfig::DONT_AUTOLOAD);
76 }
77
78 public function __construct() {
79 // Scan values
80 $lastScanCompleted = wfConfig::get('lastScanCompleted');
81 if ($lastScanCompleted === false || empty($lastScanCompleted)) {
82 $this->scanLastStatus = self::SCAN_NEVER_RAN;
83 }
84 else if ($lastScanCompleted == 'ok') {
85 $this->scanLastStatus = self::SCAN_SUCCESS;
86
87 $i = new wfIssues();
88 $this->scanLastCompletion = (int) wfScanner::shared()->lastScanTime();
89 $issueCount = $i->getIssueCount();
90 if ($issueCount) {
91 $this->scanLastStatus = self::SCAN_WARNINGS;
92 $this->scanLastStatusMessage = "{$issueCount} issue" . ($issueCount == 1 ? ' found' : 's found');
93 }
94 }
95 else {
96 $this->scanLastStatus = self::SCAN_FAILED;
97 $n = wfNotification::getNotificationForCategory('wfplugin_scan', false);
98 if ($n !== null) {
99 $this->scanLastStatusMessage = $n->html;
100 }
101 else {
102 $this->scanLastStatusMessage = esc_html(substr($lastScanCompleted, 0, 100) . (strlen($lastScanCompleted) > 100 ? '...' : ''));
103 }
104 }
105
106 // Notifications
107 $this->notifications = wfNotification::notifications();
108
109 // Features
110 $countryBlocking = self::FEATURE_PREMIUM;
111 if (wfConfig::get('isPaid')) {
112 $countryBlocking = self::FEATURE_DISABLED;
113 $countryList = wfConfig::get('cbl_countries');
114 if (!empty($countryList) && (wfConfig::get('cbl_loggedInBlocked', false) || wfConfig::get('cbl_loginFormBlocked', false) || wfConfig::get('cbl_restOfSiteBlocked', false))) {
115 $countryBlocking = self::FEATURE_ENABLED;
116 }
117 }
118
119 $this->features = array(); //Deprecated
120
121 $data = wfConfig::get_ser('dashboardData');
122 $lastChecked = wfConfig::get('lastDashboardCheck', 0);
123 if ((!is_array($data) || (isset($data['generated']) && $data['generated'] + 3600 < time())) && $lastChecked + 3600 < time()) {
124 $wp_version = wfUtils::getWPVersion();
125 $apiKey = wfConfig::get('apiKey');
126 $api = new wfAPI($apiKey, $wp_version);
127 wfConfig::set('lastDashboardCheck', time());
128 try {
129 $json = $api->getStaticURL('/stats.json');
130 $data = @json_decode($json, true);
131 if ($json && is_array($data)) {
132 self::processDashboardResponse($data);
133 }
134 }
135 catch (Exception $e) {
136 //Do nothing
137 }
138 }
139
140 // Last Generated
141 if (is_array($data) && isset($data['generated'])) {
142 $this->lastGenerated = $data['generated'];
143 }
144
145 // TDF
146 if (is_array($data) && isset($data['tdf']) && isset($data['tdf']['community'])) {
147 $this->tdfCommunity = (int) $data['tdf']['community'];
148 $this->tdfPremium = (int) $data['tdf']['premium'];
149 }
150
151 // Top IPs Blocked
152 $activityReport = new wfActivityReport();
153 $this->ips24h = (array) $activityReport->getTopIPsBlocked(100, 1);
154 foreach ($this->ips24h as &$r24h) {
155 $r24h = (array) $r24h;
156 if (empty($r24h['countryName'])) { $r24h['countryName'] = 'Unknown'; }
157 }
158 $this->ips7d = (array) $activityReport->getTopIPsBlocked(100, 7);
159 foreach ($this->ips7d as &$r7d) {
160 $r7d = (array) $r7d;
161 if (empty($r7d['countryName'])) { $r7d['countryName'] = 'Unknown'; }
162 }
163 $this->ips30d = (array) $activityReport->getTopIPsBlocked(100, 30);
164 foreach ($this->ips30d as &$r30d) {
165 $r30d = (array) $r30d;
166 if (empty($r30d['countryName'])) { $r30d['countryName'] = 'Unknown'; }
167 }
168
169 // Recent Logins
170 $logins = wordfence::getLog()->getHits('logins', 'loginLogout', 0, 200);
171 $this->loginsSuccess = array();
172 $this->loginsFail = array();
173 foreach ($logins as $l) {
174 if ($l['fail']) {
175 $this->loginsFail[] = array('t' => $l['ctime'], 'name' => $l['username'], 'ip' => $l['IP']);
176 }
177 else if ($l['action'] != 'logout') {
178 $this->loginsSuccess[] = array('t' => $l['ctime'], 'name' => $l['username'], 'ip' => $l['IP']);
179 }
180 }
181
182 // Local Attack Data
183 $this->localBlocks = array();
184 $this->localBlocks[] = array('title' => __('Complex', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_COMPLEX,
185 '24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_COMPLEX),
186 '7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_COMPLEX),
187 '30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_COMPLEX),
188 );
189 $this->localBlocks[] = array('title' => __('Brute Force', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_BRUTE_FORCE,
190 '24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
191 '7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
192 '30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BRUTE_FORCE),
193 );
194 $this->localBlocks[] = array('title' => __('Blocklist', 'wordfence'), 'type' => wfActivityReport::BLOCK_TYPE_BLACKLIST,
195 '24h' => (int) $activityReport->getBlockedCount(1, wfActivityReport::BLOCK_TYPE_BLACKLIST),
196 '7d' => (int) $activityReport->getBlockedCount(7, wfActivityReport::BLOCK_TYPE_BLACKLIST),
197 '30d' => (int) $activityReport->getBlockedCount(30, wfActivityReport::BLOCK_TYPE_BLACKLIST),
198 );
199
200 // Network Attack Data
201 if (is_array($data) && isset($data['attackdata']) && isset($data['attackdata']['24h'])) {
202 $this->networkBlock24h = $data['attackdata']['24h'];
203 $this->networkBlock7d = $data['attackdata']['7d'];
204 $this->networkBlock30d = $data['attackdata']['30d'];
205 }
206
207 // Blocked Countries
208 $this->countriesLocal = (array) $activityReport->getTopCountriesBlocked(10, 7);
209 foreach ($this->countriesLocal as &$rLocal) {
210 $rLocal = (array) $rLocal;
211 if (empty($rLocal['countryName'])) { $rLocal['countryName'] = 'Unknown'; }
212 }
213
214 if (is_array($data) && isset($data['countries']) && isset($data['countries']['7d'])) {
215 $networkCountries = array();
216 foreach ($data['countries']['7d'] as $rNetwork) {
217 $countryCode = $rNetwork['cd'];
218 $countryName = $activityReport->getCountryNameByCode($countryCode);
219 if (empty($countryName)) { $countryName = 'Unknown'; }
220 $totalBlockCount = $rNetwork['ct'];
221 $networkCountries[] = array('countryCode' => $countryCode, 'countryName' => $countryName, 'totalBlockCount' => $totalBlockCount);
222 }
223 $this->countriesNetwork = $networkCountries;
224 }
225
226 // Wordfence Central
227 $this->wordfenceCentralConnected = wfCentral::_isConnected(); // This value is cached.
228 $this->wordfenceCentralConnectTime = wfConfig::get('wordfenceCentralConnectTime');
229 $this->wordfenceCentralConnectEmail = wfConfig::get('wordfenceCentralConnectEmail');
230 $this->wordfenceCentralDisconnected = wfConfig::get('wordfenceCentralDisconnected');
231 $this->wordfenceCentralDisconnectTime = wfConfig::get('wordfenceCentralDisconnectTime');
232 $this->wordfenceCentralDisconnectEmail = wfConfig::get('wordfenceCentralDisconnectEmail');
233 }
234 }
235