PluginProbe ʕ •ᴥ•ʔ
Wordfence Security – Firewall, Malware Scan, and Login Security / 7.4.4
Wordfence Security – Firewall, Malware Scan, and Login Security v7.4.4
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 6 years ago dashboard 7 years ago rest-api 6 years ago .htaccess 7 years ago Diff.php 6 years ago GeoLite2-Country.mmdb 6 years ago IPTraf.php 6 years ago IPTrafList.php 7 years ago WFLSPHP52Compatability.php 6 years ago compat.php 8 years ago conntest.php 7 years ago cronview.php 8 years ago dbview.php 8 years ago diffResult.php 8 years ago email_genericAlert.php 7 years ago email_newIssues.php 6 years ago email_unlockRequest.php 8 years ago email_unsubscribeRequest.php 7 years ago flags.php 7 years ago live_activity.php 8 years ago menu_dashboard.php 7 years ago menu_dashboard_options.php 7 years ago menu_firewall.php 6 years ago menu_firewall_blocking.php 7 years ago menu_firewall_blocking_options.php 8 years ago menu_firewall_waf.php 7 years ago menu_firewall_waf_options.php 7 years ago menu_options.php 6 years ago menu_scanner.php 6 years ago menu_scanner_credentials.php 8 years ago menu_scanner_options.php 6 years ago menu_support.php 7 years ago menu_tools.php 7 years ago menu_tools_diagnostic.php 6 years ago menu_tools_importExport.php 7 years ago menu_tools_livetraffic.php 6 years ago menu_tools_twoFactor.php 7 years ago menu_tools_whois.php 8 years ago menu_wordfence_central.php 7 years ago noc1.key 7 years ago sysinfo.php 8 years ago unknownFiles.php 8 years ago viewFullActivityLog.php 8 years ago wf503.php 7 years ago wfAPI.php 6 years ago wfActivityReport.php 6 years ago wfAdminNoticeQueue.php 8 years ago wfAlerts.php 6 years ago wfArray.php 7 years ago wfBrowscap.php 6 years ago wfBrowscapCache.php 7 years ago wfBulkCountries.php 7 years ago wfCache.php 6 years ago wfCentralAPI.php 6 years ago wfConfig.php 6 years ago wfCrawl.php 6 years ago wfCredentialsController.php 7 years ago wfCrypt.php 6 years ago wfDB.php 7 years ago wfDashboard.php 7 years ago wfDateLocalization.php 8 years ago wfDiagnostic.php 6 years ago wfDict.php 8 years ago wfDirectoryIterator.php 7 years ago wfHelperBin.php 11 years ago wfHelperString.php 11 years ago wfIPWhitelist.php 7 years ago wfImportExportController.php 7 years ago wfIssues.php 6 years ago wfJWT.php 7 years ago wfLockedOut.php 7 years ago wfLog.php 6 years ago wfMD5BloomFilter.php 8 years ago wfModuleController.php 7 years ago wfNotification.php 8 years ago wfOnboardingController.php 7 years ago wfPersistenceController.php 8 years ago wfRESTAPI.php 7 years ago wfScan.php 6 years ago wfScanEngine.php 6 years ago wfSchema.php 6 years ago wfStyle.php 7 years ago wfSupportController.php 6 years ago wfUnlockMsg.php 6 years ago wfUpdateCheck.php 6 years ago wfUtils.php 6 years ago wfVersionCheckController.php 8 years ago wfView.php 10 years ago wfViewResult.php 8 years ago wordfenceClass.php 6 years ago wordfenceConstants.php 6 years ago wordfenceHash.php 6 years ago wordfenceScanner.php 6 years ago wordfenceURLHoover.php 6 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);
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' => __('Blacklist', '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 = wfConfig::get('wordfenceCentralConnected');
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