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.../waf
File: bootstrap.php
$storage = $this->getStorageEngine();
[500] Fix | Delete
$cron = (array) $storage->getConfig('cron', null, 'livewaf');
[501] Fix | Delete
$run = array();
[502] Fix | Delete
$updated = false;
[503] Fix | Delete
if (is_array($cron)) {
[504] Fix | Delete
/** @var wfWAFCronEvent $event */
[505] Fix | Delete
$cronDeduplication = array();
[506] Fix | Delete
foreach ($cron as $index => $event) {
[507] Fix | Delete
if (is_object($event) && $event instanceof wfWAFCronEvent) {
[508] Fix | Delete
$event->setWaf($this);
[509] Fix | Delete
if ($event->isInPast()) {
[510] Fix | Delete
$run[$index] = $event;
[511] Fix | Delete
$newEvent = $event->reschedule();
[512] Fix | Delete
$className = get_class($newEvent);
[513] Fix | Delete
if ($newEvent instanceof wfWAFCronEvent && $newEvent !== $event && !in_array($className, $cronDeduplication)) {
[514] Fix | Delete
$cron[$index] = $newEvent;
[515] Fix | Delete
$cronDeduplication[] = $className;
[516] Fix | Delete
$updated = true;
[517] Fix | Delete
} else {
[518] Fix | Delete
unset($cron[$index]);
[519] Fix | Delete
$updated = true;
[520] Fix | Delete
}
[521] Fix | Delete
}
[522] Fix | Delete
else {
[523] Fix | Delete
$className = get_class($event);
[524] Fix | Delete
if (in_array($className, $cronDeduplication)) {
[525] Fix | Delete
unset($cron[$index]);
[526] Fix | Delete
$updated = true;
[527] Fix | Delete
}
[528] Fix | Delete
else {
[529] Fix | Delete
$cronDeduplication[] = $className;
[530] Fix | Delete
}
[531] Fix | Delete
}
[532] Fix | Delete
}
[533] Fix | Delete
else { //Remove bad/corrupt records
[534] Fix | Delete
unset($cron[$index]);
[535] Fix | Delete
$updated = true;
[536] Fix | Delete
}
[537] Fix | Delete
}
[538] Fix | Delete
}
[539] Fix | Delete
$storage->setConfig('cron', $cron, 'livewaf');
[540] Fix | Delete
[541] Fix | Delete
if ($updated && method_exists($storage, 'saveConfig')) {
[542] Fix | Delete
$storage->saveConfig('livewaf');
[543] Fix | Delete
}
[544] Fix | Delete
[545] Fix | Delete
foreach ($run as $index => $event) {
[546] Fix | Delete
$event->fire();
[547] Fix | Delete
}
[548] Fix | Delete
}
[549] Fix | Delete
[550] Fix | Delete
/**
[551] Fix | Delete
*
[552] Fix | Delete
*/
[553] Fix | Delete
public function whitelistFailedRulesIfNot404() {
[554] Fix | Delete
/** @var WP_Query $wp_query */
[555] Fix | Delete
global $wp_query;
[556] Fix | Delete
if (defined('ABSPATH') &&
[557] Fix | Delete
isset($wp_query) && class_exists('WP_Query') && $wp_query instanceof WP_Query &&
[558] Fix | Delete
method_exists($wp_query, 'is_404') && $wp_query->is_404() &&
[559] Fix | Delete
function_exists('is_admin') && !is_admin()) {
[560] Fix | Delete
return;
[561] Fix | Delete
}
[562] Fix | Delete
$this->whitelistFailedRules();
[563] Fix | Delete
}
[564] Fix | Delete
[565] Fix | Delete
/**
[566] Fix | Delete
* @param $ip
[567] Fix | Delete
* @return mixed
[568] Fix | Delete
*/
[569] Fix | Delete
public function isIPBlocked($ip) {
[570] Fix | Delete
return parent::isIPBlocked($ip);
[571] Fix | Delete
}
[572] Fix | Delete
[573] Fix | Delete
/**
[574] Fix | Delete
* @param wfWAFRequest $request
[575] Fix | Delete
* @return bool|string false if it should not be blocked, otherwise true or a reason for blocking
[576] Fix | Delete
*/
[577] Fix | Delete
public function willPerformFinalAction($request) {
[578] Fix | Delete
try {
[579] Fix | Delete
$disableWAFIPBlocking = $this->getStorageEngine()->getConfig('disableWAFIPBlocking', null, 'synced');
[580] Fix | Delete
$advancedBlockingEnabled = $this->getStorageEngine()->getConfig('advancedBlockingEnabled', null, 'synced');
[581] Fix | Delete
}
[582] Fix | Delete
catch (Exception $e) {
[583] Fix | Delete
return false;
[584] Fix | Delete
}
[585] Fix | Delete
[586] Fix | Delete
if ($disableWAFIPBlocking || !$advancedBlockingEnabled) {
[587] Fix | Delete
return false;
[588] Fix | Delete
}
[589] Fix | Delete
[590] Fix | Delete
return wfWAFIPBlocksController::currentController()->shouldBlockRequest($request);
[591] Fix | Delete
}
[592] Fix | Delete
[593] Fix | Delete
public function uninstall() {
[594] Fix | Delete
parent::uninstall();
[595] Fix | Delete
@unlink(rtrim(WFWAF_LOG_PATH, '/') . '/.htaccess');
[596] Fix | Delete
@unlink(rtrim(WFWAF_LOG_PATH, '/') . '/template.php');
[597] Fix | Delete
@unlink(rtrim(WFWAF_LOG_PATH, '/') . '/GeoLite2-Country.mmdb');
[598] Fix | Delete
[599] Fix | Delete
self::_recursivelyRemoveWflogs(''); //Removes any remaining files and the directory itself
[600] Fix | Delete
}
[601] Fix | Delete
[602] Fix | Delete
/**
[603] Fix | Delete
* Removes a path within wflogs, recursing as necessary.
[604] Fix | Delete
*
[605] Fix | Delete
* @param string $file
[606] Fix | Delete
* @param array $processedDirs
[607] Fix | Delete
* @return array The list of removed files/folders.
[608] Fix | Delete
*/
[609] Fix | Delete
private static function _recursivelyRemoveWflogs($file, $processedDirs = array()) {
[610] Fix | Delete
if (preg_match('~(?:^|/|\\\\)\.\.(?:/|\\\\|$)~', $file)) {
[611] Fix | Delete
return array();
[612] Fix | Delete
}
[613] Fix | Delete
[614] Fix | Delete
if (stripos(WFWAF_LOG_PATH, 'wflogs') === false) { //Sanity check -- if not in a wflogs folder, user will have to do removal manually
[615] Fix | Delete
return array();
[616] Fix | Delete
}
[617] Fix | Delete
[618] Fix | Delete
$path = rtrim(WFWAF_LOG_PATH, '/') . '/' . $file;
[619] Fix | Delete
if (is_link($path)) {
[620] Fix | Delete
if (@unlink($path)) {
[621] Fix | Delete
return array($file);
[622] Fix | Delete
}
[623] Fix | Delete
return array();
[624] Fix | Delete
}
[625] Fix | Delete
[626] Fix | Delete
if (is_dir($path)) {
[627] Fix | Delete
$real = realpath($file);
[628] Fix | Delete
if (in_array($real, $processedDirs)) {
[629] Fix | Delete
return array();
[630] Fix | Delete
}
[631] Fix | Delete
$processedDirs[] = $real;
[632] Fix | Delete
[633] Fix | Delete
$count = 0;
[634] Fix | Delete
$dir = opendir($path);
[635] Fix | Delete
if ($dir) {
[636] Fix | Delete
$contents = array();
[637] Fix | Delete
while ($sub = readdir($dir)) {
[638] Fix | Delete
if ($sub == '.' || $sub == '..') { continue; }
[639] Fix | Delete
$contents[] = $sub;
[640] Fix | Delete
}
[641] Fix | Delete
closedir($dir);
[642] Fix | Delete
[643] Fix | Delete
$filesRemoved = array();
[644] Fix | Delete
foreach ($contents as $f) {
[645] Fix | Delete
$removed = self::_recursivelyRemoveWflogs($file . '/' . $f, $processedDirs);
[646] Fix | Delete
$filesRemoved = array($filesRemoved, $removed);
[647] Fix | Delete
}
[648] Fix | Delete
}
[649] Fix | Delete
[650] Fix | Delete
if (@rmdir($path)) {
[651] Fix | Delete
$filesRemoved[] = $file;
[652] Fix | Delete
}
[653] Fix | Delete
return $filesRemoved;
[654] Fix | Delete
}
[655] Fix | Delete
[656] Fix | Delete
if (@unlink($path)) {
[657] Fix | Delete
return array($file);
[658] Fix | Delete
}
[659] Fix | Delete
return array();
[660] Fix | Delete
}
[661] Fix | Delete
[662] Fix | Delete
public function fileList() {
[663] Fix | Delete
$fileList = parent::fileList();
[664] Fix | Delete
$fileList[] = rtrim(WFWAF_LOG_PATH, '/') . '/.htaccess';
[665] Fix | Delete
$fileList[] = rtrim(WFWAF_LOG_PATH, '/') . '/template.php';
[666] Fix | Delete
$fileList[] = rtrim(WFWAF_LOG_PATH, '/') . '/GeoLite2-Country.mmdb';
[667] Fix | Delete
return $fileList;
[668] Fix | Delete
}
[669] Fix | Delete
[670] Fix | Delete
/**
[671] Fix | Delete
* @return wfWAFRunException
[672] Fix | Delete
*/
[673] Fix | Delete
public function getLearningModeAttackException() {
[674] Fix | Delete
return $this->learningModeAttackException;
[675] Fix | Delete
}
[676] Fix | Delete
[677] Fix | Delete
/**
[678] Fix | Delete
* @param wfWAFRunException $learningModeAttackException
[679] Fix | Delete
*/
[680] Fix | Delete
public function setLearningModeAttackException($learningModeAttackException) {
[681] Fix | Delete
$this->learningModeAttackException = $learningModeAttackException;
[682] Fix | Delete
}
[683] Fix | Delete
[684] Fix | Delete
public static function permissions() {
[685] Fix | Delete
if (defined('WFWAF_LOG_FILE_MODE')) {
[686] Fix | Delete
return WFWAF_LOG_FILE_MODE;
[687] Fix | Delete
}
[688] Fix | Delete
[689] Fix | Delete
if (class_exists('wfWAFStorageFile') && method_exists('wfWAFStorageFile', 'permissions')) {
[690] Fix | Delete
return wfWAFStorageFile::permissions();
[691] Fix | Delete
}
[692] Fix | Delete
[693] Fix | Delete
static $_cachedPermissions = null;
[694] Fix | Delete
if ($_cachedPermissions === null) {
[695] Fix | Delete
if (defined('WFWAF_LOG_PATH')) {
[696] Fix | Delete
$template = rtrim(WFWAF_LOG_PATH . '/') . '/template.php';
[697] Fix | Delete
if (file_exists($template)) {
[698] Fix | Delete
$stat = @stat($template);
[699] Fix | Delete
if ($stat !== false) {
[700] Fix | Delete
$mode = $stat[2];
[701] Fix | Delete
$updatedMode = 0600;
[702] Fix | Delete
if (($mode & 0020) == 0020) {
[703] Fix | Delete
$updatedMode = $updatedMode | 0060;
[704] Fix | Delete
}
[705] Fix | Delete
$_cachedPermissions = $updatedMode;
[706] Fix | Delete
return $updatedMode;
[707] Fix | Delete
}
[708] Fix | Delete
}
[709] Fix | Delete
}
[710] Fix | Delete
return 0660;
[711] Fix | Delete
}
[712] Fix | Delete
return $_cachedPermissions;
[713] Fix | Delete
}
[714] Fix | Delete
[715] Fix | Delete
public static function writeHtaccess() {
[716] Fix | Delete
@file_put_contents(rtrim(WFWAF_LOG_PATH, '/') . '/.htaccess', <<<APACHE
[717] Fix | Delete
<IfModule mod_authz_core.c>
[718] Fix | Delete
Require all denied
[719] Fix | Delete
</IfModule>
[720] Fix | Delete
<IfModule !mod_authz_core.c>
[721] Fix | Delete
Order deny,allow
[722] Fix | Delete
Deny from all
[723] Fix | Delete
</IfModule>
[724] Fix | Delete
APACHE
[725] Fix | Delete
);
[726] Fix | Delete
@chmod(rtrim(WFWAF_LOG_PATH, '/') . '/.htaccess', (wfWAFWordPress::permissions() | 0444));
[727] Fix | Delete
}
[728] Fix | Delete
[729] Fix | Delete
public function getGlobal($global) {
[730] Fix | Delete
if (wfWAFUtils::strpos($global, '.') === false) {
[731] Fix | Delete
return null;
[732] Fix | Delete
}
[733] Fix | Delete
list($prefix, $_global) = explode('.', $global);
[734] Fix | Delete
switch ($prefix) {
[735] Fix | Delete
case 'wordpress':
[736] Fix | Delete
if ($_global === 'core') {
[737] Fix | Delete
return $this->getStorageEngine()->getConfig('wordpressVersion', null, 'synced');
[738] Fix | Delete
} else if ($_global === 'plugins') {
[739] Fix | Delete
return $this->getStorageEngine()->getConfig('wordpressPluginVersions', null, 'synced');
[740] Fix | Delete
} else if ($_global === 'themes') {
[741] Fix | Delete
return $this->getStorageEngine()->getConfig('wordpressThemeVersions', null, 'synced');
[742] Fix | Delete
}
[743] Fix | Delete
break;
[744] Fix | Delete
}
[745] Fix | Delete
return parent::getGlobal($global);
[746] Fix | Delete
}
[747] Fix | Delete
}
[748] Fix | Delete
[749] Fix | Delete
class wfWAFWordPressStorageMySQL extends wfWAFStorageMySQL {
[750] Fix | Delete
[751] Fix | Delete
public function getSerializedParams() {
[752] Fix | Delete
$params = parent::getSerializedParams();
[753] Fix | Delete
$params[] = 'wordpressPluginVersions';
[754] Fix | Delete
$params[] = 'wordpressThemeVersions';
[755] Fix | Delete
return $params;
[756] Fix | Delete
}
[757] Fix | Delete
[758] Fix | Delete
public function getAutoloadParams() {
[759] Fix | Delete
$params = parent::getAutoloadParams();
[760] Fix | Delete
$params['synced'][] = 'wordpressVersion';
[761] Fix | Delete
$params['synced'][] = 'wordpressPluginVersions';
[762] Fix | Delete
$params['synced'][] = 'wordpressThemeVersions';
[763] Fix | Delete
return $params;
[764] Fix | Delete
}
[765] Fix | Delete
}
[766] Fix | Delete
[767] Fix | Delete
class wfWAFWordPressI18n implements wfWAFI18nEngine {
[768] Fix | Delete
[769] Fix | Delete
protected $translations;
[770] Fix | Delete
[771] Fix | Delete
/** @var wfWAFStorageInterface */
[772] Fix | Delete
private $storageEngine;
[773] Fix | Delete
/**
[774] Fix | Delete
* @var wfMO
[775] Fix | Delete
*/
[776] Fix | Delete
private $mo;
[777] Fix | Delete
[778] Fix | Delete
/**
[779] Fix | Delete
* @param wfWAFStorageInterface $storageEngine
[780] Fix | Delete
*/
[781] Fix | Delete
public function __construct($storageEngine) {
[782] Fix | Delete
$this->storageEngine = $storageEngine;
[783] Fix | Delete
$this->loadTranslations();
[784] Fix | Delete
}
[785] Fix | Delete
[786] Fix | Delete
/**
[787] Fix | Delete
* @param string $text
[788] Fix | Delete
* @return string
[789] Fix | Delete
*/
[790] Fix | Delete
public function __($text) {
[791] Fix | Delete
if (!$this->storageEngine->getConfig('wordfenceI18n', true, 'synced')) {
[792] Fix | Delete
return $text;
[793] Fix | Delete
}
[794] Fix | Delete
[795] Fix | Delete
if ($this->mo) {
[796] Fix | Delete
$translated = $this->mo->translate($text);
[797] Fix | Delete
if ($translated) {
[798] Fix | Delete
return $translated;
[799] Fix | Delete
}
[800] Fix | Delete
}
[801] Fix | Delete
[802] Fix | Delete
return $text;
[803] Fix | Delete
}
[804] Fix | Delete
[805] Fix | Delete
protected function loadTranslations() {
[806] Fix | Delete
require_once dirname(__FILE__) . '/pomo/mo.php';
[807] Fix | Delete
[808] Fix | Delete
$currentLocale = $this->storageEngine->getConfig('WPLANG', '', 'synced');
[809] Fix | Delete
[810] Fix | Delete
// Find translation file for the current language.
[811] Fix | Delete
$mofile = dirname(__FILE__) . '/../languages/wordfence-' . $currentLocale . '.mo';
[812] Fix | Delete
if (!file_exists($mofile)) {
[813] Fix | Delete
// No translation, use the default
[814] Fix | Delete
$mofile = dirname(__FILE__) . '/../languages/wordfence.mo';
[815] Fix | Delete
}
[816] Fix | Delete
[817] Fix | Delete
$this->mo = new wfMO();
[818] Fix | Delete
return $this->mo->import_from_file( $mofile );
[819] Fix | Delete
}
[820] Fix | Delete
}
[821] Fix | Delete
[822] Fix | Delete
try {
[823] Fix | Delete
[824] Fix | Delete
if (!defined('WFWAF_LOG_PATH')) {
[825] Fix | Delete
if (!defined('WP_CONTENT_DIR')) { //Loading before WordPress
[826] Fix | Delete
exit();
[827] Fix | Delete
}
[828] Fix | Delete
define('WFWAF_LOG_PATH', WP_CONTENT_DIR . '/wflogs/');
[829] Fix | Delete
}
[830] Fix | Delete
if (!is_dir(WFWAF_LOG_PATH)) {
[831] Fix | Delete
@mkdir(WFWAF_LOG_PATH, (wfWAFWordPress::permissions() | 0755));
[832] Fix | Delete
@chmod(WFWAF_LOG_PATH, (wfWAFWordPress::permissions() | 0755));
[833] Fix | Delete
wfWAFWordPress::writeHtaccess();
[834] Fix | Delete
}
[835] Fix | Delete
[836] Fix | Delete
[837] Fix | Delete
try {
[838] Fix | Delete
if (!defined('WFWAF_STORAGE_ENGINE') && isset($_SERVER['WFWAF_STORAGE_ENGINE'])) {
[839] Fix | Delete
define('WFWAF_STORAGE_ENGINE', $_SERVER['WFWAF_STORAGE_ENGINE']);
[840] Fix | Delete
}
[841] Fix | Delete
else if (!defined('WFWAF_STORAGE_ENGINE') && (WF_IS_WP_ENGINE || WF_IS_FLYWHEEL)) {
[842] Fix | Delete
define('WFWAF_STORAGE_ENGINE', 'mysqli');
[843] Fix | Delete
}
[844] Fix | Delete
[845] Fix | Delete
$specifiedStorageEngine = defined('WFWAF_STORAGE_ENGINE');
[846] Fix | Delete
$fallbackStorageEngine = false;
[847] Fix | Delete
if ($specifiedStorageEngine) {
[848] Fix | Delete
switch (WFWAF_STORAGE_ENGINE) {
[849] Fix | Delete
case 'mysqli':
[850] Fix | Delete
$wfWAFDBCredentials = array();
[851] Fix | Delete
$sslOptions = array();
[852] Fix | Delete
$overrideConstants = array(
[853] Fix | Delete
'wfWAFDBCredentials' => array(
[854] Fix | Delete
'WFWAF_DB_NAME' => 'database',
[855] Fix | Delete
'WFWAF_DB_USER' => 'user',
[856] Fix | Delete
'WFWAF_DB_PASSWORD' => 'pass',
[857] Fix | Delete
'WFWAF_DB_HOST' => 'host',
[858] Fix | Delete
'WFWAF_DB_CHARSET' => 'charset',
[859] Fix | Delete
'WFWAF_DB_COLLATE' => 'collation',
[860] Fix | Delete
'WFWAF_MYSQL_CLIENT_FLAGS' => 'flags',
[861] Fix | Delete
'WFWAF_TABLE_PREFIX' => 'tablePrefix'
[862] Fix | Delete
),
[863] Fix | Delete
'sslOptions' => array(
[864] Fix | Delete
'WFWAF_DB_SSL_KEY' => 'key',
[865] Fix | Delete
'WFWAF_DB_SSL_CERTIFICATE' => 'certificate',
[866] Fix | Delete
'WFWAF_DB_SSL_CA_CERTIFICATE' => 'ca_certificate',
[867] Fix | Delete
'WFWAF_DB_SSL_CA_PATH' => 'ca_path',
[868] Fix | Delete
'WFWAF_DB_SSL_CIPHER_ALGOS' => 'cipher_algos'
[869] Fix | Delete
)
[870] Fix | Delete
);
[871] Fix | Delete
foreach ($overrideConstants as $variable => $constants) {
[872] Fix | Delete
foreach ($constants as $constant => $key) {
[873] Fix | Delete
if (defined($constant)) {
[874] Fix | Delete
${$variable}[$key] = constant($constant);
[875] Fix | Delete
}
[876] Fix | Delete
}
[877] Fix | Delete
}
[878] Fix | Delete
[879] Fix | Delete
// Find the wp-config.php
[880] Fix | Delete
if (is_dir(dirname(WFWAF_LOG_PATH))) {
[881] Fix | Delete
if (file_exists(dirname(WFWAF_LOG_PATH) . '/../wp-config.php')) {
[882] Fix | Delete
wfWAFUtils::extractCredentialsWPConfig(dirname(WFWAF_LOG_PATH) . '/../wp-config.php', $wfWAFDBCredentials);
[883] Fix | Delete
} else if (file_exists(dirname(WFWAF_LOG_PATH) . '/../../wp-config.php')) {
[884] Fix | Delete
wfWAFUtils::extractCredentialsWPConfig(dirname(WFWAF_LOG_PATH) . '/../../wp-config.php', $wfWAFDBCredentials);
[885] Fix | Delete
}
[886] Fix | Delete
} else if (!empty($_SERVER['DOCUMENT_ROOT'])) {
[887] Fix | Delete
if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/wp-config.php')) {
[888] Fix | Delete
wfWAFUtils::extractCredentialsWPConfig($_SERVER['DOCUMENT_ROOT'] . '/wp-config.php', $wfWAFDBCredentials);
[889] Fix | Delete
} else if (file_exists($_SERVER['DOCUMENT_ROOT'] . '/../wp-config.php')) {
[890] Fix | Delete
wfWAFUtils::extractCredentialsWPConfig($_SERVER['DOCUMENT_ROOT'] . '/../wp-config.php', $wfWAFDBCredentials);
[891] Fix | Delete
}
[892] Fix | Delete
} else {
[893] Fix | Delete
$wfWAFDBCredentials = false;
[894] Fix | Delete
}
[895] Fix | Delete
[896] Fix | Delete
if (!empty($wfWAFDBCredentials)) {
[897] Fix | Delete
$wfWAFStorageEngine = new wfWAFWordPressStorageMySQL(new wfWAFStorageEngineMySQLi(), $wfWAFDBCredentials['tablePrefix'], wfShutdownRegistry::getDefaultInstance());
[898] Fix | Delete
$wfWAFStorageEngine->getDb()->connect(
[899] Fix | Delete
$wfWAFDBCredentials['user'],
[900] Fix | Delete
$wfWAFDBCredentials['pass'],
[901] Fix | Delete
$wfWAFDBCredentials['database'],
[902] Fix | Delete
!empty($wfWAFDBCredentials['ipv6']) ? '[' . $wfWAFDBCredentials['host'] . ']' : $wfWAFDBCredentials['host'],
[903] Fix | Delete
!empty($wfWAFDBCredentials['port']) ? $wfWAFDBCredentials['port'] : null,
[904] Fix | Delete
!empty($wfWAFDBCredentials['socket']) ? $wfWAFDBCredentials['socket'] : null,
[905] Fix | Delete
array_key_exists('flags', $wfWAFDBCredentials) ? $wfWAFDBCredentials['flags'] : 0,
[906] Fix | Delete
$sslOptions
[907] Fix | Delete
);
[908] Fix | Delete
if (array_key_exists('charset', $wfWAFDBCredentials)) {
[909] Fix | Delete
$wfWAFStorageEngine->getDb()
[910] Fix | Delete
->setCharset($wfWAFDBCredentials['charset'],
[911] Fix | Delete
!empty($wfWAFDBCredentials['collation']) ? $wfWAFDBCredentials['collation'] : '');
[912] Fix | Delete
}
[913] Fix | Delete
if (defined('ABSPATH')) {
[914] Fix | Delete
$tableExists = false;
[915] Fix | Delete
$optionName = 'wordfence_installed'; //Also exists in wfConfig.php
[916] Fix | Delete
if (is_multisite() && function_exists('get_network_option')) {
[917] Fix | Delete
$tableExists = get_network_option(null, $optionName, null);
[918] Fix | Delete
}
[919] Fix | Delete
else {
[920] Fix | Delete
$tableExists = get_option($optionName, null);
[921] Fix | Delete
}
[922] Fix | Delete
[923] Fix | Delete
$wfWAFStorageEngine->installing = !$tableExists;
[924] Fix | Delete
$wfWAFStorageEngine->getDb()->installing = $wfWAFStorageEngine->installing;
[925] Fix | Delete
}
[926] Fix | Delete
[927] Fix | Delete
} else {
[928] Fix | Delete
unset($wfWAFDBCredentials);
[929] Fix | Delete
}
[930] Fix | Delete
[931] Fix | Delete
break;
[932] Fix | Delete
}
[933] Fix | Delete
}
[934] Fix | Delete
[935] Fix | Delete
if (empty($wfWAFStorageEngine)) {
[936] Fix | Delete
$wfWAFStorageEngine = new wfWAFStorageFile(
[937] Fix | Delete
WFWAF_LOG_PATH . 'attack-data.php',
[938] Fix | Delete
WFWAF_LOG_PATH . 'ips.php',
[939] Fix | Delete
WFWAF_LOG_PATH . 'config.php',
[940] Fix | Delete
WFWAF_LOG_PATH . 'rules.php',
[941] Fix | Delete
WFWAF_LOG_PATH . 'wafRules.rules'
[942] Fix | Delete
);
[943] Fix | Delete
if ($specifiedStorageEngine)
[944] Fix | Delete
$fallbackStorageEngine = true;
[945] Fix | Delete
}
[946] Fix | Delete
[947] Fix | Delete
wfWAF::setSharedStorageEngine($wfWAFStorageEngine, $fallbackStorageEngine);
[948] Fix | Delete
wfWAF::setInstance(new wfWAFWordPress(wfWAFWordPressRequest::createFromGlobals(), wfWAF::getSharedStorageEngine()));
[949] Fix | Delete
wfWAF::getInstance()->getEventBus()->attach(new wfWAFWordPressObserver(wfWAF::getInstance()));
[950] Fix | Delete
[951] Fix | Delete
if ($wfWAFStorageEngine instanceof wfWAFStorageFile) {
[952] Fix | Delete
$rulesFiles = array(
[953] Fix | Delete
WFWAF_LOG_PATH . 'rules.php',
[954] Fix | Delete
// WFWAF_PATH . 'rules.php',
[955] Fix | Delete
);
[956] Fix | Delete
foreach ($rulesFiles as $rulesFile) {
[957] Fix | Delete
if (!file_exists($rulesFile) && !wfWAF::getInstance()->isReadOnly()) {
[958] Fix | Delete
@touch($rulesFile);
[959] Fix | Delete
}
[960] Fix | Delete
@chmod($rulesFile, (wfWAFWordPress::permissions() | 0444));
[961] Fix | Delete
if (is_writable($rulesFile)) {
[962] Fix | Delete
wfWAF::getInstance()->setCompiledRulesFile($rulesFile);
[963] Fix | Delete
break;
[964] Fix | Delete
}
[965] Fix | Delete
}
[966] Fix | Delete
} else if ($wfWAFStorageEngine instanceof wfWAFStorageMySQL) {
[967] Fix | Delete
$wfWAFStorageEngine->runMigrations();
[968] Fix | Delete
$wfWAFStorageEngine->setDefaults();
[969] Fix | Delete
}
[970] Fix | Delete
[971] Fix | Delete
if (!wfWAF::getInstance()->isReadOnly()) {
[972] Fix | Delete
if (wfWAF::getInstance()->getStorageEngine()->needsInitialRules()) {
[973] Fix | Delete
try {
[974] Fix | Delete
if (wfWAF::getInstance()->getStorageEngine()->getConfig('apiKey', null, 'synced') !== null &&
[975] Fix | Delete
wfWAF::getInstance()->getStorageEngine()->getConfig('createInitialRulesDelay', null, 'transient') < time()
[976] Fix | Delete
) {
[977] Fix | Delete
$event = new wfWAFCronFetchRulesEvent(time() - 60);
[978] Fix | Delete
$event->setWaf(wfWAF::getInstance());
[979] Fix | Delete
$event->fire();
[980] Fix | Delete
wfWAF::getInstance()->getStorageEngine()->setConfig('createInitialRulesDelay', time() + (5 * 60), 'transient');
[981] Fix | Delete
}
[982] Fix | Delete
} catch (wfWAFBuildRulesException $e) {
[983] Fix | Delete
// Log this somewhere
[984] Fix | Delete
error_log($e->getMessage());
[985] Fix | Delete
} catch (Exception $e) {
[986] Fix | Delete
// Suppress this
[987] Fix | Delete
error_log($e->getMessage());
[988] Fix | Delete
}
[989] Fix | Delete
}
[990] Fix | Delete
}
[991] Fix | Delete
[992] Fix | Delete
if (WFWAF_DEBUG && file_exists(wfWAF::getInstance()->getStorageEngine()->getRulesDSLCacheFile())) {
[993] Fix | Delete
try {
[994] Fix | Delete
wfWAF::getInstance()->updateRuleSet(file_get_contents(wfWAF::getInstance()->getStorageEngine()->getRulesDSLCacheFile()), false);
[995] Fix | Delete
} catch (wfWAFBuildRulesException $e) {
[996] Fix | Delete
$GLOBALS['wfWAFDebugBuildException'] = $e;
[997] Fix | Delete
} catch (Exception $e) {
[998] Fix | Delete
$GLOBALS['wfWAFDebugBuildException'] = $e;
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function