Version Description
- Firewall improvements
Download this release
Release Info
Developer | ritesh.soni36 |
Plugin | MalCare WordPress Security Plugin – Malware Scanner, Cleaner, Security Firewall |
Version | 1.89 |
Comparing to | |
See all releases |
Code changes from version 1.88 to 1.89
- admin/main_page.php +1 -1
- callback/wings/db.php +3 -0
- callback/wings/fw.php +5 -1
- callback/wings/info.php +3 -1
- fw/config.php +74 -0
- fw/fw.php +291 -155
- fw/request.php +13 -2
- main.php +1 -1
- main/db.php +9 -0
- malcare.php +1 -1
- protect.php +2 -1
- readme.txt +3 -0
admin/main_page.php
CHANGED
@@ -58,7 +58,7 @@
|
|
58 |
<select name="purpose" class="bv-input select-purpose" required>
|
59 |
<option value="" hidden>Looking for?</option>
|
60 |
<?php
|
61 |
-
$signupPurpose =
|
62 |
foreach($signupPurpose as $value) {
|
63 |
echo "<option value='".$value."'>".$value."</option>";
|
64 |
}
|
58 |
<select name="purpose" class="bv-input select-purpose" required>
|
59 |
<option value="" hidden>Looking for?</option>
|
60 |
<?php
|
61 |
+
$signupPurpose = array("Malware Scan", "Malware Clean", "Firewall", "Login Protection", "Others");
|
62 |
foreach($signupPurpose as $value) {
|
63 |
echo "<option value='".$value."'>".$value."</option>";
|
64 |
}
|
callback/wings/db.php
CHANGED
@@ -136,6 +136,9 @@ class BVDBCallback {
|
|
136 |
case "trttbl":
|
137 |
$bvresp->addStatus("trttbl", $db->truncateBVTable($_REQUEST['name']));
|
138 |
break;
|
|
|
|
|
|
|
139 |
default:
|
140 |
return false;
|
141 |
}
|
136 |
case "trttbl":
|
137 |
$bvresp->addStatus("trttbl", $db->truncateBVTable($_REQUEST['name']));
|
138 |
break;
|
139 |
+
case "altrtbl":
|
140 |
+
$bvresp->addStatus("altrtbl", $db->alterBVTable($_REQUEST['query'], $_REQUEST['tablename']));
|
141 |
+
break;
|
142 |
default:
|
143 |
return false;
|
144 |
}
|
callback/wings/fw.php
CHANGED
@@ -21,6 +21,10 @@ class BVFirewallCallback {
|
|
21 |
$config->setDisabledRules($_REQUEST['disabled_rules']);
|
22 |
$bvresp->addStatus("disabled_rules", $config->getDisabledRules());
|
23 |
break;
|
|
|
|
|
|
|
|
|
24 |
case "setrulesmode":
|
25 |
$config->setRulesMode($_REQUEST['rules_mode']);
|
26 |
$bvresp->addStatus("rules_mode", $config->getRulesMode());
|
@@ -31,4 +35,4 @@ class BVFirewallCallback {
|
|
31 |
return true;
|
32 |
}
|
33 |
}
|
34 |
-
endif;
|
21 |
$config->setDisabledRules($_REQUEST['disabled_rules']);
|
22 |
$bvresp->addStatus("disabled_rules", $config->getDisabledRules());
|
23 |
break;
|
24 |
+
case "adtrls":
|
25 |
+
$config->setAuditRules($_REQUEST['audit_rules']);
|
26 |
+
$bvresp->addStatus("audit_rules", $config->getAuditRules());
|
27 |
+
break;
|
28 |
case "setrulesmode":
|
29 |
$config->setRulesMode($_REQUEST['rules_mode']);
|
30 |
$bvresp->addStatus("rules_mode", $config->getRulesMode());
|
35 |
return true;
|
36 |
}
|
37 |
}
|
38 |
+
endif;
|
callback/wings/info.php
CHANGED
@@ -215,9 +215,11 @@ class BVInfoCallback {
|
|
215 |
$bvinfo = $bvcb->bvmain->info;
|
216 |
$mode = $bvinfo->getOption('bvfwmode');
|
217 |
$drules = $bvinfo->getOption('bvfwdisabledrules');
|
|
|
218 |
$rmode = $bvinfo->getOption('bvfwrulesmode');
|
219 |
$config['mode'] = intval($mode ? $mode : 1);
|
220 |
$config['disabled_rules'] = $drules ? $drules : array();
|
|
|
221 |
$config['rules_mode'] = intval($rmode ? $rmode : 1);
|
222 |
return $config;
|
223 |
}
|
@@ -289,4 +291,4 @@ class BVInfoCallback {
|
|
289 |
return true;
|
290 |
}
|
291 |
}
|
292 |
-
endif;
|
215 |
$bvinfo = $bvcb->bvmain->info;
|
216 |
$mode = $bvinfo->getOption('bvfwmode');
|
217 |
$drules = $bvinfo->getOption('bvfwdisabledrules');
|
218 |
+
$arules = $bvinfo->getOption('bvfwauditrules');
|
219 |
$rmode = $bvinfo->getOption('bvfwrulesmode');
|
220 |
$config['mode'] = intval($mode ? $mode : 1);
|
221 |
$config['disabled_rules'] = $drules ? $drules : array();
|
222 |
+
$config['audit_rules'] = $arules ? $arules : array();
|
223 |
$config['rules_mode'] = intval($rmode ? $rmode : 1);
|
224 |
return $config;
|
225 |
}
|
291 |
return true;
|
292 |
}
|
293 |
}
|
294 |
+
endif;
|
fw/config.php
CHANGED
@@ -2,9 +2,11 @@
|
|
2 |
|
3 |
if (!defined('ABSPATH')) exit;
|
4 |
if (!class_exists('BVFWConfig')) :
|
|
|
5 |
class BVFWConfig {
|
6 |
public $bvmain;
|
7 |
public static $requests_table = 'fw_requests';
|
|
|
8 |
|
9 |
function __construct($bvmain) {
|
10 |
$this->bvmain = $bvmain;
|
@@ -15,6 +17,64 @@ class BVFWConfig {
|
|
15 |
const AUDIT = 2;
|
16 |
const PROTECT = 3;
|
17 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
public function setMode($mode) {
|
19 |
if (!$mode) {
|
20 |
$this->bvmain->info->deleteOption('bvfwmode');
|
@@ -39,6 +99,14 @@ class BVFWConfig {
|
|
39 |
}
|
40 |
}
|
41 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
public function getMode() {
|
43 |
$mode = $this->bvmain->info->getOption('bvfwmode');
|
44 |
return intval($mode ? $mode : BVFWConfig::DISABLED);
|
@@ -54,10 +122,16 @@ class BVFWConfig {
|
|
54 |
return ($rules ? $rules : array());
|
55 |
}
|
56 |
|
|
|
|
|
|
|
|
|
|
|
57 |
public function clear() {
|
58 |
$this->setMode(false);
|
59 |
$this->setRulesMode(false);
|
60 |
$this->setDisabledRules(false);
|
|
|
61 |
$this->bvmain->db->dropBVTable(BVFWConfig::$requests_table);
|
62 |
$this->bvmain->info->deleteOption('bvptplug');
|
63 |
return true;
|
2 |
|
3 |
if (!defined('ABSPATH')) exit;
|
4 |
if (!class_exists('BVFWConfig')) :
|
5 |
+
|
6 |
class BVFWConfig {
|
7 |
public $bvmain;
|
8 |
public static $requests_table = 'fw_requests';
|
9 |
+
public static $allRules = array(108, 112, 114, 115, 132, 133, 145, 146, 155, 156, 165, 167, 168, 169, 171, 172, 173, 174, 175, 176, 177, 178);
|
10 |
|
11 |
function __construct($bvmain) {
|
12 |
$this->bvmain = $bvmain;
|
17 |
const AUDIT = 2;
|
18 |
const PROTECT = 3;
|
19 |
|
20 |
+
#Rule Mode
|
21 |
+
const DISABLEDRULE = 1;
|
22 |
+
const AUDITRULE = 2;
|
23 |
+
const PROTECTRULE = 3;
|
24 |
+
|
25 |
+
public static function isDisabledRule($mode) {
|
26 |
+
return ($mode === BVFWConfig::DISABLEDRULE);
|
27 |
+
}
|
28 |
+
|
29 |
+
public static function isProtectingRule($mode) {
|
30 |
+
return ($mode === BVFWConfig::PROTECTRULE);
|
31 |
+
}
|
32 |
+
|
33 |
+
public static function isAuditingRule($mode) {
|
34 |
+
return ($mode === BVFWConfig::AUDITRULE);
|
35 |
+
}
|
36 |
+
|
37 |
+
public function isActive() {
|
38 |
+
return ($this->getMode() !== BVFWConfig::DISABLED);
|
39 |
+
}
|
40 |
+
|
41 |
+
public function isProtecting() {
|
42 |
+
return ($this->getMode() === BVFWConfig::PROTECT);
|
43 |
+
}
|
44 |
+
|
45 |
+
public function isAuditing() {
|
46 |
+
return ($this->getMode() === BVFWConfig::AUDIT);
|
47 |
+
}
|
48 |
+
|
49 |
+
public function getRules() {
|
50 |
+
$rules = array("audit" => array(), "protect" => array());
|
51 |
+
$isAudit = false;
|
52 |
+
$rulesMode = $this->getRulesMode();
|
53 |
+
if (BVFWConfig::isDisabledRule($rulesMode)) {
|
54 |
+
return $rules;
|
55 |
+
}
|
56 |
+
$isAudit = ($this->isAuditing() || BVFWConfig::isAuditingRule($rulesMode));
|
57 |
+
$rulesInfo = array();
|
58 |
+
foreach ($this->getAuditRules() as $rule)
|
59 |
+
$rulesInfo[$rule] = BVFWConfig::AUDITRULE;
|
60 |
+
foreach ($this->getDisabledRules() as $rule)
|
61 |
+
$rulesInfo[$rule] = BVFWConfig::DISABLEDRULE;
|
62 |
+
foreach (BVFWConfig::$allRules as $rule) {
|
63 |
+
if (isset($rulesInfo[$rule])) {
|
64 |
+
if (BVFWConfig::isAuditingRule($rulesInfo[$rule])) {
|
65 |
+
$rules["audit"][$rule] = BVFWConfig::AUDITRULE;
|
66 |
+
}
|
67 |
+
} else {
|
68 |
+
if ($isAudit) {
|
69 |
+
$rules["audit"][$rule] = BVFWConfig::AUDITRULE;
|
70 |
+
} else {
|
71 |
+
$rules["protect"][$rule] = BVFWConfig::PROTECTRULE;
|
72 |
+
}
|
73 |
+
}
|
74 |
+
}
|
75 |
+
return $rules;
|
76 |
+
}
|
77 |
+
|
78 |
public function setMode($mode) {
|
79 |
if (!$mode) {
|
80 |
$this->bvmain->info->deleteOption('bvfwmode');
|
99 |
}
|
100 |
}
|
101 |
|
102 |
+
public function setAuditRules($rules) {
|
103 |
+
if (!$rules) {
|
104 |
+
$this->bvmain->info->deleteOption('bvfwauditrules');
|
105 |
+
} else {
|
106 |
+
$this->bvmain->info->updateOption('bvfwauditrules', $rules);
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
public function getMode() {
|
111 |
$mode = $this->bvmain->info->getOption('bvfwmode');
|
112 |
return intval($mode ? $mode : BVFWConfig::DISABLED);
|
122 |
return ($rules ? $rules : array());
|
123 |
}
|
124 |
|
125 |
+
public function getAuditRules() {
|
126 |
+
$rules = $this->bvmain->info->getOption('bvfwauditrules');
|
127 |
+
return ($rules ? $rules : array());
|
128 |
+
}
|
129 |
+
|
130 |
public function clear() {
|
131 |
$this->setMode(false);
|
132 |
$this->setRulesMode(false);
|
133 |
$this->setDisabledRules(false);
|
134 |
+
$this->setAuditRules(false);
|
135 |
$this->bvmain->db->dropBVTable(BVFWConfig::$requests_table);
|
136 |
$this->bvmain->info->deleteOption('bvptplug');
|
137 |
return true;
|
fw/fw.php
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
|
3 |
if (!defined('ABSPATH')) exit;
|
4 |
if (!class_exists('BVFW')) :
|
5 |
-
|
6 |
require_once dirname( __FILE__ ) . '/config.php';
|
7 |
require_once dirname( __FILE__ ) . '/request.php';
|
8 |
require_once dirname( __FILE__ ) . './../ipstore.php';
|
@@ -14,40 +14,41 @@ class BVFW {
|
|
14 |
public $ipstore;
|
15 |
public $category;
|
16 |
public $logger;
|
17 |
-
|
18 |
-
|
19 |
const SQLIREGEX = '/(?:[^\\w<]|\\/\\*\\![0-9]*|^)(?:
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
DATABASE|DATABASES|DAY_HOUR|DAY_MICROSECOND|DAY_MINUTE|DAY_SECOND|DECIMAL|DECLARE|DEFAULT|DELAYED|DELETE|DESCRIBE|DETERMINISTIC|DISTINCT|DISTINCTROW|DOUBLE|DROP|DUAL|DUMPFILE|
|
25 |
-
EACH|ELSE|ELSEIF|ELT|ENCLOSED|ESCAPED|EXISTS|EXIT|EXPLAIN|EXTRACTVALUE|
|
26 |
-
FETCH|FLOAT|FLOAT4|FLOAT8|FORCE|FOREIGN|FROM|FULLTEXT|
|
27 |
-
GRANT|GROUP|HAVING|HEX|HIGH_PRIORITY|HOUR_MICROSECOND|HOUR_MINUTE|HOUR_SECOND|
|
28 |
-
IFNULL|IGNORE|INDEX|INFILE|INNER|INOUT|INSENSITIVE|INSERT|INTERVAL|ISNULL|ITERATE|
|
29 |
-
JOIN|KILL|LEADING|LEAVE|LIMIT|LINEAR|LINES|LOAD|LOAD_FILE|LOCALTIME|LOCALTIMESTAMP|LOCK|LONG|LONGBLOB|LONGTEXT|LOOP|LOW_PRIORITY|
|
30 |
-
MASTER_SSL_VERIFY_SERVER_CERT|MATCH|MAXVALUE|MEDIUMBLOB|MEDIUMINT|MEDIUMTEXT|MID|MIDDLEINT|MINUTE_MICROSECOND|MINUTE_SECOND|MODIFIES|
|
31 |
-
NATURAL|NO_WRITE_TO_BINLOG|NULL|NUMERIC|OPTION|ORD|ORDER|OUTER|OUTFILE|
|
32 |
-
PRECISION|PRIMARY|PRIVILEGES|PROCEDURE|PROCESSLIST|PURGE|
|
33 |
-
RANGE|READ_WRITE|REGEXP|RELEASE|REPEAT|REQUIRE|RESIGNAL|RESTRICT|RETURN|REVOKE|RLIKE|ROLLBACK|
|
34 |
-
SCHEMA|SCHEMAS|SECOND_MICROSECOND|SELECT|SENSITIVE|SEPARATOR|SHOW|SIGNAL|SLEEP|SMALLINT|SPATIAL|SPECIFIC|SQLEXCEPTION|SQLSTATE|SQLWARNING|SQL_BIG_RESULT|SQL_CALC_FOUND_ROWS|SQL_SMALL_RESULT|STARTING|STRAIGHT_JOIN|SUBSTR|
|
35 |
-
TABLE|TERMINATED|TINYBLOB|TINYINT|TINYTEXT|TRAILING|TRANSACTION|TRIGGER|
|
36 |
-
UNDO|UNHEX|UNION|UNLOCK|UNSIGNED|UPDATE|UPDATEXML|USAGE|USING|UTC_DATE|UTC_TIME|UTC_TIMESTAMP|
|
37 |
-
VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|ZEROFILL)(?=[^\\w]|$)/ix';
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
|
|
51 |
public function __construct($bvmain, $ip) {
|
52 |
$this->bvmain = $bvmain;
|
53 |
$this->config = new BVFWConfig($this->bvmain);
|
@@ -57,8 +58,8 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
57 |
}
|
58 |
|
59 |
public function init() {
|
60 |
-
if ($this->isActive()) {
|
61 |
-
$this->
|
62 |
}
|
63 |
add_action('clear_fw_config', array($this->config, 'clear'));
|
64 |
}
|
@@ -75,27 +76,17 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
75 |
}
|
76 |
}
|
77 |
|
78 |
-
public function
|
79 |
-
|
80 |
-
}
|
81 |
-
|
82 |
-
public function isProtecting() {
|
83 |
-
return ($this->config->getMode() === BVFWConfig::PROTECT);
|
84 |
-
}
|
85 |
-
|
86 |
-
public function terminateRequest($category = null) {
|
87 |
-
if ($category)
|
88 |
-
$this->request->setCategory($category);
|
89 |
$this->request->setStatus(BVRequest::BLOCKED);
|
90 |
$this->request->setRespCode(403);
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
die("
|
99 |
<div style='height: 98vh;'>
|
100 |
<div style='text-align: center; padding: 10% 0; font-family: Arial, Helvetica, sans-serif;'>
|
101 |
<div><p><img src=".plugins_url('../img/icon.png', __FILE__)."><h2>Firewall</h2><h3>powered by</h3><h2>"
|
@@ -104,8 +95,6 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
104 |
</div>
|
105 |
</div>
|
106 |
");
|
107 |
-
exit;
|
108 |
-
}
|
109 |
}
|
110 |
|
111 |
public function isBlacklistedIP() {
|
@@ -126,12 +115,16 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
126 |
}
|
127 |
|
128 |
public function execute() {
|
129 |
-
$this->initLogger();
|
130 |
if (!$this->canBypassFirewall()) {
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
$this->
|
|
|
|
|
|
|
|
|
|
|
135 |
}
|
136 |
}
|
137 |
}
|
@@ -143,14 +136,35 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
143 |
return null;
|
144 |
}
|
145 |
|
146 |
-
public function match($pattern, $subject) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
if (is_array($subject)) {
|
148 |
foreach ($subject as $val) {
|
149 |
-
|
150 |
}
|
151 |
-
return
|
152 |
} else {
|
153 |
-
|
|
|
154 |
}
|
155 |
}
|
156 |
|
@@ -159,14 +173,15 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
159 |
}
|
160 |
|
161 |
public function getLength($val) {
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
167 |
-
return
|
|
|
|
|
168 |
}
|
169 |
-
return strpos((string) $subject, (string) $pattern) !== false;
|
170 |
}
|
171 |
|
172 |
public function equals($value, $subject) {
|
@@ -177,104 +192,225 @@ VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|
|
|
177 |
return $value != $subject;
|
178 |
}
|
179 |
|
180 |
-
public function
|
181 |
-
if ($
|
182 |
return false;
|
183 |
-
|
184 |
-
$request = $this->request;
|
185 |
-
$disabledRules = $this->config->getDisabledRules();
|
186 |
-
if (!in_array(108, $disabledRules, true)) {
|
187 |
-
if ($this->match(BVFW::XSSREGEX, $request->getQueryString()))
|
188 |
-
$this->terminateRequest(108);
|
189 |
}
|
190 |
-
if (
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
}
|
196 |
-
if (
|
197 |
-
|
198 |
-
|
199 |
-
|
|
|
|
|
|
|
|
|
200 |
}
|
201 |
-
if (
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
|
|
|
206 |
}
|
207 |
-
if (
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
($this->match(BVFW::XSSREGEX, $request->getBody('kento_pvc_numbers_lang')))))
|
215 |
-
$this->terminateRequest(132);
|
216 |
}
|
217 |
-
if (
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
|
|
225 |
}
|
226 |
-
if (
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
|
|
232 |
}
|
233 |
-
if (
|
234 |
-
|
235 |
-
|
|
|
|
|
|
|
|
|
|
|
236 |
}
|
237 |
-
if (
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
|
|
244 |
}
|
245 |
-
if (
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
|
|
|
|
|
|
|
|
|
|
250 |
}
|
251 |
-
if (
|
252 |
-
|
253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
254 |
}
|
255 |
-
if (
|
256 |
-
|
257 |
-
|
258 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
}
|
260 |
-
if (
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
|
|
|
|
|
|
|
|
266 |
}
|
267 |
-
if (
|
268 |
-
|
269 |
-
|
270 |
-
|
|
|
|
|
|
|
|
|
|
|
271 |
}
|
272 |
-
if (
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
277 |
}
|
|
|
278 |
}
|
279 |
}
|
280 |
endif;
|
2 |
|
3 |
if (!defined('ABSPATH')) exit;
|
4 |
if (!class_exists('BVFW')) :
|
5 |
+
|
6 |
require_once dirname( __FILE__ ) . '/config.php';
|
7 |
require_once dirname( __FILE__ ) . '/request.php';
|
8 |
require_once dirname( __FILE__ ) . './../ipstore.php';
|
14 |
public $ipstore;
|
15 |
public $category;
|
16 |
public $logger;
|
17 |
+
private $currRuleInfo;
|
18 |
+
|
19 |
const SQLIREGEX = '/(?:[^\\w<]|\\/\\*\\![0-9]*|^)(?:
|
20 |
+
@@HOSTNAME|
|
21 |
+
ALTER|ANALYZE|ASENSITIVE|
|
22 |
+
BEFORE|BENCHMARK|BETWEEN|BIGINT|BINARY|BLOB|
|
23 |
+
CALL|CASE|CHANGE|CHAR|CHARACTER|CHAR_LENGTH|COLLATE|COLUMN|CONCAT|CONDITION|CONSTRAINT|CONTINUE|CONVERT|CREATE|CROSS|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|
|
24 |
+
DATABASE|DATABASES|DAY_HOUR|DAY_MICROSECOND|DAY_MINUTE|DAY_SECOND|DECIMAL|DECLARE|DEFAULT|DELAYED|DELETE|DESCRIBE|DETERMINISTIC|DISTINCT|DISTINCTROW|DOUBLE|DROP|DUAL|DUMPFILE|
|
25 |
+
EACH|ELSE|ELSEIF|ELT|ENCLOSED|ESCAPED|EXISTS|EXIT|EXPLAIN|EXTRACTVALUE|
|
26 |
+
FETCH|FLOAT|FLOAT4|FLOAT8|FORCE|FOREIGN|FROM|FULLTEXT|
|
27 |
+
GRANT|GROUP|HAVING|HEX|HIGH_PRIORITY|HOUR_MICROSECOND|HOUR_MINUTE|HOUR_SECOND|
|
28 |
+
IFNULL|IGNORE|INDEX|INFILE|INNER|INOUT|INSENSITIVE|INSERT|INTERVAL|ISNULL|ITERATE|
|
29 |
+
JOIN|KILL|LEADING|LEAVE|LIMIT|LINEAR|LINES|LOAD|LOAD_FILE|LOCALTIME|LOCALTIMESTAMP|LOCK|LONG|LONGBLOB|LONGTEXT|LOOP|LOW_PRIORITY|
|
30 |
+
MASTER_SSL_VERIFY_SERVER_CERT|MATCH|MAXVALUE|MEDIUMBLOB|MEDIUMINT|MEDIUMTEXT|MID|MIDDLEINT|MINUTE_MICROSECOND|MINUTE_SECOND|MODIFIES|
|
31 |
+
NATURAL|NO_WRITE_TO_BINLOG|NULL|NUMERIC|OPTION|ORD|ORDER|OUTER|OUTFILE|
|
32 |
+
PRECISION|PRIMARY|PRIVILEGES|PROCEDURE|PROCESSLIST|PURGE|
|
33 |
+
RANGE|READ_WRITE|REGEXP|RELEASE|REPEAT|REQUIRE|RESIGNAL|RESTRICT|RETURN|REVOKE|RLIKE|ROLLBACK|
|
34 |
+
SCHEMA|SCHEMAS|SECOND_MICROSECOND|SELECT|SENSITIVE|SEPARATOR|SHOW|SIGNAL|SLEEP|SMALLINT|SPATIAL|SPECIFIC|SQLEXCEPTION|SQLSTATE|SQLWARNING|SQL_BIG_RESULT|SQL_CALC_FOUND_ROWS|SQL_SMALL_RESULT|STARTING|STRAIGHT_JOIN|SUBSTR|
|
35 |
+
TABLE|TERMINATED|TINYBLOB|TINYINT|TINYTEXT|TRAILING|TRANSACTION|TRIGGER|
|
36 |
+
UNDO|UNHEX|UNION|UNLOCK|UNSIGNED|UPDATE|UPDATEXML|USAGE|USING|UTC_DATE|UTC_TIME|UTC_TIMESTAMP|
|
37 |
+
VALUES|VARBINARY|VARCHAR|VARCHARACTER|VARYING|WHEN|WHERE|WHILE|WRITE|YEAR_MONTH|ZEROFILL)(?=[^\\w]|$)/ix';
|
38 |
+
|
39 |
+
const XSSREGEX = '/(?:
|
40 |
+
#tags
|
41 |
+
(?:\\<|\\+ADw\\-|\\xC2\\xBC)(script|iframe|svg|object|embed|applet|link|style|meta|\\/\\/|\\?xml\\-stylesheet)(?:[^\\w]|\\xC2\\xBE)|
|
42 |
+
#protocols
|
43 |
+
(?:^|[^\\w])(?:(?:\\s*(?:&\\#(?:x0*6a|0*106)|j)\\s*(?:&\\#(?:x0*61|0*97)|a)\\s*(?:&\\#(?:x0*76|0*118)|v)\\s*(?:&\\#(?:x0*61|0*97)|a)|\\s*(?:&\\#(?:x0*76|0*118)|v)\\s*(?:&\\#(?:x0*62|0*98)|b)|\\s*(?:&\\#(?:x0*65|0*101)|e)\\s*(?:&\\#(?:x0*63|0*99)|c)\\s*(?:&\\#(?:x0*6d|0*109)|m)\\s*(?:&\\#(?:x0*61|0*97)|a)|\\s*(?:&\\#(?:x0*6c|0*108)|l)\\s*(?:&\\#(?:x0*69|0*105)|i)\\s*(?:&\\#(?:x0*76|0*118)|v)\\s*(?:&\\#(?:x0*65|0*101)|e))\\s*(?:&\\#(?:x0*73|0*115)|s)\\s*(?:&\\#(?:x0*63|0*99)|c)\\s*(?:&\\#(?:x0*72|0*114)|r)\\s*(?:&\\#(?:x0*69|0*105)|i)\\s*(?:&\\#(?:x0*70|0*112)|p)\\s*(?:&\\#(?:x0*74|0*116)|t)|\\s*(?:&\\#(?:x0*6d|0*109)|m)\\s*(?:&\\#(?:x0*68|0*104)|h)\\s*(?:&\\#(?:x0*74|0*116)|t)\\s*(?:&\\#(?:x0*6d|0*109)|m)\\s*(?:&\\#(?:x0*6c|0*108)|l)|\\s*(?:&\\#(?:x0*6d|0*109)|m)\\s*(?:&\\#(?:x0*6f|0*111)|o)\\s*(?:&\\#(?:x0*63|0*99)|c)\\s*(?:&\\#(?:x0*68|0*104)|h)\\s*(?:&\\#(?:x0*61|0*97)|a)|\\s*(?:&\\#(?:x0*64|0*100)|d)\\s*(?:&\\#(?:x0*61|0*97)|a)\\s*(?:&\\#(?:x0*74|0*116)|t)\\s*(?:&\\#(?:x0*61|0*97)|a)(?!(?:&\\#(?:x0*3a|0*58)|\\:)(?:&\\#(?:x0*69|0*105)|i)(?:&\\#(?:x0*6d|0*109)|m)(?:&\\#(?:x0*61|0*97)|a)(?:&\\#(?:x0*67|0*103)|g)(?:&\\#(?:x0*65|0*101)|e)(?:&\\#(?:x0*2f|0*47)|\\/)(?:(?:&\\#(?:x0*70|0*112)|p)(?:&\\#(?:x0*6e|0*110)|n)(?:&\\#(?:x0*67|0*103)|g)|(?:&\\#(?:x0*62|0*98)|b)(?:&\\#(?:x0*6d|0*109)|m)(?:&\\#(?:x0*70|0*112)|p)|(?:&\\#(?:x0*67|0*103)|g)(?:&\\#(?:x0*69|0*105)|i)(?:&\\#(?:x0*66|0*102)|f)|(?:&\\#(?:x0*70|0*112)|p)?(?:&\\#(?:x0*6a|0*106)|j)(?:&\\#(?:x0*70|0*112)|p)(?:&\\#(?:x0*65|0*101)|e)(?:&\\#(?:x0*67|0*103)|g)|(?:&\\#(?:x0*74|0*116)|t)(?:&\\#(?:x0*69|0*105)|i)(?:&\\#(?:x0*66|0*102)|f)(?:&\\#(?:x0*66|0*102)|f)|(?:&\\#(?:x0*73|0*115)|s)(?:&\\#(?:x0*76|0*118)|v)(?:&\\#(?:x0*67|0*103)|g)(?:&\\#(?:x0*2b|0*43)|\\+)(?:&\\#(?:x0*78|0*120)|x)(?:&\\#(?:x0*6d|0*109)|m)(?:&\\#(?:x0*6c|0*108)|l))(?:(?:&\\#(?:x0*3b|0*59)|;)(?:&\\#(?:x0*63|0*99)|c)(?:&\\#(?:x0*68|0*104)|h)(?:&\\#(?:x0*61|0*97)|a)(?:&\\#(?:x0*72|0*114)|r)(?:&\\#(?:x0*73|0*115)|s)(?:&\\#(?:x0*65|0*101)|e)(?:&\\#(?:x0*74|0*116)|t)(?:&\\#(?:x0*3d|0*61)|=)[\\-a-z0-9]+)?(?:(?:&\\#(?:x0*3b|0*59)|;)(?:&\\#(?:x0*62|0*98)|b)(?:&\\#(?:x0*61|0*97)|a)(?:&\\#(?:x0*73|0*115)|s)(?:&\\#(?:x0*65|0*101)|e)(?:&\\#(?:x0*36|0*54)|6)(?:&\\#(?:x0*34|0*52)|4))?(?:&\\#(?:x0*2c|0*44)|,)))\\s*(?:&\\#(?:x0*3a|0*58)|&colon|\\:)|
|
44 |
+
#css expression
|
45 |
+
(?:^|[^\\w])(?:(?:\\\\0*65|\\\\0*45|e)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*78|\\\\0*58|x)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*70|\\\\0*50|p)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*72|\\\\0*52|r)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*65|\\\\0*45|e)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*73|\\\\0*53|s)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*73|\\\\0*53|s)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*69|\\\\0*49|i)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6f|\\\\0*4f|o)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6e|\\\\0*4e|n))[^\\w]*?(?:\\\\0*28|\\()|
|
46 |
+
#css properties
|
47 |
+
(?:^|[^\\w])(?:(?:(?:\\\\0*62|\\\\0*42|b)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*65|\\\\0*45|e)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*68|\\\\0*48|h)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*61|\\\\0*41|a)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*76|\\\\0*56|v)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*69|\\\\0*49|i)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6f|\\\\0*4f|o)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*72|\\\\0*52|r)(?:\\/\\*.*?\\*\\/)*)|(?:(?:\\\\0*2d|\\\\0*2d|-)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6d|\\\\0*4d|m)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6f|\\\\0*4f|o)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*7a|\\\\0*5a|z)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*2d|\\\\0*2d|-)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*62|\\\\0*42|b)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*69|\\\\0*49|i)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6e|\\\\0*4e|n)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*64|\\\\0*44|d)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*69|\\\\0*49|i)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*6e|\\\\0*4e|n)(?:\\/\\*.*?\\*\\/)*(?:\\\\0*67|\\\\0*47|g)(?:\\/\\*.*?\\*\\/)*))[^\\w]*(?:\\\\0*3a|\\\\0*3a|:)[^\\w]*(?:\\\\0*75|\\\\0*55|u)(?:\\\\0*72|\\\\0*52|r)(?:\\\\0*6c|\\\\0*4c|l)|
|
48 |
+
#properties
|
49 |
+
(?:^|[^\\w])(?:on(?:abort|activate|afterprint|afterupdate|autocomplete|autocompleteerror|beforeactivate|beforecopy|beforecut|beforedeactivate|beforeeditfocus|beforepaste|beforeprint|beforeunload|beforeupdate|blur|bounce|cancel|canplay|canplaythrough|cellchange|change|click|close|contextmenu|controlselect|copy|cuechange|cut|dataavailable|datasetchanged|datasetcomplete|dblclick|deactivate|drag|dragend|dragenter|dragleave|dragover|dragstart|drop|durationchange|emptied|encrypted|ended|error|errorupdate|filterchange|finish|focus|focusin|focusout|formchange|forminput|hashchange|help|input|invalid|keydown|keypress|keyup|languagechange|layoutcomplete|load|loadeddata|loadedmetadata|loadstart|losecapture|message|mousedown|mouseenter|mouseleave|mousemove|mouseout|mouseover|mouseup|mousewheel|move|moveend|movestart|mozfullscreenchange|mozfullscreenerror|mozpointerlockchange|mozpointerlockerror|offline|online|page|pagehide|pageshow|paste|pause|play|playing|popstate|progress|propertychange|ratechange|readystatechange|reset|resize|resizeend|resizestart|rowenter|rowexit|rowsdelete|rowsinserted|scroll|search|seeked|seeking|select|selectstart|show|stalled|start|storage|submit|suspend|timer|timeupdate|toggle|unload|volumechange|waiting|webkitfullscreenchange|webkitfullscreenerror|wheel)|formaction|data\\-bind|ev:event)[^\\w]
|
50 |
+
)/ix';
|
51 |
+
|
52 |
public function __construct($bvmain, $ip) {
|
53 |
$this->bvmain = $bvmain;
|
54 |
$this->config = new BVFWConfig($this->bvmain);
|
58 |
}
|
59 |
|
60 |
public function init() {
|
61 |
+
if ($this->config->isActive()) {
|
62 |
+
$this->initLogger();
|
63 |
}
|
64 |
add_action('clear_fw_config', array($this->config, 'clear'));
|
65 |
}
|
76 |
}
|
77 |
}
|
78 |
|
79 |
+
public function terminateRequest($category = BVRequest::NORMAL) {
|
80 |
+
$this->request->setCategory($category);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
$this->request->setStatus(BVRequest::BLOCKED);
|
82 |
$this->request->setRespCode(403);
|
83 |
+
$this->log();
|
84 |
+
header("Cache-Control: no-cache, no-store, must-revalidate");
|
85 |
+
header("Pragma: no-cache");
|
86 |
+
header("Expires: 0");
|
87 |
+
header('HTTP/1.0 403 Forbidden');
|
88 |
+
$brandname = $this->bvmain->getBrandName();
|
89 |
+
die("
|
|
|
90 |
<div style='height: 98vh;'>
|
91 |
<div style='text-align: center; padding: 10% 0; font-family: Arial, Helvetica, sans-serif;'>
|
92 |
<div><p><img src=".plugins_url('../img/icon.png', __FILE__)."><h2>Firewall</h2><h3>powered by</h3><h2>"
|
95 |
</div>
|
96 |
</div>
|
97 |
");
|
|
|
|
|
98 |
}
|
99 |
|
100 |
public function isBlacklistedIP() {
|
115 |
}
|
116 |
|
117 |
public function execute() {
|
|
|
118 |
if (!$this->canBypassFirewall()) {
|
119 |
+
$rules = $this->config->getRules();
|
120 |
+
$this->matchRules($rules["audit"]);
|
121 |
+
if ($this->config->isProtecting()) {
|
122 |
+
if ($this->isBlacklistedIP()) {
|
123 |
+
$this->terminateRequest(BVRequest::BLACKLISTED);
|
124 |
+
}
|
125 |
+
if ($this->matchRules($rules["protect"], true)) {
|
126 |
+
$this->terminateRequest();
|
127 |
+
}
|
128 |
}
|
129 |
}
|
130 |
}
|
136 |
return null;
|
137 |
}
|
138 |
|
139 |
+
public function match($pattern, $subject, $key = NULL) {
|
140 |
+
if (is_array($subject)) {
|
141 |
+
foreach ($subject as $k => $v) {
|
142 |
+
$k = ($key !== NULL) ? $key.'-'.$k : NULL;
|
143 |
+
if ($this->match($pattern, $v, $k)) {
|
144 |
+
return true;
|
145 |
+
}
|
146 |
+
}
|
147 |
+
} else {
|
148 |
+
if (preg_match((string) $pattern, (string) $subject) > 0) {
|
149 |
+
if ($key !== NULL) {
|
150 |
+
$this->currRuleInfo[$key] = $this->getLength($subject);
|
151 |
+
}
|
152 |
+
return true;
|
153 |
+
}
|
154 |
+
}
|
155 |
+
return false;
|
156 |
+
}
|
157 |
+
|
158 |
+
public function matchCount($pattern, $subject) {
|
159 |
+
$count = 0;
|
160 |
if (is_array($subject)) {
|
161 |
foreach ($subject as $val) {
|
162 |
+
$count += $this->matchCount($pattern, $val);
|
163 |
}
|
164 |
+
return $count;
|
165 |
} else {
|
166 |
+
$count = preg_match_all((string) $pattern, (string) $subject, $matches);
|
167 |
+
return ($count === false ? 0 : $count);
|
168 |
}
|
169 |
}
|
170 |
|
173 |
}
|
174 |
|
175 |
public function getLength($val) {
|
176 |
+
$length = 0;
|
177 |
+
if (is_array($val)) {
|
178 |
+
foreach ($val as $v) {
|
179 |
+
$length += $this->getLength($v);
|
180 |
+
}
|
181 |
+
return $length;
|
182 |
+
} else {
|
183 |
+
return strlen((string) $val);
|
184 |
}
|
|
|
185 |
}
|
186 |
|
187 |
public function equals($value, $subject) {
|
192 |
return $value != $subject;
|
193 |
}
|
194 |
|
195 |
+
public function matchRules($rules = array(), $isProtect = false) {
|
196 |
+
if (empty($rules)) {
|
197 |
return false;
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
}
|
199 |
+
if (isset($rules[108])) {
|
200 |
+
$this->currRuleInfo = array();
|
201 |
+
if ($this->match(BVFW::XSSREGEX, $this->request->getQueryString(), "GET")) {
|
202 |
+
$this->request->updateRulesInfo(108, $this->currRuleInfo);
|
203 |
+
if ($isProtect) return true;
|
204 |
+
}
|
205 |
+
}
|
206 |
+
if (isset($rules[112])) {
|
207 |
+
$this->currRuleInfo = array();
|
208 |
+
if ($this->match('/\\/wp\\-admin[\\/]+admin\\-ajax\\.php/', $this->request->getPath()) &&
|
209 |
+
(($this->equals('revslider_show_image', $this->request->getQueryString('action')) && $this->match('/\\.php$/i', $this->request->getQueryString('img'), "img")) or
|
210 |
+
($this->equals('revslider_show_image', $this->request->getBody('action')) && $this->match('/\\.php$/i', $this->request->getQueryString('img'), "img")))) {
|
211 |
+
$this->request->updateRulesInfo(112, $this->currRuleInfo);
|
212 |
+
if ($isProtect) return true;
|
213 |
+
}
|
214 |
+
}
|
215 |
+
if (isset($rules[114])) {
|
216 |
+
$this->currRuleInfo = array();
|
217 |
+
if ($this->match('/<\\!(?:DOCTYPE|ENTITY)\\s+(?:%\\s*)?\\w+\\s+SYSTEM/i', $this->request->getBody(), "BODY") or
|
218 |
+
$this->match('/<\\!(?:DOCTYPE|ENTITY)\\s+(?:%\\s*)?\\w+\\s+SYSTEM/i', $this->request->getQueryString(), "GET")) {
|
219 |
+
$this->request->updateRulesInfo(114, $this->currRuleInfo);
|
220 |
+
if ($isProtect) return true;
|
221 |
+
}
|
222 |
+
}
|
223 |
+
if (isset($rules[115])) {
|
224 |
+
$this->currRuleInfo = array();
|
225 |
+
if ($this->match('#/wp\\-admin/admin\\-ajax\\.php$#i', $this->getServerValue('SCRIPT_FILENAME')) &&
|
226 |
+
($this->equals('update-plugin', $this->request->getBody('action')) or $this->equals('update-plugin', $this->request->getQueryString('action'))) && ($this->match('/(^|\\/|\\\\|%2f|%5c)\\.\\.(\\\\|\\/|%2f|%5c)/i', $this->request->getBody(), "BODY") or
|
227 |
+
($this->match('/(^|\\/|\\\\|%2f|%5c)\\.\\.(\\\\|\\/|%2f|%5c)/i', $this->request->getQueryString(), "GET")))) {
|
228 |
+
$this->request->updateRulesInfo(115, $this->currRuleInfo);
|
229 |
+
if ($isProtect) return true;
|
230 |
+
}
|
231 |
+
}
|
232 |
+
if (isset($rules[132])) {
|
233 |
+
$this->currRuleInfo = array();
|
234 |
+
if (($this->equals('Y', $this->request->getBody('kentopvc_hidden'))) &&
|
235 |
+
((!$this->match('/^1?$/', $this->request->getBody('kento_pvc_hide'), "kento_pvc_hide")) or
|
236 |
+
(!$this->match('/^1?$/', $this->request->getBody('kento_pvc_uniq'), "kento_pvc_uniq")) or
|
237 |
+
(!$this->match('/^1?$/', $this->request->getBody('kento_pvc_posttype'), "kento_pvc_posttype")) or
|
238 |
+
($this->match(BVFW::XSSREGEX, $this->request->getBody('kento_pvc_today_text'), "kento_pvc_today_text")) or
|
239 |
+
($this->match(BVFW::XSSREGEX, $this->request->getBody('kento_pvc_total_text'), "kento_pvc_total_text")) or
|
240 |
+
($this->match(BVFW::XSSREGEX, $this->request->getBody('kento_pvc_numbers_lang'), "kento_pvc_numbers_lang")))) {
|
241 |
+
$this->request->updateRulesInfo(132, $this->currRuleInfo);
|
242 |
+
if ($isProtect) return true;
|
243 |
+
}
|
244 |
+
}
|
245 |
+
if (isset($rules[133])) {
|
246 |
+
$this->currRuleInfo = array();
|
247 |
+
if ((($this->match('#/wp\\-mobile\\-detector[/]+resize\\.php#i', $this->request->getPath())) or
|
248 |
+
($this->match('#/wp\\-mobile\\-detector[/]+timthumb\\.php#i', $this->request->getPath()))) &&
|
249 |
+
((($this->getLength($this->request->getBody('src')) > 0) &&
|
250 |
+
(!$this->match('/\\.(?:png|gif|jpg|jpeg|jif|jfif|svg)$/i', $this->request->getBody('src'), "src"))) or
|
251 |
+
(($this->getLength($this->request->getQueryString('src'))) &&
|
252 |
+
(!$this->match('/\\.(?:png|gif|jpg|jpeg|jif|jfif|svg)$/i', $this->request->getQueryString('src'), "src"))))) {
|
253 |
+
$this->request->updateRulesInfo(133, $this->currRuleInfo);
|
254 |
+
if ($isProtect) return true;
|
255 |
+
}
|
256 |
+
}
|
257 |
+
if (isset($rules[145])) {
|
258 |
+
$this->currRuleInfo = array();
|
259 |
+
if ((($this->match('/Abonti|aggregator|AhrefsBot|asterias|BDCbot|BLEXBot|BuiltBotTough|Bullseye|BunnySlippers|ca\\-crawler|CCBot|Cegbfeieh|CheeseBot|CherryPicker|CopyRightCheck|cosmos|Crescent|discobot|DittoSpyder|DotBot|Download Ninja|EasouSpider|EmailCollector|EmailSiphon|EmailWolf|EroCrawler|Exabot|ExtractorPro|Fasterfox|FeedBooster|Foobot|Genieo|grub\\-client|Harvest|hloader|httplib|HTTrack|humanlinks|ieautodiscovery|InfoNaviRobot|IstellaBot|Java\\/1\\.|JennyBot|k2spider|Kenjin Spider|Keyword Density\\/0\\.9|larbin|LexiBot|libWeb|libwww|LinkextractorPro|linko|LinkScan\\/8\\.1a Unix|LinkWalker|LNSpiderguy|lwp\\-trivial|magpie|Mata Hari|MaxPointCrawler|MegaIndex|Microsoft URL Control|MIIxpc|Mippin|Missigua Locator|Mister PiX|MJ12bot|moget|MSIECrawler|NetAnts|NICErsPRO|Niki\\-Bot|NPBot|Nutch|Offline Explorer|Openfind|panscient\\.com|PHP\\/5\\.\\{|ProPowerBot\\/2\\.14|ProWebWalker|Python\\-urllib|QueryN Metasearch|RepoMonkey|RMA|SemrushBot|SeznamBot|SISTRIX|sitecheck\\.Internetseer\\.com|SiteSnagger|SnapPreviewBot|Sogou|SpankBot|spanner|spbot|Spinn3r|suzuran|Szukacz\\/1\\.4|Teleport|Telesoft|The Intraformant|TheNomad|TightTwatBot|Titan|toCrawl\\/UrlDispatcher|True_Robot|turingos|TurnitinBot|UbiCrawler|UnisterBot|URLy Warning|VCI|WBSearchBot|Web Downloader\\/6\\.9|Web Image Collector|WebAuto|WebBandit|WebCopier|WebEnhancer|WebmasterWorldForumBot|WebReaper|WebSauger|Website Quester|Webster Pro|WebStripper|WebZip|Wotbox|wsr\\-agent|WWW\\-Collector\\-E|Xenu|Zao|Zeus|ZyBORG|coccoc|Incutio|lmspider|memoryBot|SemrushBot|serf|Unknown|uptime files/i', $this->request->getHeader('User-Agent'), "User-Agent")) &&
|
260 |
+
($this->match(BVFW::XSSREGEX, $this->request->getHeader('User-Agent'), "User-Agent"))) or
|
261 |
+
(($this->match('/semalt\\.com|kambasoft\\.com|savetubevideo\\.com|buttons\\-for\\-website\\.com|sharebutton\\.net|soundfrost\\.org|srecorder\\.com|softomix\\.com|softomix\\.net|myprintscreen\\.com|joinandplay\\.me|fbfreegifts\\.com|openmediasoft\\.com|zazagames\\.org|extener\\.org|openfrost\\.com|openfrost\\.net|googlsucks\\.com|best\\-seo\\-offer\\.com|buttons\\-for\\-your\\-website\\.com|www\\.Get\\-Free\\-Traffic\\-Now\\.com|best\\-seo\\-solution\\.com|buy\\-cheap\\-online\\.info|site3\\.free\\-share\\-buttons\\.com|webmaster\\-traffic\\.co/i', $this->request->getHeader('Referer'), "Referer")) &&
|
262 |
+
($this->match(BVFW::XSSREGEX, $this->request->getHeader('User-Agent'), "User-Agent")))) {
|
263 |
+
$this->request->updateRulesInfo(145, $this->currRuleInfo);
|
264 |
+
if ($isProtect) return true;
|
265 |
+
}
|
266 |
+
}
|
267 |
+
if (isset($rules[146])) {
|
268 |
+
$this->currRuleInfo = array();
|
269 |
+
if ($this->match('/sitemap_.*?<.*?(:?_\\d+)?\\.xml(:?\\.gz)?/i', $this->request->getPath())) {
|
270 |
+
$this->request->updateRulesInfo(146, $this->currRuleInfo);
|
271 |
+
if ($isProtect) return true;
|
272 |
+
}
|
273 |
+
}
|
274 |
+
if (isset($rules[155])) {
|
275 |
+
$this->currRuleInfo = array();
|
276 |
+
if (($this->match(BVFW::XSSREGEX, $this->request->getHeader('Client-IP'), "Client-IP")) or
|
277 |
+
($this->match(BVFW::XSSREGEX, $this->request->getHeader('X-Forwarded'), "X-Forwarded")) or
|
278 |
+
($this->match(BVFW::XSSREGEX, $this->request->getHeader('X-Cluster-Client-IP'), "X-Cluster-Client-IP")) or
|
279 |
+
($this->match(BVFW::XSSREGEX, $this->request->getHeader('Forwarded-For'), "Forwarded-For")) or
|
280 |
+
($this->match(BVFW::XSSREGEX, $this->request->getHeader('Forwarded'), "Forwarded"))) {
|
281 |
+
$this->request->updateRulesInfo(155, $this->currRuleInfo);
|
282 |
+
if ($isProtect) return true;
|
283 |
+
}
|
284 |
}
|
285 |
+
if (isset($rules[156])) {
|
286 |
+
$this->currRuleInfo = array();
|
287 |
+
if ($this->match('#/wp\\-admin/admin\\-ajax\\.php$#i', $this->getServerValue('SCRIPT_FILENAME')) and
|
288 |
+
(($this->match(BVFW::SQLIREGEX, $this->request->getBody('umm_user'), "umm_user")) or
|
289 |
+
($this->match(BVFW::SQLIREGEX, $this->request->getQueryString('umm_user'), "umm_user")))) {
|
290 |
+
$this->request->updateRulesInfo(156, $this->currRuleInfo);
|
291 |
+
if ($isProtect) return true;
|
292 |
+
}
|
293 |
}
|
294 |
+
if (isset($rules[165])) {
|
295 |
+
$this->currRuleInfo = array();
|
296 |
+
if ($this->match('/O:\\d+:"(?!stdClass")[^"]+":/', $this->request->getCookies('ecwid_oauth_state'), "ecwid_oauth_state")) {
|
297 |
+
$this->request->updateRulesInfo(165, $this->currRuleInfo);
|
298 |
+
if ($isProtect) return true;
|
299 |
+
}
|
300 |
}
|
301 |
+
if (isset($rules[167])) {
|
302 |
+
$this->currRuleInfo = array();
|
303 |
+
if ((!$this->match('/\\.(jpe?g|png|mpeg|mov|flv|pdf|docx?|txt|csv|avi|mp3|wma|wav)($|\\.)/i', $this->request->getFileNames())) &&
|
304 |
+
($this->getLength($this->request->getBody('save_bepro_listing')) > 0)) {
|
305 |
+
$this->request->updateRulesInfo(167, $this->currRuleInfo);
|
306 |
+
if ($isProtect) return true;
|
307 |
+
}
|
|
|
|
|
308 |
}
|
309 |
+
if (isset($rules[168])) {
|
310 |
+
$this->currRuleInfo = array();
|
311 |
+
if (($this->match('#/wp\\-admin/admin\\-ajax\\.php$#i', $this->getServerValue('SCRIPT_FILENAME'))) &&
|
312 |
+
($this->equals('master-slider', $this->request->getQueryString('page'))) &&
|
313 |
+
($this->getLength($this->request->getBody('page')) > 0) &&
|
314 |
+
($this->notEquals('master-slider', $this->request->getBody('page')))) {
|
315 |
+
$this->request->updateRulesInfo(168, $this->currRuleInfo);
|
316 |
+
if ($isProtect) return true;
|
317 |
+
}
|
318 |
}
|
319 |
+
if (isset($rules[169])) {
|
320 |
+
$this->currRuleInfo = array();
|
321 |
+
if (($this->equals('fancybox-for-wordpress', $this->request->getQueryString('page'))) &&
|
322 |
+
($this->match(BVFW::XSSREGEX, $this->request->getBody('mfbfw'), "mfbfw"))) {
|
323 |
+
$this->request->updateRulesInfo(169, $this->currRuleInfo);
|
324 |
+
if ($isProtect) return true;
|
325 |
+
}
|
326 |
}
|
327 |
+
if (isset($rules[171])) {
|
328 |
+
$this->currRuleInfo = array();
|
329 |
+
if ((($this->match('#wp-json/wp/v\\d+/posts/#i', $this->request->getPath())) or
|
330 |
+
($this->match('#/wp/v\\d+/posts/#i', $this->request->getQueryString('rest_route'), "rest_route"))) &&
|
331 |
+
($this->match('/[^0-9]/', $this->request->getQueryString('id'), "id"))) {
|
332 |
+
$this->request->updateRulesInfo(171, $this->currRuleInfo);
|
333 |
+
if ($isProtect) return true;
|
334 |
+
}
|
335 |
}
|
336 |
+
if (isset($rules[172])) {
|
337 |
+
$this->currRuleInfo = array();
|
338 |
+
$pattern = '`\b(?i:(?:conf(?:ig(?:ur(?:e|ation)|\.inc|_global)?)?)|settings?(?:\.?inc)?)\.php$`';
|
339 |
+
if ((($this->match($pattern, $this->getServerValue('SCRIPT_FILENAME'), "SCRIPT_FILENAME")) or
|
340 |
+
($this->match($pattern, $this->request->getQueryString(), "GET")))) {
|
341 |
+
$this->request->updateRulesInfo(172, $this->currRuleInfo);
|
342 |
+
if ($isProtect) return true;
|
343 |
+
}
|
344 |
}
|
345 |
+
if (isset($rules[173])) {
|
346 |
+
$this->currRuleInfo = array();
|
347 |
+
$pattern = '`(?:\.{2}[\/]+)`';
|
348 |
+
if ((($this->match($pattern, $this->request->getBody(), "BODY")) or
|
349 |
+
($this->match($pattern, $this->request->getQueryString(), "GET")) or
|
350 |
+
($this->match($pattern, $this->request->getCookies(), "COOKIE")) or
|
351 |
+
($this->match($pattern, $this->request->getHeader('User-Agent'), "HEADER")))) {
|
352 |
+
$this->request->updateRulesInfo(173, $this->currRuleInfo);
|
353 |
+
if ($isProtect) return true;
|
354 |
+
}
|
355 |
}
|
356 |
+
if (isset($rules[174])) {
|
357 |
+
$this->currRuleInfo = array();
|
358 |
+
$pattern = '`\\b(?:\\$?_(COOKIE|ENV|FILES|(?:GE|POS|REQUES)T|SE(RVER|SSION))|HTTP_(?:(?:POST|GET)_VARS|RAW_POST_DATA)|GLOBALS)\\s*[=\\[)]|\\W\\$\\{\\s*[\'"]\\w+[\'"]`';
|
359 |
+
if ((($this->match($pattern, $this->request->getBody(), "BODY")) or
|
360 |
+
($this->match($pattern, $this->request->getQueryString(), "GET")) or
|
361 |
+
($this->match($pattern, $this->request->getCookies(), "COOKIE")) or
|
362 |
+
($this->match($pattern, $this->request->getHeader('User-Agent'), "User-Agent")) or
|
363 |
+
($this->match($pattern, $this->request->getHeader('Referer'), "Referer")) or
|
364 |
+
($this->match($pattern, $this->getServerValue('PATH_INFO'), "PATH_INFO")))) {
|
365 |
+
$this->request->updateRulesInfo(174, $this->currRuleInfo);
|
366 |
+
if ($isProtect) return true;
|
367 |
+
}
|
368 |
}
|
369 |
+
if (isset($rules[175])) {
|
370 |
+
$this->currRuleInfo = array();
|
371 |
+
$pattern = '`\\b(?i:eval)\\s*\\(\\s*(?i:base64_decode|exec|file_get_contents|gzinflate|passthru|shell_exec|stripslashes|system)\\s*\\(`';
|
372 |
+
if ((($this->match($pattern, $this->request->getBody(), "BODY")) or
|
373 |
+
($this->match($pattern, $this->request->getQueryString(), "GET")) or
|
374 |
+
($this->match($pattern, $this->request->getCookies(), "COOKIE")) or
|
375 |
+
($this->match($pattern, $this->request->getHeader('User-Agent'), "User-Agent")))) {
|
376 |
+
$this->request->updateRulesInfo(175, $this->currRuleInfo);
|
377 |
+
if ($isProtect) return true;
|
378 |
+
}
|
379 |
}
|
380 |
+
if (isset($rules[176])) {
|
381 |
+
$this->currRuleInfo = array();
|
382 |
+
$pattern = '`(?:<\\?(?![Xx][Mm][Ll]).*?(?:\\$_?(?:COOKIE|ENV|FILES|GLOBALS|(?:GE|POS|REQUES)T|SE(RVER|SSION))\\s*[=\\[)]|\\b(?i:array_map|assert|base64_(?:de|en)code|curl_exec|eval|(?:ex|im)plode|file(?:_get_contents)?|fsockopen|function_exists|gzinflate|move_uploaded_file|passthru|[ep]reg_replace|phpinfo|stripslashes|strrev|substr|system|(?:shell_)?exec)\\s*(?:/\\*.+?\\*/\\s*)?\\())|#!/(?:usr|bin)/.+?\\s|\\W\\$\\{\\s*[\'"]\\w+[\'"]`';
|
383 |
+
if ((($this->match($pattern, $this->request->getBody(), "BODY")) or
|
384 |
+
($this->match($pattern, $this->request->getQueryString(), "GET")) or
|
385 |
+
($this->match($pattern, $this->request->getCookies(), "COOKIE")) or
|
386 |
+
($this->match($pattern, $this->request->getHeader('User-Agent'), "User-Agent")))) {
|
387 |
+
$this->request->updateRulesInfo(176, $this->currRuleInfo);
|
388 |
+
if ($isProtect) return true;
|
389 |
+
}
|
390 |
}
|
391 |
+
if (isset($rules[177])) {
|
392 |
+
$this->currRuleInfo = array();
|
393 |
+
if ((($this->matchCount(BVFW::SQLIREGEX, $this->request->getBody()) > 2) or
|
394 |
+
($this->matchCount(BVFW::SQLIREGEX, $this->request->getQueryString()) > 2) or
|
395 |
+
($this->matchCount(BVFW::SQLIREGEX, $this->request->getCookies()) > 2) or
|
396 |
+
($this->matchCount(BVFW::SQLIREGEX, $this->request->getHeader('User-Agent')) > 2))) {
|
397 |
+
$this->request->updateRulesInfo(177, $this->currRuleInfo);
|
398 |
+
if ($isProtect) return true;
|
399 |
+
}
|
400 |
}
|
401 |
+
if (isset($rules[178])) {
|
402 |
+
$this->currRuleInfo = array();
|
403 |
+
$pattern = '`(?: \\W(?:background(-image)?|-moz-binding)\\s*:[^}]*?\\burl\\s*\\([^)]+?(https?:)?//\\w|<(?i:applet|div|embed|form|i?frame(?:set)?|i(?:mg|sindex)|link|m(?:eta|arquee)|object|script|textarea)\\b.*=.*?>|\\bdocument\\s*\\.\\s*(?:body|cookie|domain|location|open|write(?:ln)?)\\b|\\blocation\\s*\\.\\s*(?:href|replace)\\b|\\bwindow\\s*\\.\\s*(?:open|location)\\b|\\b(?:alert|confirm|eval|expression|prompt|set(?:Timeout|Interval)|String\\s*\\.\\s*fromCharCode|\\.\\s*substr)\\b\\s*\\(.*?\\)|(?i)<\\s*s\\s*t\\s*y\\s*l\\s*e\\b.*?>.*?<\\s*/\\s*s\\s*t\\s*y\\s*l\\s*e\\b.*?>|(?i)<[a-z].+?\\bon[a-z]{3,29}\\b\\s*=.{5}|(?i)<.+?\\bon[a-z]{3,29}\\b\\s*=\\s*[\'"](?!\\s*return false\\b).*?[\'"].+?>|(?i)<\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\b.*?>.*?<\\s*/\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t.*?>|<.+?(?i)\\b(?:href|(?:form)?action|background|code|data|location|name|poster|src|value)\\s*=\\s*[\'"]?(?:(?:f|ht)tps?:)?//\\w+\\.\\w|\\batob\\s*(?:[\'"\\x60]\\s*\\]\\s*)?\\(\\s*([\'"\\x60])[a-zA-Z0-9/+=]+\\1\\s*\\)|<.+?(?i)[a-z]+\\s*=.*?(?:java|vb)script:.+?> |<x:script\\b.*?>.*?</x:script.*?>|\\+A(?:Dw|ACIAPgA8)-.+?\\+AD4(?:APAAi)?-|[{}+[\\]\\s]\\+\\s*\\[\\s*]\\s*\\)\\s*\\[[{!}+[\\]\\s]|(?i)<[a-z]+/[a-z]+.+?=.+?>|\\[\\s*\\]\\s*\\[\\s*[\'"\\x60]filter[\'"\\x60]\\s*\\]\\s*\\[\\s*[\'"\\x60]constructor[\'"\\x60]\\s*\\]\\s*\\(\\s*|\\b(?:document|window|this)\\s*\\[.+?\\]\\s*[\\[(]|(?:(?:\\b(?:self|this|top|window)\\s*\\[.+?\\]|\\(\\s*(?:alert|confirm|eval|expression|prompt)\\s*\\)|\\[.*?\\]\\s*\\.\\s*find)|(?:\\.\\s*(?:re(?:ject|place)|constructor)))\\s*\\(.*?\\)|\\b(\\w+)\\s*=\\s*(?:alert|confirm|eval|expression|prompt)\\s*[;,]\\1\\s*\\(.*?\\))`';
|
404 |
+
if ((($this->match($pattern, $this->request->getBody(), "BODY")) or
|
405 |
+
($this->match($pattern, $this->request->getQueryString(), "GET")) or
|
406 |
+
($this->match($pattern, $this->request->getCookies(), "COOKIE")) or
|
407 |
+
($this->match($pattern, $this->request->getHeader('User-Agent'), "User-Agent")) or
|
408 |
+
($this->match($pattern, $this->request->getHeader('Referer'), "Referer")))) {
|
409 |
+
$this->request->updateRulesInfo(178, $this->currRuleInfo);
|
410 |
+
if ($isProtect) return true;
|
411 |
+
}
|
412 |
}
|
413 |
+
return false;
|
414 |
}
|
415 |
}
|
416 |
endif;
|
fw/request.php
CHANGED
@@ -17,7 +17,7 @@ class BVRequest {
|
|
17 |
private $cookies;
|
18 |
private $respcode;
|
19 |
private $status;
|
20 |
-
|
21 |
#status
|
22 |
const ALLOWED = 1;
|
23 |
const BLOCKED = 2;
|
@@ -35,6 +35,7 @@ class BVRequest {
|
|
35 |
$method = '';
|
36 |
$path = '';
|
37 |
$this->ip = $ip;
|
|
|
38 |
$this->setRespCode(200);
|
39 |
$this->setCategory(BVRequest::NORMAL);
|
40 |
$this->setStatus(BVRequest::ALLOWED);
|
@@ -149,7 +150,15 @@ class BVRequest {
|
|
149 |
public function setUri($uri) {
|
150 |
$this->uri = $uri;
|
151 |
}
|
|
|
|
|
|
|
|
|
152 |
|
|
|
|
|
|
|
|
|
153 |
public function getStatus() {
|
154 |
return $this->status;
|
155 |
}
|
@@ -170,6 +179,7 @@ class BVRequest {
|
|
170 |
$querystr = (strlen($querystr) > 512) ? maybe_serialize(array("bv_over_size" => true)) : $querystr;
|
171 |
$referer = $this->getHeader('Referer') ? $this->getHeader('Referer') : '';
|
172 |
$user_agent = $this->getHeader('User-Agent') ? $this->getHeader('User-Agent') : '';
|
|
|
173 |
$data = array(
|
174 |
"path" => $this->getPath(),
|
175 |
"filenames" => maybe_serialize($this->getFileNames()),
|
@@ -182,7 +192,8 @@ class BVRequest {
|
|
182 |
"resp_code" => $this->getRespCode(),
|
183 |
"referer" => $referer,
|
184 |
"status" => $this->getStatus(),
|
185 |
-
"category" => $this->getCategory()
|
|
|
186 |
);
|
187 |
return $data;
|
188 |
}
|
17 |
private $cookies;
|
18 |
private $respcode;
|
19 |
private $status;
|
20 |
+
private $rulesInfo;
|
21 |
#status
|
22 |
const ALLOWED = 1;
|
23 |
const BLOCKED = 2;
|
35 |
$method = '';
|
36 |
$path = '';
|
37 |
$this->ip = $ip;
|
38 |
+
$this->rulesInfo = array();
|
39 |
$this->setRespCode(200);
|
40 |
$this->setCategory(BVRequest::NORMAL);
|
41 |
$this->setStatus(BVRequest::ALLOWED);
|
150 |
public function setUri($uri) {
|
151 |
$this->uri = $uri;
|
152 |
}
|
153 |
+
|
154 |
+
public function updateRulesInfo($key, $value) {
|
155 |
+
$this->rulesInfo[$key] = $value;
|
156 |
+
}
|
157 |
|
158 |
+
public function getRulesInfo() {
|
159 |
+
return $this->rulesInfo;
|
160 |
+
}
|
161 |
+
|
162 |
public function getStatus() {
|
163 |
return $this->status;
|
164 |
}
|
179 |
$querystr = (strlen($querystr) > 512) ? maybe_serialize(array("bv_over_size" => true)) : $querystr;
|
180 |
$referer = $this->getHeader('Referer') ? $this->getHeader('Referer') : '';
|
181 |
$user_agent = $this->getHeader('User-Agent') ? $this->getHeader('User-Agent') : '';
|
182 |
+
$rules_info = maybe_serialize($this->getRulesInfo());
|
183 |
$data = array(
|
184 |
"path" => $this->getPath(),
|
185 |
"filenames" => maybe_serialize($this->getFileNames()),
|
192 |
"resp_code" => $this->getRespCode(),
|
193 |
"referer" => $referer,
|
194 |
"status" => $this->getStatus(),
|
195 |
+
"category" => $this->getCategory(),
|
196 |
+
"rules_info" => $rules_info
|
197 |
);
|
198 |
return $data;
|
199 |
}
|
main.php
CHANGED
@@ -8,7 +8,7 @@ require_once dirname( __FILE__ ) . '/main/auth.php';
|
|
8 |
require_once dirname( __FILE__ ) . '/main/db.php';
|
9 |
|
10 |
class MalCare {
|
11 |
-
public $version = '1.
|
12 |
public $plugname = 'malcare';
|
13 |
public $brandname = 'MalCare';
|
14 |
public $webpage = 'https://www.malcare.com';
|
8 |
require_once dirname( __FILE__ ) . '/main/db.php';
|
9 |
|
10 |
class MalCare {
|
11 |
+
public $version = '1.89';
|
12 |
public $plugname = 'malcare';
|
13 |
public $brandname = 'MalCare';
|
14 |
public $webpage = 'https://www.malcare.com';
|
main/db.php
CHANGED
@@ -92,6 +92,15 @@ class MCDb {
|
|
92 |
return $this->isTablePresent($table);
|
93 |
}
|
94 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
95 |
function getTableContent($table, $fields = '*', $filter = '', $limit = 0, $offset = 0) {
|
96 |
$query = "SELECT $fields from $table $filter";
|
97 |
if ($limit > 0)
|
92 |
return $this->isTablePresent($table);
|
93 |
}
|
94 |
|
95 |
+
function alterBVTable($query, $name) {
|
96 |
+
$resp = false;
|
97 |
+
$table = $this->getBVTable($name);
|
98 |
+
if ($this->isTablePresent($table)) {
|
99 |
+
$resp = $this->query($query);
|
100 |
+
}
|
101 |
+
return $resp;
|
102 |
+
}
|
103 |
+
|
104 |
function getTableContent($table, $fields = '*', $filter = '', $limit = 0, $offset = 0) {
|
105 |
$query = "SELECT $fields from $table $filter";
|
106 |
if ($limit > 0)
|
malcare.php
CHANGED
@@ -5,7 +5,7 @@ Plugin URI: https://www.malcare.com
|
|
5 |
Description: WordPress Security, Firewall and Malware Scanner
|
6 |
Author: MalCare Security
|
7 |
Author URI: https://www.malcare.com
|
8 |
-
Version: 1.
|
9 |
Network: True
|
10 |
*/
|
11 |
|
5 |
Description: WordPress Security, Firewall and Malware Scanner
|
6 |
Author: MalCare Security
|
7 |
Author URI: https://www.malcare.com
|
8 |
+
Version: 1.89
|
9 |
Network: True
|
10 |
*/
|
11 |
|
protect.php
CHANGED
@@ -17,6 +17,7 @@ class BVProtect {
|
|
17 |
$ip = $this->getIP();
|
18 |
$fw = new BVFW($this->bvmain, $ip);
|
19 |
$fw->init();
|
|
|
20 |
$lp = new BVLP($this->bvmain, $ip);
|
21 |
$lp->init();
|
22 |
}
|
@@ -42,4 +43,4 @@ class BVProtect {
|
|
42 |
return $ip;
|
43 |
}
|
44 |
}
|
45 |
-
endif;
|
17 |
$ip = $this->getIP();
|
18 |
$fw = new BVFW($this->bvmain, $ip);
|
19 |
$fw->init();
|
20 |
+
$fw->execute();
|
21 |
$lp = new BVLP($this->bvmain, $ip);
|
22 |
$lp->init();
|
23 |
}
|
43 |
return $ip;
|
44 |
}
|
45 |
}
|
46 |
+
endif;
|
readme.txt
CHANGED
@@ -218,6 +218,9 @@ FTP details input into MalCare is processed on our servers. We need your FTP cre
|
|
218 |
8. With BlogVault's White-Label Solution you can showcase our service under your own brilliant brand.
|
219 |
|
220 |
== CHANGELOG ==
|
|
|
|
|
|
|
221 |
= 1.88 =
|
222 |
* Callback improvements
|
223 |
* Adding delete transient callback
|
218 |
8. With BlogVault's White-Label Solution you can showcase our service under your own brilliant brand.
|
219 |
|
220 |
== CHANGELOG ==
|
221 |
+
= 1.89 =
|
222 |
+
* Firewall improvements
|
223 |
+
|
224 |
= 1.88 =
|
225 |
* Callback improvements
|
226 |
* Adding delete transient callback
|