Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-conte.../plugins/wordfenc.../models/scanner
File: wfScanner.php
break;
[1000] Fix | Delete
}
[1001] Fix | Delete
}
[1002] Fix | Delete
}
[1003] Fix | Delete
}
[1004] Fix | Delete
return $jobs;
[1005] Fix | Delete
}
[1006] Fix | Delete
[1007] Fix | Delete
/**
[1008] Fix | Delete
* Returns whether or not the scanner should use its low resource mode.
[1009] Fix | Delete
*
[1010] Fix | Delete
* @return bool
[1011] Fix | Delete
*/
[1012] Fix | Delete
public function useLowResourceScanning() {
[1013] Fix | Delete
$options = $this->scanOptions();
[1014] Fix | Delete
return $options['lowResourceScansEnabled'];
[1015] Fix | Delete
}
[1016] Fix | Delete
[1017] Fix | Delete
/**
[1018] Fix | Delete
* Returns the array of user-defined malware signatures for use by the scanner.
[1019] Fix | Delete
*
[1020] Fix | Delete
* @return array
[1021] Fix | Delete
*/
[1022] Fix | Delete
public function userScanSignatures() {
[1023] Fix | Delete
$options = $this->scanOptions();
[1024] Fix | Delete
$value = $options['scan_include_extra'];
[1025] Fix | Delete
$signatures = array();
[1026] Fix | Delete
if (!empty($value)) {
[1027] Fix | Delete
$regexs = explode("\n", $value);
[1028] Fix | Delete
$id = 1000001;
[1029] Fix | Delete
foreach ($regexs as $r) {
[1030] Fix | Delete
$r = rtrim($r, "\r");
[1031] Fix | Delete
if (preg_match('/' . $r . '/i', "") !== false) {
[1032] Fix | Delete
$signatures[] = array($id++, time(), $r, __('User defined scan pattern', 'wordfence'));
[1033] Fix | Delete
}
[1034] Fix | Delete
}
[1035] Fix | Delete
}
[1036] Fix | Delete
return $signatures;
[1037] Fix | Delete
}
[1038] Fix | Delete
[1039] Fix | Delete
/**
[1040] Fix | Delete
* Returns whether or not the scanner should check files outside of the WordPress installation.
[1041] Fix | Delete
*
[1042] Fix | Delete
* @return bool
[1043] Fix | Delete
*/
[1044] Fix | Delete
public function scanOutsideWordPress() {
[1045] Fix | Delete
$options = $this->scanOptions();
[1046] Fix | Delete
return $options['other_scanOutside'];
[1047] Fix | Delete
}
[1048] Fix | Delete
[1049] Fix | Delete
/**
[1050] Fix | Delete
* Returns the cleaned up array of user-excluded scan paths and patterns.
[1051] Fix | Delete
*
[1052] Fix | Delete
* @return array
[1053] Fix | Delete
*/
[1054] Fix | Delete
public function userExclusions() {
[1055] Fix | Delete
$options = $this->scanOptions();
[1056] Fix | Delete
$value = $options['scan_exclude'];
[1057] Fix | Delete
return explode("\n", wfUtils::cleanupOneEntryPerLine($value));
[1058] Fix | Delete
}
[1059] Fix | Delete
[1060] Fix | Delete
/**
[1061] Fix | Delete
* Fetches the scan summary items into the internal cache.
[1062] Fix | Delete
*/
[1063] Fix | Delete
private function _fetchSummaryItems() {
[1064] Fix | Delete
if ($this->_summary !== false) {
[1065] Fix | Delete
return;
[1066] Fix | Delete
}
[1067] Fix | Delete
[1068] Fix | Delete
$this->_summary = wfConfig::get_ser('wf_summaryItems', array());
[1069] Fix | Delete
}
[1070] Fix | Delete
[1071] Fix | Delete
/**
[1072] Fix | Delete
* Writes the scan summary cache to permanent storage.
[1073] Fix | Delete
*/
[1074] Fix | Delete
private function _saveSummaryItems() {
[1075] Fix | Delete
if ($this->_summary !== false && $this->_dirty) {
[1076] Fix | Delete
$this->_summary['lastUpdate'] = time();
[1077] Fix | Delete
wfConfig::set_ser('wf_summaryItems', $this->_summary);
[1078] Fix | Delete
}
[1079] Fix | Delete
$this->_dirty = false;
[1080] Fix | Delete
}
[1081] Fix | Delete
[1082] Fix | Delete
/**
[1083] Fix | Delete
* Saves the scan summary cache if it has been more than two seconds since the last update.
[1084] Fix | Delete
*
[1085] Fix | Delete
* @return bool Whether or not it saved.
[1086] Fix | Delete
*/
[1087] Fix | Delete
private function _maybeSaveSummaryItems() {
[1088] Fix | Delete
if ($this->_summary !== false && $this->_summary['lastUpdate'] < (time() - 2)) {
[1089] Fix | Delete
$this->_saveSummaryItems();
[1090] Fix | Delete
return true;
[1091] Fix | Delete
}
[1092] Fix | Delete
return false;
[1093] Fix | Delete
}
[1094] Fix | Delete
[1095] Fix | Delete
/**
[1096] Fix | Delete
* Populates the scan summary with the default counters.
[1097] Fix | Delete
*/
[1098] Fix | Delete
public function resetSummaryItems() {
[1099] Fix | Delete
global $wpdb;
[1100] Fix | Delete
[1101] Fix | Delete
$this->_summary = array();
[1102] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_POSTS] = 0;
[1103] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_COMMENTS] = 0;
[1104] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_FILES] = 0;
[1105] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_PLUGINS] = 0;
[1106] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_THEMES] = 0;
[1107] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_USERS] = 0;
[1108] Fix | Delete
$this->_summary[self::SUMMARY_SCANNED_URLS] = 0;
[1109] Fix | Delete
[1110] Fix | Delete
$this->_dirty = true;
[1111] Fix | Delete
$this->_saveSummaryItems();
[1112] Fix | Delete
}
[1113] Fix | Delete
[1114] Fix | Delete
/**
[1115] Fix | Delete
* Forces a save of the scan summary cache.
[1116] Fix | Delete
*/
[1117] Fix | Delete
public function flushSummaryItems() {
[1118] Fix | Delete
$this->_saveSummaryItems();
[1119] Fix | Delete
}
[1120] Fix | Delete
[1121] Fix | Delete
/**
[1122] Fix | Delete
* Returns the corresponding summary value for $key or $default if not found.
[1123] Fix | Delete
*
[1124] Fix | Delete
* @param $key
[1125] Fix | Delete
* @param mixed $default The value returned if there is no value for $key.
[1126] Fix | Delete
* @return mixed
[1127] Fix | Delete
*/
[1128] Fix | Delete
public function getSummaryItem($key, $default = false) {
[1129] Fix | Delete
$this->_fetchSummaryItems();
[1130] Fix | Delete
if (isset($this->_summary[$key])) {
[1131] Fix | Delete
return $this->_summary[$key];
[1132] Fix | Delete
}
[1133] Fix | Delete
return $default;
[1134] Fix | Delete
}
[1135] Fix | Delete
[1136] Fix | Delete
/**
[1137] Fix | Delete
* Sets the summary item $key as $value.
[1138] Fix | Delete
*
[1139] Fix | Delete
* @param $key
[1140] Fix | Delete
* @param $value
[1141] Fix | Delete
*/
[1142] Fix | Delete
public function setSummaryItem($key, $value) {
[1143] Fix | Delete
$this->_fetchSummaryItems();
[1144] Fix | Delete
$this->_summary[$key] = $value;
[1145] Fix | Delete
$this->_dirty = true;
[1146] Fix | Delete
[1147] Fix | Delete
if (!$this->_maybeSaveSummaryItems() && !$this->_destructRegistered) {
[1148] Fix | Delete
register_shutdown_function(array($this, 'flushSummaryItems'));
[1149] Fix | Delete
$this->_destructRegistered = true;
[1150] Fix | Delete
}
[1151] Fix | Delete
}
[1152] Fix | Delete
[1153] Fix | Delete
/**
[1154] Fix | Delete
* Atomically increments the summary item under $key by $value.
[1155] Fix | Delete
*
[1156] Fix | Delete
* @param $key
[1157] Fix | Delete
* @param int $value
[1158] Fix | Delete
*/
[1159] Fix | Delete
public function incrementSummaryItem($key, $value = 1) {
[1160] Fix | Delete
if ($value == 0) { return; }
[1161] Fix | Delete
$this->_fetchSummaryItems();
[1162] Fix | Delete
if (isset($this->_summary[$key])) {
[1163] Fix | Delete
$this->_summary[$key] += $value;
[1164] Fix | Delete
$this->_dirty = true;
[1165] Fix | Delete
[1166] Fix | Delete
if (!$this->_maybeSaveSummaryItems() && !$this->_destructRegistered) {
[1167] Fix | Delete
register_shutdown_function(array($this, 'flushSummaryItems'));
[1168] Fix | Delete
$this->_destructRegistered = true;
[1169] Fix | Delete
}
[1170] Fix | Delete
}
[1171] Fix | Delete
}
[1172] Fix | Delete
[1173] Fix | Delete
/**
[1174] Fix | Delete
* Schedules a single scan for the given time. If $originalTime is provided, it will be associated with the cron.
[1175] Fix | Delete
*
[1176] Fix | Delete
* @param $futureTime
[1177] Fix | Delete
* @param bool|int $originalTime
[1178] Fix | Delete
*/
[1179] Fix | Delete
public function scheduleSingleScan($futureTime, $originalTime = false) {
[1180] Fix | Delete
if (is_main_site()) { // Removed ability to activate on network site in v5.3.12
[1181] Fix | Delete
if ($originalTime === false) {
[1182] Fix | Delete
$originalTime = $futureTime;
[1183] Fix | Delete
}
[1184] Fix | Delete
wp_schedule_single_event($futureTime, 'wordfence_start_scheduled_scan', array((int) $originalTime));
[1185] Fix | Delete
[1186] Fix | Delete
//Saving our own copy of the schedule because the wp-cron functions all require the args list to act
[1187] Fix | Delete
$allScansScheduled = wfConfig::get_ser('allScansScheduled', array());
[1188] Fix | Delete
$allScansScheduled[] = array('timestamp' => $futureTime, 'args' => array((int) $originalTime));
[1189] Fix | Delete
wfConfig::set_ser('allScansScheduled', $allScansScheduled);
[1190] Fix | Delete
}
[1191] Fix | Delete
}
[1192] Fix | Delete
[1193] Fix | Delete
/**
[1194] Fix | Delete
* Clears all scheduled scan cron jobs and re-creates them.
[1195] Fix | Delete
*/
[1196] Fix | Delete
public function scheduleScans() {
[1197] Fix | Delete
$this->unscheduleAllScans();
[1198] Fix | Delete
if (!$this->isEnabled()) {
[1199] Fix | Delete
return;
[1200] Fix | Delete
}
[1201] Fix | Delete
[1202] Fix | Delete
if ($this->schedulingMode() == wfScanner::SCAN_SCHEDULING_MODE_MANUAL) {
[1203] Fix | Delete
//Generate a two-week schedule
[1204] Fix | Delete
$manualType = $this->manualSchedulingType();
[1205] Fix | Delete
$preferredHour = $this->manualSchedulingStartHour();
[1206] Fix | Delete
switch ($manualType) {
[1207] Fix | Delete
case self::MANUAL_SCHEDULING_ONCE_DAILY:
[1208] Fix | Delete
$schedule = array_fill(0, 14, array_fill(0, 24, 0));
[1209] Fix | Delete
foreach ($schedule as $dayNumber => &$day) {
[1210] Fix | Delete
$day[$preferredHour] = 1;
[1211] Fix | Delete
}
[1212] Fix | Delete
break;
[1213] Fix | Delete
case self::MANUAL_SCHEDULING_TWICE_DAILY:
[1214] Fix | Delete
$schedule = array_fill(0, 14, array_fill(0, 24, 0));
[1215] Fix | Delete
foreach ($schedule as $dayNumber => &$day) {
[1216] Fix | Delete
$day[$preferredHour] = 1;
[1217] Fix | Delete
$day[($preferredHour + 12) % 24] = 1;
[1218] Fix | Delete
}
[1219] Fix | Delete
break;
[1220] Fix | Delete
case self::MANUAL_SCHEDULING_EVERY_OTHER_DAY:
[1221] Fix | Delete
$baseDay = floor(time() / 86400);
[1222] Fix | Delete
$schedule = array_fill(0, 14, array_fill(0, 24, 0));
[1223] Fix | Delete
foreach ($schedule as $dayNumber => &$day) {
[1224] Fix | Delete
if (($baseDay + $dayNumber) % 2) {
[1225] Fix | Delete
$day[$preferredHour] = 1;
[1226] Fix | Delete
}
[1227] Fix | Delete
}
[1228] Fix | Delete
break;
[1229] Fix | Delete
case self::MANUAL_SCHEDULING_WEEKDAYS:
[1230] Fix | Delete
$schedule = array_fill(0, 14, array_fill(0, 24, 0));
[1231] Fix | Delete
foreach ($schedule as $dayNumber => &$day) {
[1232] Fix | Delete
if ($dayNumber > 0 && $dayNumber < 6) {
[1233] Fix | Delete
$day[$preferredHour] = 1;
[1234] Fix | Delete
}
[1235] Fix | Delete
}
[1236] Fix | Delete
break;
[1237] Fix | Delete
case self::MANUAL_SCHEDULING_WEEKENDS:
[1238] Fix | Delete
$schedule = array_fill(0, 14, array_fill(0, 24, 0));
[1239] Fix | Delete
foreach ($schedule as $dayNumber => &$day) {
[1240] Fix | Delete
if ($dayNumber == 0 || $dayNumber == 6) {
[1241] Fix | Delete
$day[$preferredHour] = 1;
[1242] Fix | Delete
}
[1243] Fix | Delete
}
[1244] Fix | Delete
break;
[1245] Fix | Delete
case self::MANUAL_SCHEDULING_ODD_DAYS_WEEKENDS:
[1246] Fix | Delete
$schedule = array_fill(0, 14, array_fill(0, 24, 0));
[1247] Fix | Delete
foreach ($schedule as $dayNumber => &$day) {
[1248] Fix | Delete
if ($dayNumber == 0 || $dayNumber == 6 || ($dayNumber % 2)) {
[1249] Fix | Delete
$day[$preferredHour] = 1;
[1250] Fix | Delete
}
[1251] Fix | Delete
}
[1252] Fix | Delete
break;
[1253] Fix | Delete
case self::MANUAL_SCHEDULING_CUSTOM:
[1254] Fix | Delete
$oneWeekSchedule = $this->customSchedule();
[1255] Fix | Delete
$schedule = array();
[1256] Fix | Delete
foreach ($oneWeekSchedule as $day) { $schedule[] = $day; }
[1257] Fix | Delete
foreach ($oneWeekSchedule as $day) { $schedule[] = $day; }
[1258] Fix | Delete
break;
[1259] Fix | Delete
}
[1260] Fix | Delete
[1261] Fix | Delete
$now = time();
[1262] Fix | Delete
$tzOffset = wfUtils::formatLocalTime('Z', $now);
[1263] Fix | Delete
[1264] Fix | Delete
//Apply the time zone shift so the start times align to the server's time zone
[1265] Fix | Delete
$shiftedSchedule = array_fill(0, 14, array());
[1266] Fix | Delete
foreach ($schedule as $dayNumber => $day) {
[1267] Fix | Delete
foreach ($day as $hourNumber => $enabled) {
[1268] Fix | Delete
if ($enabled) {
[1269] Fix | Delete
$effectiveHour = round(($hourNumber * 3600 - $tzOffset) / 3600, 2); //round() rather than floor() to account for fractional time zones
[1270] Fix | Delete
$wrappedHour = ($effectiveHour + 24) % 24;
[1271] Fix | Delete
if ($effectiveHour < 0) {
[1272] Fix | Delete
if ($dayNumber > 0) {
[1273] Fix | Delete
$shiftedSchedule[$dayNumber - 1][$wrappedHour] = 1;
[1274] Fix | Delete
}
[1275] Fix | Delete
}
[1276] Fix | Delete
else if ($effectiveHour > 23) {
[1277] Fix | Delete
if ($dayNumber < count($schedule) - 1) {
[1278] Fix | Delete
$shiftedSchedule[$dayNumber + 1][$wrappedHour] = 1;
[1279] Fix | Delete
}
[1280] Fix | Delete
}
[1281] Fix | Delete
else {
[1282] Fix | Delete
$shiftedSchedule[$dayNumber][$effectiveHour] = 1;
[1283] Fix | Delete
}
[1284] Fix | Delete
}
[1285] Fix | Delete
}
[1286] Fix | Delete
}
[1287] Fix | Delete
$schedule = $shiftedSchedule;
[1288] Fix | Delete
[1289] Fix | Delete
//Trim out all but an 8-day period
[1290] Fix | Delete
$currentDayOfWeekUTC = date('w', $now);
[1291] Fix | Delete
$currentHourUTC = date('G', $now);
[1292] Fix | Delete
$periodStart = floor($now / 86400) * 86400 - $currentDayOfWeekUTC * 86400;
[1293] Fix | Delete
$schedule = array_slice($schedule, $currentDayOfWeekUTC, null, true);
[1294] Fix | Delete
$schedule = array_slice($schedule, 0, 8, true);
[1295] Fix | Delete
[1296] Fix | Delete
//Schedule them
[1297] Fix | Delete
foreach ($schedule as $dayNumber => $day) {
[1298] Fix | Delete
foreach ($day as $hourNumber => $enabled) {
[1299] Fix | Delete
if ($enabled) {
[1300] Fix | Delete
if ($dayNumber == $currentDayOfWeekUTC && $currentHourUTC > $hourNumber) { //It's today and we've already passed its hour, skip it
[1301] Fix | Delete
continue;
[1302] Fix | Delete
}
[1303] Fix | Delete
else if ($dayNumber > 6 && ($dayNumber % 7) == $currentDayOfWeekUTC && $currentHourUTC <= $hourNumber) { //It's one week from today but beyond the current hour, skip it this cycle
[1304] Fix | Delete
continue;
[1305] Fix | Delete
}
[1306] Fix | Delete
[1307] Fix | Delete
$scanTime = $periodStart + $dayNumber * 86400 + $hourNumber * 3600 + wfWAFUtils::random_int(0, 3600);
[1308] Fix | Delete
wordfence::status(4, 'info', sprintf(
[1309] Fix | Delete
/* translators: 1. Day of week. 2. Hour of day. 3. Localized date. */
[1310] Fix | Delete
__("Scheduled time for day %s hour %s is: %s", 'wordfence'),
[1311] Fix | Delete
$dayNumber,
[1312] Fix | Delete
$hourNumber,
[1313] Fix | Delete
wfUtils::formatLocalTime('l jS \of F Y h:i:s A P', $scanTime)
[1314] Fix | Delete
));
[1315] Fix | Delete
$this->scheduleSingleScan($scanTime);
[1316] Fix | Delete
}
[1317] Fix | Delete
}
[1318] Fix | Delete
}
[1319] Fix | Delete
}
[1320] Fix | Delete
else {
[1321] Fix | Delete
$noc1ScanSchedule = wfConfig::get_ser('noc1ScanSchedule', array());
[1322] Fix | Delete
foreach ($noc1ScanSchedule as $timestamp) {
[1323] Fix | Delete
$timestamp = wfUtils::denormalizedTime($timestamp);
[1324] Fix | Delete
if ($timestamp > time()) {
[1325] Fix | Delete
$this->scheduleSingleScan($timestamp);
[1326] Fix | Delete
}
[1327] Fix | Delete
}
[1328] Fix | Delete
}
[1329] Fix | Delete
}
[1330] Fix | Delete
[1331] Fix | Delete
public function unscheduleAllScans() {
[1332] Fix | Delete
$allScansScheduled = wfConfig::get_ser('allScansScheduled', array());
[1333] Fix | Delete
foreach ($allScansScheduled as $entry) {
[1334] Fix | Delete
wp_unschedule_event($entry['timestamp'], 'wordfence_start_scheduled_scan', $entry['args']);
[1335] Fix | Delete
}
[1336] Fix | Delete
wp_clear_scheduled_hook('wordfence_start_scheduled_scan');
[1337] Fix | Delete
wfConfig::set_ser('allScansScheduled', array());
[1338] Fix | Delete
}
[1339] Fix | Delete
[1340] Fix | Delete
public function nextScheduledScanTime() {
[1341] Fix | Delete
$nextTime = false;
[1342] Fix | Delete
$cron = _get_cron_array();
[1343] Fix | Delete
foreach($cron as $key => $val){
[1344] Fix | Delete
if(isset($val['wordfence_start_scheduled_scan'])){
[1345] Fix | Delete
$nextTime = $key;
[1346] Fix | Delete
break;
[1347] Fix | Delete
}
[1348] Fix | Delete
}
[1349] Fix | Delete
return $nextTime;
[1350] Fix | Delete
}
[1351] Fix | Delete
[1352] Fix | Delete
public function lastScanTime() {
[1353] Fix | Delete
return wfConfig::get('scanTime');
[1354] Fix | Delete
}
[1355] Fix | Delete
[1356] Fix | Delete
public function recordLastScanTime() {
[1357] Fix | Delete
wfConfig::set('scanTime', microtime(true));
[1358] Fix | Delete
}
[1359] Fix | Delete
[1360] Fix | Delete
public function lastQuickScanTime() {
[1361] Fix | Delete
return wfConfig::get('lastQuickScan', 0);
[1362] Fix | Delete
}
[1363] Fix | Delete
[1364] Fix | Delete
public function recordLastQuickScanTime() {
[1365] Fix | Delete
wfConfig::set('lastQuickScan', microtime(true));
[1366] Fix | Delete
}
[1367] Fix | Delete
}
[1368] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function