BulletProof Security - Version 4.8

Version Description

Download this release

Release Info

Developer AITpro
Plugin Icon 128x128 BulletProof Security
Version 4.8
Comparing to
See all releases

Code changes from version 4.7 to 4.8

admin/core/core-forms.php CHANGED
@@ -641,7 +641,7 @@ if ( isset( $_POST['bpsResetDismissSubmit'] ) && current_user_can('manage_option
641
  echo $text;
642
  }
643
  */
644
-
645
  if ( ! delete_user_meta($user_id, 'bps_ignore_mscan_notice') ) {
646
  $text = __('The MScan First Run Notice is NOT set. Nothing to reset.', 'bulletproof-security').'<br>';
647
  echo $text;
@@ -649,7 +649,7 @@ if ( isset( $_POST['bpsResetDismissSubmit'] ) && current_user_can('manage_option
649
  $text = '<span style="color:#008000;">'.__('Success! The MScan First Run Notice is reset.', 'bulletproof-security').'</span><br>';
650
  echo $text;
651
  }
652
-
653
  if ( ! delete_user_meta($user_id, 'bps_ignore_jtc_lite_notice') ) {
654
  $text = __('The JTC-Lite New Feature Notice is NOT set. Nothing to reset.', 'bulletproof-security').'<br>';
655
  echo $text;
641
  echo $text;
642
  }
643
  */
644
+ /*
645
  if ( ! delete_user_meta($user_id, 'bps_ignore_mscan_notice') ) {
646
  $text = __('The MScan First Run Notice is NOT set. Nothing to reset.', 'bulletproof-security').'<br>';
647
  echo $text;
649
  $text = '<span style="color:#008000;">'.__('Success! The MScan First Run Notice is reset.', 'bulletproof-security').'</span><br>';
650
  echo $text;
651
  }
652
+ */
653
  if ( ! delete_user_meta($user_id, 'bps_ignore_jtc_lite_notice') ) {
654
  $text = __('The JTC-Lite New Feature Notice is NOT set. Nothing to reset.', 'bulletproof-security').'<br>';
655
  echo $text;
admin/core/core.php CHANGED
@@ -2191,6 +2191,7 @@ $text = '<h3><span class="blue-bold">'.__('The Complete Website Security Solutio
2191
 
2192
  <div class="pro-links">
2193
  <?php
 
2194
  echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.3', 'https://www.ait-pro.com/aitpro-blog/5678/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-3/' ).'<br>';
2195
  echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.2', 'https://www.ait-pro.com/aitpro-blog/5674/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-2/' ).'<br>';
2196
  echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.1', 'https://www.ait-pro.com/aitpro-blog/5671/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-1/' ).'<br>';
2191
 
2192
  <div class="pro-links">
2193
  <?php
2194
+ echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.4', 'https://www.ait-pro.com/aitpro-blog/5689/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-4/' ).'<br>';
2195
  echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.3', 'https://www.ait-pro.com/aitpro-blog/5678/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-3/' ).'<br>';
2196
  echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.2', 'https://www.ait-pro.com/aitpro-blog/5674/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-2/' ).'<br>';
2197
  echo sprintf( __( '<a href="%2$s" target="_blank" title="Link Opens in New Browser Window">Whats New in BPS Pro %1$s</a>' ), '15.1', 'https://www.ait-pro.com/aitpro-blog/5671/bulletproof-security-pro/whats-new-in-bulletproof-security-pro-15-1/' ).'<br>';
admin/css/bps-black-ui-theme.css CHANGED
@@ -146,11 +146,21 @@ span.tooltip-250-80:hover {z-index:10;}
146
  span.tooltip-250-80 img:hover {z-index:10;}
147
  span.tooltip-250-80 span {display:none;position:absolute;bottom:0;left:0;right:0;}
148
  span.tooltip-250-80:hover span {width:250px;height:80px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
 
 
 
 
 
149
  span.tooltip-350-120 {display:inline-block;position:relative;}
150
  span.tooltip-350-120:hover {z-index:10;}
151
  span.tooltip-350-120 img:hover {z-index:10;}
152
  span.tooltip-350-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
153
  span.tooltip-350-120:hover span {width:350px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
 
 
 
 
 
154
  span.tooltip-350-225 {display:inline-block;position:relative;}
155
  span.tooltip-350-225:hover {z-index:999;}
156
  span.tooltip-350-225 img:hover {z-index:999;}
146
  span.tooltip-250-80 img:hover {z-index:10;}
147
  span.tooltip-250-80 span {display:none;position:absolute;bottom:0;left:0;right:0;}
148
  span.tooltip-250-80:hover span {width:250px;height:80px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
149
+ span.tooltip-250-120 {display:inline-block;position:relative;}
150
+ span.tooltip-250-120:hover {z-index:10;}
151
+ span.tooltip-250-120 img:hover {z-index:10;}
152
+ span.tooltip-250-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
153
+ span.tooltip-250-120:hover span {width:250px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
154
  span.tooltip-350-120 {display:inline-block;position:relative;}
155
  span.tooltip-350-120:hover {z-index:10;}
156
  span.tooltip-350-120 img:hover {z-index:10;}
157
  span.tooltip-350-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
158
  span.tooltip-350-120:hover span {width:350px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
159
+ span.tooltip-350-150 {display:inline-block;position:relative;}
160
+ span.tooltip-350-150:hover {z-index:10;}
161
+ span.tooltip-350-150 img:hover {z-index:10;}
162
+ span.tooltip-350-150 span {display:none;position:absolute;bottom:0;left:0;right:0;}
163
+ span.tooltip-350-150:hover span {width:350px;height:150px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
164
  span.tooltip-350-225 {display:inline-block;position:relative;}
165
  span.tooltip-350-225:hover {z-index:999;}
166
  span.tooltip-350-225 img:hover {z-index:999;}
admin/css/bps-blue-ui-theme.css CHANGED
@@ -141,11 +141,21 @@ span.tooltip-250-80:hover {z-index:10;}
141
  span.tooltip-250-80 img:hover {z-index:10;}
142
  span.tooltip-250-80 span {display:none;position:absolute;bottom:0;left:0;right:0;}
143
  span.tooltip-250-80:hover span {width:250px;height:80px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
 
 
 
 
 
144
  span.tooltip-350-120 {display:inline-block;position:relative;}
145
  span.tooltip-350-120:hover {z-index:10;}
146
  span.tooltip-350-120 img:hover {z-index:10;}
147
  span.tooltip-350-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
148
  span.tooltip-350-120:hover span {width:350px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
 
 
 
 
 
149
  span.tooltip-350-225 {display:inline-block;position:relative;}
150
  span.tooltip-350-225:hover {z-index:999;}
151
  span.tooltip-350-225 img:hover {z-index:999;}
141
  span.tooltip-250-80 img:hover {z-index:10;}
142
  span.tooltip-250-80 span {display:none;position:absolute;bottom:0;left:0;right:0;}
143
  span.tooltip-250-80:hover span {width:250px;height:80px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
144
+ span.tooltip-250-120 {display:inline-block;position:relative;}
145
+ span.tooltip-250-120:hover {z-index:10;}
146
+ span.tooltip-250-120 img:hover {z-index:10;}
147
+ span.tooltip-250-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
148
+ span.tooltip-250-120:hover span {width:250px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
149
  span.tooltip-350-120 {display:inline-block;position:relative;}
150
  span.tooltip-350-120:hover {z-index:10;}
151
  span.tooltip-350-120 img:hover {z-index:10;}
152
  span.tooltip-350-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
153
  span.tooltip-350-120:hover span {width:350px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
154
+ span.tooltip-350-150 {display:inline-block;position:relative;}
155
+ span.tooltip-350-150:hover {z-index:10;}
156
+ span.tooltip-350-150 img:hover {z-index:10;}
157
+ span.tooltip-350-150 span {display:none;position:absolute;bottom:0;left:0;right:0;}
158
+ span.tooltip-350-150:hover span {width:350px;height:150px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
159
  span.tooltip-350-225 {display:inline-block;position:relative;}
160
  span.tooltip-350-225:hover {z-index:999;}
161
  span.tooltip-350-225 img:hover {z-index:999;}
admin/css/bps-grey-ui-theme.css CHANGED
@@ -147,11 +147,21 @@ span.tooltip-250-80:hover {z-index:10;}
147
  span.tooltip-250-80 img:hover {z-index:10;}
148
  span.tooltip-250-80 span {display:none;position:absolute;bottom:0;left:0;right:0;}
149
  span.tooltip-250-80:hover span {width:250px;height:80px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
 
 
 
 
 
150
  span.tooltip-350-120 {display:inline-block;position:relative;}
151
  span.tooltip-350-120:hover {z-index:10;}
152
  span.tooltip-350-120 img:hover {z-index:10;}
153
  span.tooltip-350-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
154
  span.tooltip-350-120:hover span {width:350px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
 
 
 
 
 
155
  span.tooltip-350-225 {display:inline-block;position:relative;}
156
  span.tooltip-350-225:hover {z-index:999;}
157
  span.tooltip-350-225 img:hover {z-index:999;}
147
  span.tooltip-250-80 img:hover {z-index:10;}
148
  span.tooltip-250-80 span {display:none;position:absolute;bottom:0;left:0;right:0;}
149
  span.tooltip-250-80:hover span {width:250px;height:80px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
150
+ span.tooltip-250-120 {display:inline-block;position:relative;}
151
+ span.tooltip-250-120:hover {z-index:10;}
152
+ span.tooltip-250-120 img:hover {z-index:10;}
153
+ span.tooltip-250-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
154
+ span.tooltip-250-120:hover span {width:250px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
155
  span.tooltip-350-120 {display:inline-block;position:relative;}
156
  span.tooltip-350-120:hover {z-index:10;}
157
  span.tooltip-350-120 img:hover {z-index:10;}
158
  span.tooltip-350-120 span {display:none;position:absolute;bottom:0;left:0;right:0;}
159
  span.tooltip-350-120:hover span {width:350px;height:120px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
160
+ span.tooltip-350-150 {display:inline-block;position:relative;}
161
+ span.tooltip-350-150:hover {z-index:10;}
162
+ span.tooltip-350-150 img:hover {z-index:10;}
163
+ span.tooltip-350-150 span {display:none;position:absolute;bottom:0;left:0;right:0;}
164
+ span.tooltip-350-150:hover span {width:350px;height:150px;display:block;position:absolute;top:0px;left:30px;right:0;color:#000;background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow:3px 3px 5px -1px rgba(153,153,153,0.7);}
165
  span.tooltip-350-225 {display:inline-block;position:relative;}
166
  span.tooltip-350-225:hover {z-index:999;}
167
  span.tooltip-350-225 img:hover {z-index:999;}
admin/htaccess/mscan-pattern-match.php CHANGED
@@ -1,21 +1,21 @@
1
  <?php
2
  /******************************************************* */
3
  /* MScan Pattern Matching code
4
- /* Version: 1.0
5
  /* This file is called once and deleted:
6
  /* The MScan pattern matching code is saved to the WP DB
7
  /* on BPS upgrades and new installations and then deleted.
8
  /******************************************************* */
9
 
10
  ## MScan File Scan patterns
11
- // Too general/common: \|iframe\||
12
- $js_pattern = '/(\|MakeFrameEx\||\|yahoo_api\||\|exec\||ww=window|ww\.document|visibility:hidden|rotatingtext\[\d\]=\"I\sMISS\sYOU\"|\(!l1l&&!ll1&&!lll\)|s(\W){2,6}c(\W){2,6}r|(\'|")i(\'|")(\.|\+|\s)(\+|\'|"|\.)(\s|f)(\'|")(f|\+|\.)|scr("|\')(|\s)\+(|\s)("|\')ipt|(\\\x(\d|\w[^a])(\d[^0]|\w))+|((%\d(\w|\d){1})+%)|%\d(\w|\d){3}|\(\'hideme\'\)|\["style"\]\["visibility"\]|useragent\.match\(\/(\^(\w|\d){1,}\.\*\|)+|xtrackPageview|document\.write\(\'<\'\+x\[\d\]\+\'>|\\\u00(\d|\w){5,}|(\\\x22(.*)\\\x22)+|(\$(\d){2}){2}|(0|1){8}|_0x(\d|\w){4}|lave(\(|\))|(\(|\))lave)/i';
13
 
14
  $htaccess_pattern = '/(RewriteCond\s%\{HTTP_REFERER\}\s(.*)[^!](google|yahoo|aol|bing|ask|facebook|twitter|msn)|ErrorDocument\s(400|403|404)\s(http|https|):|(RewriteCond\s%\{HTTP_USER_AGENT\}(.*\]\s*)){4}|RewriteRule(.*)(\w|\d){1,8}\.php\?(\w|\d){1,6}=(\$|)(\s|\d){1,3}|RewriteRule(.*)\(htm\|pdf\|jar\)|RewriteRule(.*)\{QUERY_STRING\})/i';
15
 
16
- // old: base\'\.\(\d{1,3}\*\d{1,3}\)\.\'_de\'\.\'code
17
- $php_pattern = '/(base64_decode\(|edoced_46esab|base\'\.\(\d{1,3}(|\s)(\*|\/)(|\s)\d{1,3}\)\.\'_de\'\.\'code|("|\')base(.*)\.(.*)64(.*)(_|\.|)decode("|\')|gzinflate\(|O0|ev("|\')(.*)\.("|\')al\(|lave(\(|\))|(\(|\))lave|preg_replace\(("|\')(\/(\w{1,}|\.\*))\/e|(\\\x(\d|\w){2,3}\\\x(\d|\w){2,3})|__halt_compiler|k2ll33d|\(!l1l&&!ll1&&!lll\)|\|iframe\||\|MakeFrameEx\||\|yahoo_api\||ww=window|ww\.document|ekibastos|scr("|\')(|\s)\+(|\s)("|\')ipt|\(\'hideme\'\)|\["style"\]\["visibility"\]|useragent\.match\(\/(\^(\w|\d){1,}\.\*\|)+|xtrackPageview|\$_COOKIE(|\s)\[str_replace\(.*\$_SERVER\[\'HTTP_HOST\'\]\)\]|\$_\w___\w|\'Windows-1251\'|document\.write\(\'<\'\+x\[\d\]\+\'>|\+(|\s)(\'|")\w(\'|")(|\s)\+|(\\\x22(.*)\\\x22)+|(|\[)_0x(\w|\d){1,6}\[\d{1,3}\]{1,2}|\\\142\\\141\\\x73|\\\u00(\d|\w){5,}|(\'|")i(\'|")(\.|\+|\s)(\+|\'|"|\.)(\s|f)(\'|")(f|\+|\.)|s(\W){2,6}c(\W){2,6}r|(\$\w{1,3}\{\d{1,2}\}(|\s)\.(|\s)){3}|\$<(\d|\w){2}>|\$_(\/\*)|%3C%21|%3Cscript%3E|%253C|(%\d(\w|\d)){5}|\$(\d|\w){1,}\[\'(\d|\w){1,}\'\]\[(\d){1,3}\](\s\.|\.)(\$|\s\$)|(\$(\w){2}\[\d{1,2}\]\.)+|(0|1){8}|_0x(\d|\w){4}|\(64\)(\s|)\.(\s|)(\'|")_(\'|"))/i';
18
 
 
19
  $image_pattern = '/(<\?php|eval\(|exec\(|popen\(|create_function\(|passthru\(|shell_exec\(|proc_open\(|pcntl_exec\(|fopen\(|fputs\(|file_put_contents\(|fwrite\(|gzinflate\(|base64_decode\(|isset|\$_REQUEST|\$_FILES|\$_GET|\$_POST|\$_SERVER|\$_SESSION|system\(|\'cmd\'|__halt_compiler|<script|javascript|function|createElement|<html>|visibility:|<textarea)/i';
20
 
21
  ## MScan Database Scan patterns
1
  <?php
2
  /******************************************************* */
3
  /* MScan Pattern Matching code
4
+ /* Version: 2.0
5
  /* This file is called once and deleted:
6
  /* The MScan pattern matching code is saved to the WP DB
7
  /* on BPS upgrades and new installations and then deleted.
8
  /******************************************************* */
9
 
10
  ## MScan File Scan patterns
11
+ $js_pattern = '/(\|MakeFrameEx\||\|yahoo_api\||\|exec\||ww=window|ww\.document|visibility:hidden|rotatingtext\[\d\]=\"I\sMISS\sYOU\"|\(!l1l&&!ll1&&!lll\)|s(\W){2,6}c(\W){2,6}r|(\'|")i(\'|")(\.|\+|\s)(\+|\'|"|\.)(\s|f)(\'|")(f|\+|\.)|scr("|\')(|\s)\+(|\s)("|\')ipt|(\\\x(\d|\w[^a])(\d[^0]|\w))+|((%\d(\w|\d){1})+%)|%\d(\w|\d){3}|\(\'hideme\'\)|\["style"\]\["visibility"\]|useragent\.match\(\/(\^(\w|\d){1,}\.\*\|)+|xtrackPageview|document\.write\(\'<\'\+x\[\d\]\+\'>|\\\u00(\d|\w){5,}|(\\\x22(.*)\\\x22)+|(\$(\d){2}){2}|(0|1){8}|_0x(\d|\w){4}|lave(\(|\))|(\(|\))lave|\|iframe\|)/i';
 
12
 
13
  $htaccess_pattern = '/(RewriteCond\s%\{HTTP_REFERER\}\s(.*)[^!](google|yahoo|aol|bing|ask|facebook|twitter|msn)|ErrorDocument\s(400|403|404)\s(http|https|):|(RewriteCond\s%\{HTTP_USER_AGENT\}(.*\]\s*)){4}|RewriteRule(.*)(\w|\d){1,8}\.php\?(\w|\d){1,6}=(\$|)(\s|\d){1,3}|RewriteRule(.*)\(htm\|pdf\|jar\)|RewriteRule(.*)\{QUERY_STRING\})/i';
14
 
15
+ // 4.8: New patterns added
16
+ $php_pattern = '/(base64_decode\(|edoced_46esab|base\'\.\(\d{1,3}(|\s)(\*|\/)(|\s)\d{1,3}\)\.\'_de\'\.\'code|("|\')base(.*)\.(.*)64(.*)(_|\.|)decode("|\')|gzinflate\(|O0|ev("|\')(.*)\.("|\')al\(|lave(\(|\))|(\(|\))lave|preg_replace\(("|\')(\/(\w{1,}|\.\*))\/e|(\\\x(\d|\w){2,3}\\\x(\d|\w){2,3})|__halt_compiler|k2ll33d|\(!l1l&&!ll1&&!lll\)|\|iframe\||\|MakeFrameEx\||\|yahoo_api\||ww=window|ww\.document|ekibastos|scr("|\')(|\s)\+(|\s)("|\')ipt|\(\'hideme\'\)|\["style"\]\["visibility"\]|useragent\.match\(\/(\^(\w|\d){1,}\.\*\|)+|xtrackPageview|\$_COOKIE(|\s)\[str_replace\(.*\$_SERVER\[\'HTTP_HOST\'\]\)\]|\$_\w___\w|\'Windows-1251\'|document\.write\(\'<\'\+x\[\d\]\+\'>|\+(|\s)(\'|")\w(\'|")(|\s)\+|(\\\x22(.*)\\\x22)+|(|\[)_0x(\w|\d){1,6}\[\d{1,3}\]{1,2}|\\\142\\\141\\\x73|\\\u00(\d|\w){5,}|(\'|")i(\'|")(\.|\+|\s)(\+|\'|"|\.)(\s|f)(\'|")(f|\+|\.)|s(\W){2,6}c(\W){2,6}r|(\$\w{1,3}\{\d{1,2}\}(|\s)\.(|\s)){3}|\$<(\d|\w){2}>|\$_(\/\*)|%3C%21|%3Cscript%3E|%253C|(%\d(\w|\d)){5}|\$(\d|\w){1,}\[\'(\d|\w){1,}\'\]\[(\d){1,3}\](\s\.|\.)(\$|\s\$)|(\$(\w){2}\[\d{1,2}\]\.)+|(0|1){8}|_0x(\d|\w){4}|\(64\)(\s|)\.(\s|)(\'|")_(\'|")|([a-z0-9]){40,}\+|\$_REQUEST\[\'cmd\'\]|\$_GET\[\'cmd\'\]|system\(|shell_exec\(|passthru\(|exec\(|eval\(|ALREADY_RUN_|hastebin|((chr\()\d+\)\.){1,}|((\\\\|\\\\\\\)\d+[a-z]+([0-9]|)){1,}|\$([a-z0-9])+\{\d+\}(\,|\.){1,})/i';
17
 
18
+ // 4.8: No longer scanning image files
19
  $image_pattern = '/(<\?php|eval\(|exec\(|popen\(|create_function\(|passthru\(|shell_exec\(|proc_open\(|pcntl_exec\(|fopen\(|fputs\(|file_put_contents\(|fwrite\(|gzinflate\(|base64_decode\(|isset|\$_REQUEST|\$_FILES|\$_GET|\$_POST|\$_SERVER|\$_SESSION|system\(|\'cmd\'|__halt_compiler|<script|javascript|function|createElement|<html>|visibility:|<textarea)/i';
20
 
21
  ## MScan Database Scan patterns
admin/htaccess/secure.htaccess CHANGED
@@ -1,4 +1,4 @@
1
- # BULLETPROOF 4.7 SECURE .HTACCESS
2
 
3
  # PHP/PHP.INI HANDLER/CACHE CODE
4
  # Use BPS Custom Code to add php/php.ini Handler and Cache htaccess code and to save it permanently.
1
+ # BULLETPROOF 4.8 SECURE .HTACCESS
2
 
3
  # PHP/PHP.INI HANDLER/CACHE CODE
4
  # Use BPS Custom Code to add php/php.ini Handler and Cache htaccess code and to save it permanently.
admin/htaccess/wpadmin-secure.htaccess CHANGED
@@ -1,4 +1,4 @@
1
- # BULLETPROOF 4.7 WP-ADMIN SECURE .HTACCESS
2
 
3
  # DO NOT ADD URL REWRITING IN THIS FILE OR WORDPRESS WILL BREAK
4
  # RewriteRule ^(.*)$ - [F] works in /wp-admin without breaking WordPress
1
+ # BULLETPROOF 4.8 WP-ADMIN SECURE .HTACCESS
2
 
3
  # DO NOT ADD URL REWRITING IN THIS FILE OR WORDPRESS WILL BREAK
4
  # RewriteRule ^(.*)$ - [F] works in /wp-admin without breaking WordPress
admin/includes/admin.php CHANGED
@@ -125,7 +125,7 @@ global $wpdb, $wp_version, $blog_id;
125
  }
126
  }
127
 
128
- // Whitelist BPS DB options: Total: 45
129
  register_setting('bulletproof_security_options', 'bulletproof_security_options', 'bulletproof_security_options_validate');
130
  register_setting('bulletproof_security_options_SLF', 'bulletproof_security_options_SLF', 'bulletproof_security_options_validate_SLF');
131
  register_setting('bulletproof_security_options_gdpr', 'bulletproof_security_options_gdpr', 'bulletproof_security_options_validate_gdpr');
@@ -138,17 +138,25 @@ register_setting('bulletproof_security_options_customcode', 'bulletproof_securit
138
  register_setting('bulletproof_security_options_mu_sysinfo', 'bulletproof_security_options_mu_sysinfo', 'bulletproof_security_options_validate_mu_sysinfo');
139
  register_setting('bulletproof_security_options_autoupdate', 'bulletproof_security_options_autoupdate', 'bulletproof_security_options_validate_autoupdate');
140
  register_setting('bulletproof_security_options_wizard_free', 'bulletproof_security_options_wizard_free', 'bulletproof_security_options_validate_wizard_free');
 
141
  register_setting('bulletproof_security_options_MScan_status', 'bulletproof_security_options_MScan_status', 'bulletproof_security_options_validate_MScan_status');
 
142
  register_setting('bulletproof_security_options_mod_security', 'bulletproof_security_options_mod_security', 'bulletproof_security_options_validate_mod_security');
143
  register_setting('bulletproof_security_options_pop_uninstall', 'bulletproof_security_options_pop_uninstall', 'bulletproof_security_options_validate_pop_uninstall');
144
  register_setting('bulletproof_security_options_customcode_WPA', 'bulletproof_security_options_customcode_WPA', 'bulletproof_security_options_validate_customcode_WPA');
145
  register_setting('bulletproof_security_options_apache_modules', 'bulletproof_security_options_apache_modules', 'bulletproof_security_options_validate_apache_modules');
146
  register_setting('bulletproof_security_options_hidden_plugins', 'bulletproof_security_options_hidden_plugins', 'bulletproof_security_options_validate_hidden_plugins');
147
  register_setting('bulletproof_security_options_mscan_patterns', 'bulletproof_security_options_mscan_patterns', 'bulletproof_security_options_validate_mscan_patterns');
148
- register_setting('bulletproof_security_options_php_memory_limit', 'bulletproof_security_options_php_memory_limit', 'bulletproof_security_options_validate_php_memory_limit');
 
 
 
 
149
  register_setting('bulletproof_security_options_sec_log_post_limit', 'bulletproof_security_options_sec_log_post_limit', 'bulletproof_security_options_validate_sec_log_post_limit');
150
  register_setting('bulletproof_security_options_login_security_jtc', 'bulletproof_security_options_login_security_jtc', 'bulletproof_security_options_validate_login_security_jtc');
151
  register_setting('bulletproof_security_options_mu_wp_autoupdate', 'bulletproof_security_options_mu_wp_autoupdate', 'bulletproof_security_options_validate_mu_wp_autoupdate');
 
 
152
  register_setting('bulletproof_security_options_wizard_autofix', 'bulletproof_security_options_wizard_autofix', 'bulletproof_security_options_validate_wizard_autofix');
153
  register_setting('bulletproof_security_options_status_display', 'bulletproof_security_options_status_display', 'bulletproof_security_options_validate_status_display');
154
  register_setting('bulletproof_security_options_login_security', 'bulletproof_security_options_login_security', 'bulletproof_security_options_validate_login_security');
@@ -210,6 +218,30 @@ register_setting('bulletproof_security_options_fsp', 'bulletproof_security_optio
210
  copy($wp_hashes_file_master, $wp_hashes_file);
211
  }
212
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  // Create the MScan log file in /logs
214
  $bpsProMScanLog = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/mscan_log.txt';
215
  $bpsProMScanLogARQ = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
@@ -262,16 +294,15 @@ register_setting('bulletproof_security_options_fsp', 'bulletproof_security_optio
262
  'mscan_pattern_match_db' => $mscan_pattern_match_db
263
  );
264
 
265
- if ( ! get_option( 'bulletproof_security_options_mscan_patterns' ) ) {
266
-
267
- foreach( $mscan_pattern_match_options as $key => $value ) {
268
- update_option('bulletproof_security_options_mscan_patterns', $mscan_pattern_match_options);
269
- }
270
-
271
- unlink($mscan_pattern_match_master);
272
- } else {
273
- unlink($mscan_pattern_match_master);
274
  }
 
 
 
 
 
 
275
  }
276
 
277
  if ( file_exists($mscan_pattern_match_file) ) {
@@ -399,7 +430,9 @@ global $blog_id;
399
  add_submenu_page('bulletproof-security/admin/core/core.php', __('Email|Log Settings', 'bulletproof-security'), __('Email|Log Settings', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/email-log-settings/email-log-settings.php' );
400
  add_submenu_page('bulletproof-security/admin/core/core.php', __('UI|UX Settings', 'bulletproof-security'), __('UI|UX Settings', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/theme-skin/theme-skin.php' );
401
  add_submenu_page('bulletproof-security/admin/core/core.php', __('Setup Wizard', 'bulletproof-security'), __('Setup Wizard', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/wizard/wizard.php' );
402
-
 
 
403
  // Do not display a submenu|link: jQuery UI Dialog Pop up Form Uninstaller Options for BPS free
404
  add_submenu_page( null, __('BPS Plugin Uninstall Options', 'bulletproof-security'), __('BPS Plugin Uninstall Options', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/includes/uninstall.php' );
405
 
@@ -558,7 +591,7 @@ global $wp_scripts, $wp_styles, $bulletproof_security, $wp_version, $bps_version
558
  }
559
 
560
  // Dequeue any other plugin or theme scripts that should not be loading on BPS plugin pages
561
- $script_handles = array( 'bps-arq-ajax', 'bps-tabs', 'bps-dialog', 'bps-accordion', 'bps-encryption', 'bps-crypto-js', 'admin-bar', 'jquery', 'jquery-ui-core', 'jquery-ui-tabs', 'jquery-ui-dialog', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position', 'jquery-ui-accordion', 'jquery-effects-core', 'jquery-effects-blind', 'jquery-effects-explode', 'common', 'utils', 'svg-painter', 'wp-auth-check', 'heartbeat', 'debug-bar', 'wp-polyfill', 'wp-i18n', 'hoverintent-js', 'wp-hooks', 'query-monitor' );
562
 
563
  $style_handles = array( 'bps-css', 'bps-css-38', 'admin-bar', 'colors', 'ie', 'wp-auth-check', 'debug-bar', 'query-monitor' );
564
 
@@ -891,6 +924,15 @@ require_once( ABSPATH . 'wp-admin/includes/plugin.php');
891
  delete_option('bulletproof_security_options_php_memory_limit');
892
  delete_option('bulletproof_security_options_fsp');
893
  delete_option('bulletproof_security_options_mscan_patterns');
 
 
 
 
 
 
 
 
 
894
  // will be adding this new upgrade notice option later
895
  // delete_option('bulletproof_security_options_upgrade_notice');
896
 
@@ -1374,7 +1416,10 @@ function bulletproof_security_options_validate_MScan_status($input) {
1374
  @$options['bps_mscan_suspect_skipped_files'] = wp_filter_nohtml_kses($input['bps_mscan_suspect_skipped_files']);
1375
  @$options['bps_mscan_total_suspect_db'] = wp_filter_nohtml_kses($input['bps_mscan_total_suspect_db']);
1376
  $options['bps_mscan_total_ignored_files'] = wp_filter_nohtml_kses($input['bps_mscan_total_ignored_files']);
1377
-
 
 
 
1378
  return $options;
1379
  }
1380
 
@@ -1393,7 +1438,8 @@ function bulletproof_security_options_validate_MScan($input) {
1393
  // keep this option last since I am using newlines
1394
  @$options['mscan_exclude_dirs'] = wp_filter_nohtml_kses($input['mscan_exclude_dirs']);
1395
  @$options['mscan_exclude_tmp_files'] = wp_filter_nohtml_kses($input['mscan_exclude_tmp_files']);
1396
-
 
1397
  return $options;
1398
  }
1399
 
@@ -1406,6 +1452,108 @@ function bulletproof_security_options_validate_mscan_patterns($input) {
1406
  return $options;
1407
  }
1408
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1409
  // JTC-Lite a stripped down version of the BEAST > JTC Anti-Spam|Anti-Hacker
1410
  function bulletproof_security_options_validate_login_security_jtc($input) {
1411
  $BPSoptionsJTC = get_option('bulletproof_security_options_login_security_jtc');
125
  }
126
  }
127
 
128
+ // Whitelist BPS DB options: Total: 53
129
  register_setting('bulletproof_security_options', 'bulletproof_security_options', 'bulletproof_security_options_validate');
130
  register_setting('bulletproof_security_options_SLF', 'bulletproof_security_options_SLF', 'bulletproof_security_options_validate_SLF');
131
  register_setting('bulletproof_security_options_gdpr', 'bulletproof_security_options_gdpr', 'bulletproof_security_options_validate_gdpr');
138
  register_setting('bulletproof_security_options_mu_sysinfo', 'bulletproof_security_options_mu_sysinfo', 'bulletproof_security_options_validate_mu_sysinfo');
139
  register_setting('bulletproof_security_options_autoupdate', 'bulletproof_security_options_autoupdate', 'bulletproof_security_options_validate_autoupdate');
140
  register_setting('bulletproof_security_options_wizard_free', 'bulletproof_security_options_wizard_free', 'bulletproof_security_options_validate_wizard_free');
141
+ register_setting('bulletproof_security_options_new_feature', 'bulletproof_security_options_new_feature', 'bulletproof_security_options_validate_new_feature');
142
  register_setting('bulletproof_security_options_MScan_status', 'bulletproof_security_options_MScan_status', 'bulletproof_security_options_validate_MScan_status');
143
+ register_setting('bulletproof_security_options_mscan_report', 'bulletproof_security_options_mscan_report', 'bulletproof_security_options_validate_mscan_report');
144
  register_setting('bulletproof_security_options_mod_security', 'bulletproof_security_options_mod_security', 'bulletproof_security_options_validate_mod_security');
145
  register_setting('bulletproof_security_options_pop_uninstall', 'bulletproof_security_options_pop_uninstall', 'bulletproof_security_options_validate_pop_uninstall');
146
  register_setting('bulletproof_security_options_customcode_WPA', 'bulletproof_security_options_customcode_WPA', 'bulletproof_security_options_validate_customcode_WPA');
147
  register_setting('bulletproof_security_options_apache_modules', 'bulletproof_security_options_apache_modules', 'bulletproof_security_options_validate_apache_modules');
148
  register_setting('bulletproof_security_options_hidden_plugins', 'bulletproof_security_options_hidden_plugins', 'bulletproof_security_options_validate_hidden_plugins');
149
  register_setting('bulletproof_security_options_mscan_patterns', 'bulletproof_security_options_mscan_patterns', 'bulletproof_security_options_validate_mscan_patterns');
150
+ register_setting('bulletproof_security_options_mscan_t_hash_new', 'bulletproof_security_options_mscan_t_hash_new', 'bulletproof_security_options_validate_mscan_t_hash_new');
151
+ register_setting('bulletproof_security_options_mscan_nodownload', 'bulletproof_security_options_mscan_nodownload', 'bulletproof_security_options_validate_mscan_nodownload');
152
+ register_setting('bulletproof_security_options_mscan_theme_hash', 'bulletproof_security_options_mscan_theme_hash', 'bulletproof_security_options_validate_mscan_theme_hash');
153
+ register_setting('bulletproof_security_options_mscan_p_hash_new', 'bulletproof_security_options_mscan_p_hash_new', 'bulletproof_security_options_validate_mscan_p_hash_new');
154
+ register_setting('bulletproof_security_options_mscan_plugin_hash', 'bulletproof_security_options_mscan_plugin_hash', 'bulletproof_security_options_validate_mscan_plugin_hash');
155
  register_setting('bulletproof_security_options_sec_log_post_limit', 'bulletproof_security_options_sec_log_post_limit', 'bulletproof_security_options_validate_sec_log_post_limit');
156
  register_setting('bulletproof_security_options_login_security_jtc', 'bulletproof_security_options_login_security_jtc', 'bulletproof_security_options_validate_login_security_jtc');
157
  register_setting('bulletproof_security_options_mu_wp_autoupdate', 'bulletproof_security_options_mu_wp_autoupdate', 'bulletproof_security_options_validate_mu_wp_autoupdate');
158
+ register_setting('bulletproof_security_options_php_memory_limit', 'bulletproof_security_options_php_memory_limit', 'bulletproof_security_options_validate_php_memory_limit');
159
+ register_setting('bulletproof_security_options_mscan_zip_upload', 'bulletproof_security_options_mscan_zip_upload', 'bulletproof_security_options_validate_mscan_zip_upload');
160
  register_setting('bulletproof_security_options_wizard_autofix', 'bulletproof_security_options_wizard_autofix', 'bulletproof_security_options_validate_wizard_autofix');
161
  register_setting('bulletproof_security_options_status_display', 'bulletproof_security_options_status_display', 'bulletproof_security_options_validate_status_display');
162
  register_setting('bulletproof_security_options_login_security', 'bulletproof_security_options_login_security', 'bulletproof_security_options_validate_login_security');
218
  copy($wp_hashes_file_master, $wp_hashes_file);
219
  }
220
 
221
+ if ( ! is_dir( WP_CONTENT_DIR . '/bps-backup/plugin-hashes' ) ) {
222
+ @mkdir( WP_CONTENT_DIR . '/bps-backup/plugin-hashes', 0755, true );
223
+ @chmod( WP_CONTENT_DIR . '/bps-backup/plugin-hashes/', 0755 );
224
+ }
225
+
226
+ $plugin_hash_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
227
+ $blank_hash_file = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/wp-hashes.php';
228
+
229
+ if ( ! file_exists($plugin_hash_file) ) {
230
+ copy($blank_hash_file, $plugin_hash_file);
231
+ }
232
+
233
+ if ( ! is_dir( WP_CONTENT_DIR . '/bps-backup/theme-hashes' ) ) {
234
+ @mkdir( WP_CONTENT_DIR . '/bps-backup/theme-hashes', 0755, true );
235
+ @chmod( WP_CONTENT_DIR . '/bps-backup/theme-hashes/', 0755 );
236
+ }
237
+
238
+ $theme_hash_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
239
+ $blank_hash_file = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/wp-hashes.php';
240
+
241
+ if ( ! file_exists($theme_hash_file) ) {
242
+ copy($blank_hash_file, $theme_hash_file);
243
+ }
244
+
245
  // Create the MScan log file in /logs
246
  $bpsProMScanLog = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/mscan_log.txt';
247
  $bpsProMScanLogARQ = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
294
  'mscan_pattern_match_db' => $mscan_pattern_match_db
295
  );
296
 
297
+ foreach( $mscan_pattern_match_options as $key => $value ) {
298
+ update_option('bulletproof_security_options_mscan_patterns', $mscan_pattern_match_options);
 
 
 
 
 
 
 
299
  }
300
+
301
+ unlink($mscan_pattern_match_master);
302
+ }
303
+
304
+ if ( file_exists($mscan_pattern_match_file) ) {
305
+ unlink($mscan_pattern_match_file);
306
  }
307
 
308
  if ( file_exists($mscan_pattern_match_file) ) {
430
  add_submenu_page('bulletproof-security/admin/core/core.php', __('Email|Log Settings', 'bulletproof-security'), __('Email|Log Settings', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/email-log-settings/email-log-settings.php' );
431
  add_submenu_page('bulletproof-security/admin/core/core.php', __('UI|UX Settings', 'bulletproof-security'), __('UI|UX Settings', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/theme-skin/theme-skin.php' );
432
  add_submenu_page('bulletproof-security/admin/core/core.php', __('Setup Wizard', 'bulletproof-security'), __('Setup Wizard', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/wizard/wizard.php' );
433
+ // MScan Iframe Page: hidden submenu. Necessary to avoid the "you don't have permission to view this page" error message.
434
+ add_submenu_page( null, __('MScan Iframe', 'bulletproof-security'), __('MScan Iframe', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/mscan/mscan-iframe.php' );
435
+
436
  // Do not display a submenu|link: jQuery UI Dialog Pop up Form Uninstaller Options for BPS free
437
  add_submenu_page( null, __('BPS Plugin Uninstall Options', 'bulletproof-security'), __('BPS Plugin Uninstall Options', 'bulletproof-security'), 'manage_options', 'bulletproof-security/admin/includes/uninstall.php' );
438
 
591
  }
592
 
593
  // Dequeue any other plugin or theme scripts that should not be loading on BPS plugin pages
594
+ $script_handles = array( 'bps-arq-ajax', 'bps-mscan-ajax', 'bps-tabs', 'bps-dialog', 'bps-accordion', 'bps-encryption', 'bps-crypto-js', 'admin-bar', 'jquery', 'jquery-ui-core', 'jquery-ui-tabs', 'jquery-ui-dialog', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-resizable', 'jquery-ui-draggable', 'jquery-ui-button', 'jquery-ui-position', 'jquery-ui-accordion', 'jquery-effects-core', 'jquery-effects-blind', 'jquery-effects-explode', 'common', 'utils', 'svg-painter', 'wp-auth-check', 'heartbeat', 'debug-bar', 'wp-polyfill', 'wp-i18n', 'hoverintent-js', 'wp-hooks', 'query-monitor' );
595
 
596
  $style_handles = array( 'bps-css', 'bps-css-38', 'admin-bar', 'colors', 'ie', 'wp-auth-check', 'debug-bar', 'query-monitor' );
597
 
924
  delete_option('bulletproof_security_options_php_memory_limit');
925
  delete_option('bulletproof_security_options_fsp');
926
  delete_option('bulletproof_security_options_mscan_patterns');
927
+
928
+ delete_option('bulletproof_security_options_mscan_plugin_hash');
929
+ delete_option('bulletproof_security_options_mscan_p_hash_new');
930
+ delete_option('bulletproof_security_options_mscan_theme_hash');
931
+ delete_option('bulletproof_security_options_mscan_t_hash_new');
932
+ delete_option('bulletproof_security_options_mscan_nodownload');
933
+ delete_option('bulletproof_security_options_new_feature');
934
+ delete_option('bulletproof_security_options_mscan_zip_upload');
935
+ delete_option('bulletproof_security_options_mscan_report');
936
  // will be adding this new upgrade notice option later
937
  // delete_option('bulletproof_security_options_upgrade_notice');
938
 
1416
  @$options['bps_mscan_suspect_skipped_files'] = wp_filter_nohtml_kses($input['bps_mscan_suspect_skipped_files']);
1417
  @$options['bps_mscan_total_suspect_db'] = wp_filter_nohtml_kses($input['bps_mscan_total_suspect_db']);
1418
  $options['bps_mscan_total_ignored_files'] = wp_filter_nohtml_kses($input['bps_mscan_total_ignored_files']);
1419
+ // 4.7: 2 new options added
1420
+ $options['bps_mscan_total_plugin_files'] = wp_filter_nohtml_kses($input['bps_mscan_total_plugin_files']);
1421
+ $options['bps_mscan_total_theme_files'] = wp_filter_nohtml_kses($input['bps_mscan_total_theme_files']);
1422
+
1423
  return $options;
1424
  }
1425
 
1438
  // keep this option last since I am using newlines
1439
  @$options['mscan_exclude_dirs'] = wp_filter_nohtml_kses($input['mscan_exclude_dirs']);
1440
  @$options['mscan_exclude_tmp_files'] = wp_filter_nohtml_kses($input['mscan_exclude_tmp_files']);
1441
+ $options['mscan_file_size_limit_hidden'] = wp_filter_nohtml_kses($input['mscan_file_size_limit_hidden']);
1442
+
1443
  return $options;
1444
  }
1445
 
1452
  return $options;
1453
  }
1454
 
1455
+ // MScan Scan plugin hashes options: 2-D arrays:
1456
+ // Note: You cannot use: wp_filter_nohtml_kses for multidimensional arrays - it will strip out the inner array code.
1457
+ function bulletproof_security_options_validate_mscan_plugin_hash($input) {
1458
+ $options = get_option('bulletproof_security_options_mscan_plugin_hash');
1459
+ $options['bps_mscan_plugin_hash_version_check'] = $input['bps_mscan_plugin_hash_version_check'];
1460
+ $options['bps_mscan_plugin_hash_paths'] = $input['bps_mscan_plugin_hash_paths'];
1461
+ $options['bps_mscan_plugin_hash_zip_file'] = $input['bps_mscan_plugin_hash_zip_file'];
1462
+
1463
+ return $options;
1464
+ }
1465
+
1466
+ // MScan Scan plugin hashes options: 2-D arrays:
1467
+ // Notes: You cannot use: wp_filter_nohtml_kses for multidimensional arrays - it will strip out the inner array code.
1468
+ // The WP delete_option() function only deletes strings due to trim(). So I need a separate DB option for the new arrays
1469
+ // in order to delete this option so that new arrays for comparison are created/updated each time. Simpler is always better anyways.
1470
+ function bulletproof_security_options_validate_mscan_p_hash_new($input) {
1471
+ $options = get_option('bulletproof_security_options_mscan_p_hash_new');
1472
+ $options['bps_mscan_plugin_hash_version_check_new'] = $input['bps_mscan_plugin_hash_version_check_new'];
1473
+ $options['bps_mscan_plugin_hash_paths_new'] = $input['bps_mscan_plugin_hash_paths_new'];
1474
+ $options['bps_mscan_plugin_hash_zip_file_new'] = $input['bps_mscan_plugin_hash_zip_file_new'];
1475
+
1476
+ return $options;
1477
+ }
1478
+
1479
+ // MScan Scan Theme hashes options: 2-D arrays:
1480
+ function bulletproof_security_options_validate_mscan_theme_hash($input) {
1481
+ $options = get_option('bulletproof_security_options_mscan_theme_hash');
1482
+ $options['bps_mscan_theme_hash_version_check'] = $input['bps_mscan_theme_hash_version_check'];
1483
+ $options['bps_mscan_theme_hash_paths'] = $input['bps_mscan_theme_hash_paths'];
1484
+ $options['bps_mscan_theme_hash_zip_file'] = $input['bps_mscan_theme_hash_zip_file'];
1485
+
1486
+ return $options;
1487
+ }
1488
+
1489
+ // MScan Scan Theme hashes options: 2-D arrays:
1490
+ function bulletproof_security_options_validate_mscan_t_hash_new($input) {
1491
+ $options = get_option('bulletproof_security_options_mscan_t_hash_new');
1492
+ $options['bps_mscan_theme_hash_version_check_new'] = $input['bps_mscan_theme_hash_version_check_new'];
1493
+ $options['bps_mscan_theme_hash_paths_new'] = $input['bps_mscan_theme_hash_paths_new'];
1494
+ $options['bps_mscan_theme_hash_zip_file_new'] = $input['bps_mscan_theme_hash_zip_file_new'];
1495
+
1496
+ return $options;
1497
+ }
1498
+
1499
+ // MScan: Plugins and Themes that are not downloadable from WP. ie premium/paid, custom plugins or no zip file version number.
1500
+ function bulletproof_security_options_validate_mscan_nodownload($input) {
1501
+ $options = get_option('bulletproof_security_options_mscan_nodownload');
1502
+ $options['bps_plugin_nodownload'] = $input['bps_plugin_nodownload'];
1503
+ $options['bps_theme_nodownload'] = $input['bps_theme_nodownload'];
1504
+
1505
+ return $options;
1506
+ }
1507
+
1508
+ // MScan Zip Upload Forms: Plugins and Themes that are not downloadable from WP. ie premium/paid, custom plugins or no zip file version number.
1509
+ // Used in the MScan Report to check if these plugins and themes have file hashes or not.
1510
+ function bulletproof_security_options_validate_mscan_zip_upload($input) {
1511
+ $options = get_option('bulletproof_security_options_mscan_zip_upload');
1512
+ $options['bps_mscan_plugin_zip_upload'] = $input['bps_mscan_plugin_zip_upload'];
1513
+ $options['bps_mscan_theme_zip_upload'] = $input['bps_mscan_theme_zip_upload'];
1514
+
1515
+ return $options;
1516
+ }
1517
+
1518
+ // MScan Report: Multidimensional arrays for saving each MScan Report
1519
+ // 20 saved scan reports max. Each report array needs to be a separate option so that it can be deleted easily.
1520
+ function bulletproof_security_options_validate_mscan_report($input) {
1521
+ $options = get_option('bulletproof_security_options_mscan_report');
1522
+ $options['bps_mscan_report_data_1'] = $input['bps_mscan_report_data_1'];
1523
+ $options['bps_mscan_report_data_2'] = $input['bps_mscan_report_data_2'];
1524
+ $options['bps_mscan_report_data_3'] = $input['bps_mscan_report_data_3'];
1525
+ $options['bps_mscan_report_data_4'] = $input['bps_mscan_report_data_4'];
1526
+ $options['bps_mscan_report_data_5'] = $input['bps_mscan_report_data_5'];
1527
+ $options['bps_mscan_report_data_6'] = $input['bps_mscan_report_data_6'];
1528
+ $options['bps_mscan_report_data_7'] = $input['bps_mscan_report_data_7'];
1529
+ $options['bps_mscan_report_data_8'] = $input['bps_mscan_report_data_8'];
1530
+ $options['bps_mscan_report_data_9'] = $input['bps_mscan_report_data_9'];
1531
+ $options['bps_mscan_report_data_10'] = $input['bps_mscan_report_data_10'];
1532
+ $options['bps_mscan_report_data_11'] = $input['bps_mscan_report_data_11'];
1533
+ $options['bps_mscan_report_data_12'] = $input['bps_mscan_report_data_12'];
1534
+ $options['bps_mscan_report_data_13'] = $input['bps_mscan_report_data_13'];
1535
+ $options['bps_mscan_report_data_14'] = $input['bps_mscan_report_data_14'];
1536
+ $options['bps_mscan_report_data_15'] = $input['bps_mscan_report_data_15'];
1537
+ $options['bps_mscan_report_data_16'] = $input['bps_mscan_report_data_16'];
1538
+ $options['bps_mscan_report_data_17'] = $input['bps_mscan_report_data_17'];
1539
+ $options['bps_mscan_report_data_18'] = $input['bps_mscan_report_data_18'];
1540
+ $options['bps_mscan_report_data_19'] = $input['bps_mscan_report_data_19'];
1541
+ $options['bps_mscan_report_data_20'] = $input['bps_mscan_report_data_20'];
1542
+
1543
+ return $options;
1544
+ }
1545
+
1546
+ // New feature Dismiss Notice: Value is set on BPS upgrades and in the Wizard - This is ONLY used rarely for very important new features or options.
1547
+ // If someone has upgraded BPS the value is: upgrade. If is a new BPS installation value is: new
1548
+ // The Dismiss Notice is ONLY displayed to people who have upgraded BPS.
1549
+ // I can add additional options later if needed.
1550
+ function bulletproof_security_options_validate_new_feature($input) {
1551
+ $options = get_option('bulletproof_security_options_new_feature');
1552
+ $options['bps_mscan_rebuild'] = wp_filter_nohtml_kses($input['bps_mscan_rebuild']);
1553
+
1554
+ return $options;
1555
+ }
1556
+
1557
  // JTC-Lite a stripped down version of the BEAST > JTC Anti-Spam|Anti-Hacker
1558
  function bulletproof_security_options_validate_login_security_jtc($input) {
1559
  $BPSoptionsJTC = get_option('bulletproof_security_options_login_security_jtc');
admin/js/bps-mscan-ajax.js CHANGED
@@ -1,8 +1,10 @@
1
  // BPS MScan AJAX
2
- // CAUTION: The AJAX post var: $.post(bps_mscan_ajax.ajaxurl is different than BPS Pro.
 
3
  jQuery(document).ready( function($) {
4
 
5
- // MScan Malware Scanner: Start
 
6
  $( "input#bps-mscan-start-button" ).on({ "click": function() {
7
 
8
  var data = {
@@ -21,7 +23,7 @@ jQuery(document).ready( function($) {
21
  }
22
  });
23
 
24
- // MScan Malware Scanner: Scan Time Estimate Tool
25
  $( "input#bps-mscan-time-estimate-button" ).on({ "click": function() {
26
 
27
  var data = {
1
  // BPS MScan AJAX
2
+ // CAUTION: The AJAX post object/url: $.post(bps_mscan_ajax.ajaxurl... is different than BPS Pro.
3
+ // This simply means that the AJAX url is different in the BPS free (wp_localize_script call). All other actions/code is the same.
4
  jQuery(document).ready( function($) {
5
 
6
+ // MScan Malware Scanner: Start. MScan Status: 1
7
+ // MScan Stop is handled in mscan-ajax-functions.php by using a PHP file contents check: /bps-backup/master-backups/mscan-stop.txt
8
  $( "input#bps-mscan-start-button" ).on({ "click": function() {
9
 
10
  var data = {
23
  }
24
  });
25
 
26
+ // MScan Malware Scanner: Scan Time Estimate Tool. MScan Status: 5
27
  $( "input#bps-mscan-time-estimate-button" ).on({ "click": function() {
28
 
29
  var data = {
admin/mscan/mscan-help-text.php CHANGED
@@ -1,35 +1,4 @@
1
  <?php
2
- # ________ ____________ _____ ________ ________
3
- # ___ __ )____ _____ /___ /_____ __ /____ __ \______________ ______ ___ __/
4
- # __ __ |_ / / /__ / __ / _ _ \_ __/__ /_/ /__ ___/_ __ \_ __ \__ /_
5
- # _ /_/ / / /_/ / _ / _ / / __// /_ _ ____/ _ / / /_/ // /_/ /_ __/
6
- # /_____/ \__,_/ /_/ /_/ \___/ \__/ /_/ /_/ \____/ \____/ /_/
7
- # ________ _____ _____ ________
8
- # __ ___/_____ ___________ _____________(_)__ /______ __ ___ __ \______________
9
- # _____ \ _ _ \_ ___/_ / / /__ ___/__ / _ __/__ / / / __ /_/ /__ ___/_ __ \
10
- # ____/ / / __// /__ / /_/ / _ / _ / / /_ _ /_/ / _ ____/ _ / / /_/ /
11
- # /____/ \___/ \___/ \__,_/ /_/ /_/ \__/ _\__, / /_/ /_/ \____/
12
- # /____/
13
- # 42756C6C657450726F6F66 5365637572697479 50726F
14
- #
15
- /* The Copyright, AITpro Software Products License Information must remain
16
- intact or all BulletProof Security Pro warranties, guarantees, liabilities are void.
17
-
18
- Copyright (C) 2011-2017 Edward Alexander, AIT-pro.com. All rights reserved.
19
-
20
- AITpro Software Products License Information:
21
- BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, OR USING BulletProof Security Pro YOU AGREE TO THE TERMS OF THIS AGREEMENT.
22
- IF YOU ARE ACCEPTING THESE TERMS ON BEHALF OF ANOTHER PERSON OR A COMPANY OR OTHER LEGAL ENTITY, YOU REPRESENT AND WARRANT
23
- THAT YOU HAVE FULL AUTHORITY TO BIND THAT PERSON, COMPANY, OR LEGAL ENTITY TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS,
24
- * DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, OR USE BulletProof Security Pro; AND
25
- * PROMPTLY RETURN BulletProof Security Pro TO THE PARTY FROM WHOM YOU ACQUIRED IT. IF YOU DOWNLOADED BulletProof Security Pro
26
- FROM THE AITPRO WEBSITE, CONTACT AITPRO FOR A REFUND IF APPLICABLE.
27
-
28
- AITpro Software Products License Information continued:
29
- You agree to keep the AITpro Software Products License for BulletProof Security Pro, unmodified or altered in any way,
30
- with the original copy of BulletProof Security Pro that you have and any and all copies or partial copies of BulletProof
31
- Security Pro that You make.
32
- */
33
  // Direct calls to this file are Forbidden when core files are not present
34
  if ( ! current_user_can('manage_options') ) {
35
  header('Status: 403 Forbidden');
@@ -38,9 +7,83 @@ if ( ! current_user_can('manage_options') ) {
38
  }
39
 
40
  /** MScan **/
41
- $bps_modal_content1 = '<strong><font color="blue">'.__('For more extensive help info and answers to common issues or problems click the MScan Malware Scanner Guide link above. For troubleshooting help or to post suspicious code click the MScan Troubleshooting & Code Posting link above.', 'bulletproof-security').'</font></strong><br><br><strong>'.__('Start Scan', 'bulletproof-security').'</strong><br>'.__('Clicking the Start Scan button starts a scan.', 'bulletproof-security').'<br><br><strong>'.__('Stop Scan', 'bulletproof-security').'</strong><br>'.__('Clicking the Stop Scan button stops a scan.', 'bulletproof-security').'<br><br><strong>'.__('Hosting Account Root Folders', 'bulletproof-security').'</strong><br>'.__('All of your hosting account folders are checked/selected by default and will be scanned. Checking a checkbox means scan that folder. Unchecking a checkbox means do not scan that folder.', 'bulletproof-security').'<br><br><strong>'.__('Max File Size Limit to Scan', 'bulletproof-security').'</strong><br>'.__('Files that are larger than 400KB will be skipped by default in a regular scan and can be scanned using a Skipped File scan.', 'bulletproof-security').'<br><br><strong>'.__('Max Time Limit to Scan', 'bulletproof-security').'</strong><br>'.__('The default time limit for script execution on most web hosts is 300 seconds. The default time limit setting for MScan scanning is also set to 300 seconds. It is not recommended that you increase the time limit higher than 300 seconds.', 'bulletproof-security').'<br><br><strong>'.__('Exclude Individual Folders', 'bulletproof-security').'</strong><br>'.__('Enter relative folder paths one folder path per line. A relative folder path is this: /some-folder/some-subfolder. A literal path would be the full server path: /xxxxx/xxxxx/public_html/wordpress/some-folder/some-subfolder. Important Note: Add at least 2 folders in the path. The reason for that is if you just enter 1 folder name/path it could match other folder names somewhere else under your website folders. Example: If you only entered The folder path/name /cache/ it would match all folders named /cache/. If you add the folder name/path: /wp-content/cache/ it would only match this particular cache folder under the wp-content folder.', 'bulletproof-security').'<br><br><strong>'.__('Scan Database', 'bulletproof-security').'</strong><br>'.__('When Database scan is turned on your WordPress database will be scanned for suspicious code.', 'bulletproof-security').'<br><br><strong>'.__('Scan Image Files (Stegosploit|Exif Hack)', 'bulletproof-security').'</strong><br>'.__('WARNING: Scanning image files may cause scanning to stop or fail. Most web hosts already have security protection against Stegosploit and Exif image hacks. It is recommended that you do not scan image files.', 'bulletproof-security').'<br><br><strong>'.__('Scan Skipped Files Only', 'bulletproof-security').'</strong><br>'.__('When Skipped File Scan is On only skipped files will be scanned. Note: The only MScan option setting that has any effect while Skipped File Scan is On is Image File Scan On or Off. You do not need to change any of your other MScan option settings when running a Skipped File scan.', 'bulletproof-security').'<br><br><strong>'.__('Automatically Delete /tmp Files', 'bulletproof-security').'</strong><br>'.__('When Delete Tmp Files is On, all temporary files will be deleted. Hackers commonly hide hacker files in the /tmp folder.', 'bulletproof-security').'<br><br><strong>'.__('Exclude /tmp Files', 'bulletproof-security').'</strong><br>'.__('Enter 1 file name per line. Some web hosts store files such as, mysql.sock, .s.PGSQL.5432 and .per-user in the /tmp folder. These files cannot be deleted by MScan, but attempting to delete these files will generate php errors. To prevent php errors from occurring you would exclude files such as these using the MScan Exclude /tmp files option setting.', 'bulletproof-security').'<br><br><strong>'.__('Scheduled Scan Frequency (BPS Pro only)', 'bulletproof-security').'</strong><br>'.__('You can choose to schedule ongoing automated scans. Note: The BPS Pro ARQ IDPS scanner is far superior to any/all Malware scanners including BPS Pro MScan. Click the MScan Malware Scanner Guide link above for more information regarding using ARQ IDPS and MScan together.', 'bulletproof-security').'<br><br><strong>'.__('Scan Time Estimate Tool', 'bulletproof-security').'</strong><br>'.__('IMPORTANT: You can stop the scan time estimate if it hangs or is taking too long by clicking the Stop Scan button. This tool allows you to check the estimated total scan time of a scan based on your MScan option settings without actually performing/running a scan. Note: This tool does not affect or change any previous scan results except for the Total Scan Time, which will be changed to the estimated scan time. Example Usage: You can check or uncheck Hosting Account Root Folders checkboxes and change any other MScan option settings, save your MScan option settings and then run the Scan Time Estimate Tool to get the total estimated time that the actual scan will take.', 'bulletproof-security').'<br><br><strong>'.__('Delete Scan Status Tool', 'bulletproof-security').'</strong><br>'.__('This tool allows you to delete all of the MScan Status option values. The Scan Completed timestamp, Total Scan Time, Total Files Scanned, Skipped Files, Suspicious Files and Suspicious DB Entries status values will be deleted and will either display blank or 0.', 'bulletproof-security').'<br><br><strong>'.__('Delete DB Scan Data Tool', 'bulletproof-security').'</strong><br>'.__('This tool allows you to delete/reset all of the database scan data in the View|Ignore|Delete Suspicious Files and View|Ignore Suspicious DB Entries Forms. Note: Any/all changes you have made and saved in these Forms will be deleted. You may want to use BPS DB Backup and do a database backup before using this tool.', 'bulletproof-security').'<br><br><strong>'.__('View|Ignore|Delete Suspicious Files', 'bulletproof-security').'</strong><br>'.__('This form allows you to view, ignore, unignore or delete suspicious and skipped files. If you are not sure if code is malicious or safe you can copy the code and post the code in the MScan Troubleshooting & Code Posting form topic. See the link above. If you are unsure if a file is a hacker file or not then download a copy of that file before deleting it. When you ignore a file it will no longer be scanned in any future scans. When you unignore an ignored file it will be scanned in future scans.', 'bulletproof-security').'<br><br><strong>'.__('View|Ignore Suspicious DB Entries', 'bulletproof-security').'</strong><br>'.__('This form allows you to view, ignore or unignore suspicious DB Entries. Note: The view option displays the DB Table, Column, Row ID and the MScan Pattern Match that was detected by the MScan scan. Use phpMyAdmin or a similar tool to check your database Row where the suspicious code was found. When you ignore a DB Entry it will no longer be scanned in any future scans. When you unignore an ignored DB Entry it will be scanned in future scans.', 'bulletproof-security');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
 
43
  /** MScan Log **/
44
- $bps_modal_content2 = '<strong>'.__('This Read Me Help window is draggable (top) and resizable (bottom right corner)', 'bulletproof-security').'</strong><br><br><strong>'.__('MScan Log General Information', 'bulletproof-security').'</strong><br>'.__('Your MScan Log file is a plain text static file and not a dynamic file or dynamic display to keep your website resource usage at a bare minimum and keep your website performance at a maximum. Log entries are logged in descending order by Date and Time. You can copy, edit and delete this plain text file. You can choose S-Monitor Email Alerting & Log File Options to automatically email your MScan Log file to you and delete it when it reaches a certain size (256KB, 500KB or 1MB).', 'bulletproof-security').'<strong><br><br>'.__('MScan Logging', 'bulletproof-security').'</strong><br>'.__('Logs extensive details about each scan that you run.', 'bulletproof-security').'<strong><br><br>'.__('MScan Log File Size', 'bulletproof-security').'</strong><br>'.__('Displays the size of your MScan Log file. If your log file is larger than 2MB then you will see a Red warning message displayed: The S-Monitor Email Alerting & Log File Options will only send log files up to 2MB in size. Copy and paste the MScan Log file contents into a Notepad text file on your computer and save it. Then click the Delete Log button to delete the contents of this Log file.', 'bulletproof-security').'<br><br><strong>'.__('MScan Log Last Modified Time', 'bulletproof-security').'</strong><br>'.__('The Reset Last Modified Time in DB option/feature is currently completely automated and does not require any manual steps performed by you.', 'bulletproof-security').'<br><br><strong>'.__('Delete Log Button', 'bulletproof-security').'</strong><br>'.__('Clicking the Delete Log button will delete the entire contents of your MScan Log File. If you have setup S-Monitor Email Alerting & Log Options then the only time you would probably need to use the Delete Log button is if your MScan Log file exceeds 2MB in size.', 'bulletproof-security');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
  ?>
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  // Direct calls to this file are Forbidden when core files are not present
3
  if ( ! current_user_can('manage_options') ) {
4
  header('Status: 403 Forbidden');
7
  }
8
 
9
  /** MScan **/
10
+ $bps_modal_content1 = '<strong><font color="blue">'.__('For more extensive help info and answers to common issues or problems click the MScan Malware Scanner Guide link above. For troubleshooting help or to post suspicious code click the MScan Troubleshooting & Code Posting link above.', 'bulletproof-security').'</font></strong>
11
+
12
+ <br><br><strong>'.__('MScan 2.0 General Info', 'bulletproof-security').'</strong><br>'.__('MScan 2.0 scans WP Core, Plugin and Theme files using file hash comparisons, which is 100% accurate vs conventional pattern matching, which is typically around 75% - 85% accurate. MScan scans all other website files (non-WordPress files) using conventional pattern matching scanning. The pattern matching code is much more extensive in MScan 2.0 and will hopefully achieve a 95% or higher detection rate. False positives are inevitable when using conventional pattern matching scanning, but since MScan 2.0 uses file hash comparison scanning for all WP Core, Plugin and Theme files then there will not be any false positives detected for any/all WordPress files (WP Core, Plugins and Themes). MScan 2.0 automatically downloads WordPress, Plugin and Theme zip files, extracts the zip files, creates file hashes for all files and then deletes the zip files. WP Core, Plugin and Theme zip downloads only occur on the first MScan scan or when a new WordPress, Plugin or Theme version is installed/updated on a website.', 'bulletproof-security').
13
+
14
+ '<br><br><strong>'.__('Scanning Other WordPress Sites', 'bulletproof-security').'</strong><br>'.__('Website folder checkboxes cannot be checked for other WordPress sites under your hosting account. To scan other WordPress sites under your hosting account run MScan 2.0 from each site. There are several technical reasons for doing this: Each site may have a different version of WordPress installed and different Plugins and Themes installed. MScan 2.0 now uses file hash comparisons for each individual site based on the WordPress, Plugin and Theme versions installed on each individual website.', 'bulletproof-security').
15
+
16
+ '<br><br><strong>'.__('Estimated Scan Time Exceeded', 'bulletproof-security').'</strong><br>'.__('If you see "Estimated Scan Time Exceeded: Still scanning files" that means that the current scan that you are running is taking longer than the estimated scan time. The scan will complete successfully.', 'bulletproof-security').
17
+
18
+ '<br><br><strong>'.__('Processing Total File Count', 'bulletproof-security').'</strong><br>'.__('If you see "Processing Total File Count: Still scanning files" that means that the current scan that you are running has not yet processed the total number of files to scan yet. The scan will complete successfully.', 'bulletproof-security').
19
+
20
+ '<br><br><strong>'.__('New Hash Files Created: Run A New Scan', 'bulletproof-security').'</strong><br>'.__('If you see "Total Files Scanned: New Hash Files Created: Run A New Scan" that means that the current scan that you are running will create new Plugin or Theme Hash files and not scan any files. You will see this message instead of the total number of files scanned whenever new or updated Plugins or Themes need new Hash files created. Run another scan to scan the new/updated Plugin and Theme files. Note: This safety precaution ensures that Plugin and Theme hash files are not being created at the same time Plugin and Theme files are being scanned, which could result in false positive file hash comparison results for Plugin and Theme files.', 'bulletproof-security').
21
+
22
+ '<br><br><strong>'.__('Error: Files found in the plugin-hashes folder', 'bulletproof-security').'</strong><br>'.__('If you see "Total Files Scanned: Error: Files found in the plugin-hashes folder" that means that files (and probably folders too) were found in the /wp-content/bps-backup/plugin-hashes/ folder. This problem could be caused by uploading a plugin zip file that does not extract the entire plugin folder and instead extracts individual plugin folders and files. To fix this problem you will need to use FTP or your web host control panel file manager and delete all folders and files in the /plugin-hashes/ folder except for this file: plugin-hashes.php. To correctly make a plugin zip file that extracts the entire plugin folder you would right mouse click on the plugin folder, click "send to" and then click "Compressed (zipped) folder" on Windows.', 'bulletproof-security').
23
+
24
+ '<br><br><strong>'.__('Error: Files found in the theme-hashes folder', 'bulletproof-security').'</strong><br>'.__('If you see "Total Files Scanned: Error: Files found in the theme-hashes folder" that means that files (and probably folders too) were found in the /wp-content/bps-backup/theme-hashes/ folder. This problem could be caused by uploading a theme zip file that does not extract the entire theme folder and instead extracts individual theme folders and files. To fix this problem you will need to use FTP or your web host control panel file manager and delete all folders and files in the /theme-hashes/ folder except for this file: theme-hashes.php. To correctly make a theme zip file that extracts the entire theme folder you would right mouse click on the theme folder, click "send to" and then click "Compressed (zipped) folder" on Windows.', 'bulletproof-security').
25
+
26
+ '<br><br><strong>'.__('Start Scan', 'bulletproof-security').'</strong><br>'.__('Clicking the Start Scan button starts a scan.', 'bulletproof-security').
27
+
28
+ '<br><br><strong>'.__('Stop Scan', 'bulletproof-security').'</strong><br>'.__('Clicking the Stop Scan button stops a scan. You can also deactivate and activate the BPS Pro plugin on the WordPress Plugins page to stop a scan.', 'bulletproof-security').
29
+
30
+ '<br><br><strong>'.__('Reset MScan', 'bulletproof-security').'</strong><br>'.__('The Reset MScan button resets/deletes these things: MScan Status option values: The Scan Completed timestamp, Total Scan Time, Total Files Scanned, Skipped Files, Suspicious Files and Suspicious DB Entries status values will be deleted and will either display blank or 0. The scan data in the View|Ignore|Delete Suspicious Files and View|Ignore Suspicious DB Entries Forms will be deleted.', 'bulletproof-security').
31
+
32
+ '<br><br><strong>'.__('Website Folders & Files To Scan', 'bulletproof-security').'</strong><br>'.__('Checking a checkbox means scan that folder. Unchecking a checkbox means do not scan that folder. "Giving WordPress Its Own Directory" site types: All scannable parent folders will be listed along with your WP installation folders. Both parent folders and files and WP installation folders and files that you select/check will be scanned. All other site types: All folders in your WP installation folder will be listed. All folders and files in your WP installation folder that you select/check will be scanned.', 'bulletproof-security').
33
+
34
+ '<br><br><strong>'.__('Max File Size Limit to Scan', 'bulletproof-security').'</strong><br>'.__('Files that are larger than the default file size setting of 1000KB will be skipped by default in a regular scan and can be scanned using a Skipped File scan. You can change the max file size limit option setting to a larger max file size limit.', 'bulletproof-security').
35
+
36
+ '<br><br><strong>'.__('Max Time Limit to Scan', 'bulletproof-security').'</strong><br>'.__('The default time limit for script execution on most web hosts is 300 seconds. The default time limit setting for MScan scanning is also set to 300 seconds. It is not recommended that you increase the time limit higher than 300 seconds.', 'bulletproof-security').
37
+
38
+ '<br><br><strong>'.__('Exclude Individual Folders', 'bulletproof-security').'</strong><br>'.__('Enter relative folder paths one folder path per line. A relative folder path is this: /some-folder/some-subfolder. A literal path would be the full server path: /xxxxx/xxxxx/public_html/wordpress/some-folder/some-subfolder. Important Note: Add at least 2 folders in the path. The reason for that is if you just enter 1 folder name/path it could match other folder names somewhere else under your website folders. Example: If you only entered The folder path/name /cache/ it would match all folders named /cache/. If you add the folder name/path: /wp-content/cache/ it would only match this particular cache folder under the wp-content folder.', 'bulletproof-security').
39
+
40
+ '<br><br><strong>'.__('Scan Database', 'bulletproof-security').'</strong><br>'.__('When Database scan is turned on your WordPress database will be scanned for suspicious code.', 'bulletproof-security').
41
+
42
+ '<br><br><strong>'.__('Scan Skipped Files Only', 'bulletproof-security').'</strong><br>'.__('Skipped files are files that are larger than the "Max File Size Limit to Scan" option setting file size. The default file size setting is 400KB. When Skipped File Scan is On only skipped files will be scanned. Note: No other MScan option settings have any effect while Skipped File Scan is set to On.', 'bulletproof-security').
43
+
44
+ '<br><br><strong>'.__('Automatically Delete /tmp Files', 'bulletproof-security').'</strong><br>'.__('When Delete Tmp Files is On, all temporary files will be deleted. Hackers commonly hide hacker files in the /tmp folder.', 'bulletproof-security').
45
+
46
+ '<br><br><strong>'.__('Exclude /tmp Files', 'bulletproof-security').'</strong><br>'.__('Enter 1 file name per line. Some web hosts store files such as, mysql.sock, .s.PGSQL.5432 and .per-user in the /tmp folder. These files cannot be deleted by MScan, but attempting to delete these files will generate php errors. To prevent php errors from occurring you would exclude files such as these using the MScan Exclude /tmp files option setting. You will need to ask your web host for the names of those tmp files to exclude.', 'bulletproof-security').
47
+
48
+ '<br><br><strong>'.__('Scheduled Scan Frequency', 'bulletproof-security').'</strong><br>'.__('You can choose to schedule ongoing automated scans. Note: The BPS Pro ARQ IDPS scanner is far superior to any/all Malware scanners including BPS Pro MScan. You can of course use both ARQ IDPS and MScan scheduled scans together.', 'bulletproof-security').
49
+
50
+ /* This tool causes buggy problems on Live hosted sites. This tool is no longer needed anyway. Either fix the bugs or nuke it.
51
+ '<br><br><strong>'.__('Scan Time Estimate Tool', 'bulletproof-security').'</strong><br>'.__('You can stop the scan time estimate if it hangs or is taking too long by clicking the Stop Scan button. This tool allows you to check the estimated total scan time of a scan based on your MScan option settings without actually performing/running a scan. Note: This tool does not affect or change any previous scan results except for the Total Scan Time, which will be changed to the estimated scan time. Example Usage: You can check or uncheck Hosting Account Root Folders checkboxes and change any other MScan option settings, save your MScan option settings and then run the Scan Time Estimate Tool to get the total estimated time that the actual scan will take. Note: This tool fully simulates an actual scan.', 'bulletproof-security').
52
+ */
53
+
54
+ '<br><br><strong>'.__('Delete File Hashes Tool', 'bulletproof-security').'</strong><br>'.__('This tool allows you to delete the Plugin and Theme file hashes. This tool should ONLY be used if there is a problem when scanning Plugin and Theme files. Usages: If you downgrade a plugin to an older version then use this tool to delete Plugin and Theme file hashes. If the MScan file hash comparison results display a large number of Plugin or Theme files as suspicious: Example: Suspicious|Modified|Unknown Plugin or Theme file then use this tool to delete all Plugin and Theme file hashes. After using this tool, the next MScan scan that you perform will download new Plugin and Theme zip files, extract them, make new Plugin and Theme file hashes and then delete the zip files. Important Note: You should also click the MScan Reset button after using this tool to remove any old/bad scan data.', 'bulletproof-security').
55
+
56
+ '<br><br><strong>'.__('Upload Plugin Zip Files', 'bulletproof-security').'</strong><br>'.__('You can upload multiple zip files at the same time by using your Ctrl or Shift keyboard keys on Windows. This upload form allows you to upload premium, paid and custom plugin zip files that are not in the WordPress Plugin Repository on wordpress.org. MScan will automatically extract any uploaded plugin zip files, create file hashes and delete the plugin zip files on the next MScan scan. If you do not choose to upload premium, paid and custom plugin zip files then those premium, paid and custom plugin files will not be scanned. Important Note: Plugin zip files MUST be named/renamed using the version number in this exact format: plugin-name.x.x.zip where x is the actual current plugin version number. The reason for that is MScan keeps track of the version numbers for plugins in order to create new plugin file hashes for newer versions of plugins when you update them. This process is completely automated for any/all free plugins that you have installed from the WordPress Plugin Repository on wordpress.org. Important Note: Some plugin zip files in the WP Plugin Repository are not named with a version number. If you would like to scan those plugins you will need to download the plugin zip file and rename it using this exact format: plugin-name.x.x.zip and then upload the renamed plugin zip file.', 'bulletproof-security').
57
+
58
+ '<br><br><strong>'.__('Upload Theme Zip Files', 'bulletproof-security').'</strong><br>'.__('You can upload multiple zip files at the same time by using your Ctrl or Shift keyboard keys on Windows. This upload form allows you to upload premium, paid and custom theme zip files that are not in the WordPress Theme Repository on wordpress.org. MScan will automatically extract any uploaded theme zip files, create file hashes and delete the theme zip files on the next MScan scan. If you do not choose to upload premium, paid and custom theme zip files then those premium, paid and custom theme files will not be scanned. Important Note: Theme zip files MUST be named/renamed using the version number in this exact format: theme-name.x.x.zip where x is the actual current theme version number. The reason for that is MScan keeps track of the version numbers for themes in order to create new theme file hashes for newer versions of themes when you update them. This process is completely automated for any/all free themes that you have installed from the WordPress Theme Repository on wordpress.org. Important Note: Some theme zip files in the WP Theme Repository are not named with a version number. If you would like to scan those themes you will need to download the theme zip file and rename it using this exact format: theme-name.x.x.zip and then upload the renamed theme zip file. Child Themes are a custom Theme. Zip a known good/clean copy of your Child Theme folder and upload it if you would like your Child Theme files scanned. Use the same zip file naming convention: tmeme-name-child.x.x.zip.', 'bulletproof-security').
59
+
60
+ '<br><br><strong>'.__('View|Ignore|Delete Suspicious Files', 'bulletproof-security').'</strong><br>'.__('This form allows you to view, ignore, unignore or delete suspicious and skipped files. If you are not sure if code is malicious or safe you can copy the code and post the code in the MScan Troubleshooting & Code Posting form topic. See the link above. If you are unsure if a file is a hacker file or not then download a copy of that file before deleting it. When you ignore a file it will no longer be scanned in any future scans. When you unignore an ignored file it will be scanned in future scans.', 'bulletproof-security').
61
+
62
+ '<br><br><strong>'.__('View|Ignore Suspicious DB Entries', 'bulletproof-security').'</strong><br>'.__('This form allows you to view, ignore or unignore suspicious DB Entries. Note: The view option displays the DB Table, Column, Row ID and the MScan Pattern Match that was detected by the MScan scan. Use phpMyAdmin or a similar tool to check your database Row where the suspicious code was found. When you ignore a DB Entry it will no longer be scanned in any future scans. When you unignore an ignored DB Entry it will be scanned in future scans.', 'bulletproof-security');
63
 
64
  /** MScan Log **/
65
+ $bps_modal_content2 = '<strong>'.__('This Read Me Help window is draggable (top) and resizable (bottom right corner)', 'bulletproof-security').'</strong><br><br><strong>'.
66
+
67
+ __('MScan Log General Information', 'bulletproof-security').'</strong><br>'.__('Your MScan Log file is a plain text static file and not a dynamic file or dynamic display to keep your website resource usage at a bare minimum and keep your website performance at a maximum. Log entries are logged in descending order by Date and Time. You can copy, edit and delete this plain text file. You can choose S-Monitor Email Alerting & Log File Options to automatically email your MScan Log file to you and delete it when it reaches a certain size (256KB, 500KB or 1MB).', 'bulletproof-security').
68
+
69
+ '<strong><br><br>'.__('MScan Logging', 'bulletproof-security').'</strong><br>'.__('Logs extensive details about each scan that you run.', 'bulletproof-security').
70
+
71
+ '<strong><br><br>'.__('MScan Log File Size', 'bulletproof-security').'</strong><br>'.__('Displays the size of your MScan Log file. If your log file is larger than 2MB then you will see a Red warning message displayed: The S-Monitor Email Alerting & Log File Options will only send log files up to 2MB in size. Copy and paste the MScan Log file contents into a Notepad text file on your computer and save it. Then click the Delete Log button to delete the contents of this Log file.', 'bulletproof-security').'<br><br><strong>'.__('MScan Log Last Modified Time', 'bulletproof-security').
72
+
73
+ '</strong><br>'.__('The Reset Last Modified Time in DB option/feature is currently completely automated and does not require any manual steps performed by you.', 'bulletproof-security').
74
+
75
+ '<br><br><strong>'.__('Delete Log Button', 'bulletproof-security').'</strong><br>'.__('Clicking the Delete Log button will delete the entire contents of your MScan Log File. If you have setup S-Monitor Email Alerting & Log Options then the only time you would probably need to use the Delete Log button is if your MScan Log file exceeds 2MB in size.', 'bulletproof-security');
76
+
77
+ /** MScan Report **/
78
+ $bps_modal_content3 = '<strong>'.__('This Read Me Help window is draggable (top) and resizable (bottom right corner)', 'bulletproof-security').'</strong><br><br><strong>'.
79
+
80
+ __('MScan Report General Information', 'bulletproof-security').'</strong><br>'.__('After running a scan your extensive scan results data is displayed on this tab page. If you would like to save your scan results data click the Save MScan Report button. You can save up to 20 scan reports. You can view or delete scan reports on the MScan Saved Reports tab page using the MScan Saved Reports Form.', 'bulletproof-security').
81
+
82
+ '<br><br><strong>'.__('No File Hashes for This Plugin or No File Hashes for This Theme', 'bulletproof-security').'</strong><br>'.__('If you see either of these status messages under Plugin File Hashes or Theme File Hashes then go to the main MScan 2.0 tab page, click the MScan 2.0 Read Me help button and read the "Upload Plugin Zip Files" or "Upload Theme Zip Files" help section.', 'bulletproof-security');
83
+
84
+ /** MScan Saved Reports **/
85
+ $bps_modal_content4 = '<strong>'.__('This Read Me Help window is draggable (top) and resizable (bottom right corner)', 'bulletproof-security').'</strong><br><br><strong>'.
86
+
87
+ __('MScan Saved Reports General Information', 'bulletproof-security').'</strong><br>'.__('You can save up to 20 scan reports. You can view or delete scan reports. If you would like to view a saved scan report select the View Report checkbox for the scan report you would like to view and click the View|Delete Reports button. Scan report data is displayed below the MScan Saved Reports Form. If you would like to delete a saved scan report select the Delete Report checkbox for the scan report you would like to delete and click the View|Delete Reports button. Refresh/reload the MScan Saved Reports tab page when deleting scan reports to see the current MScan Saved Reports Form data.', 'bulletproof-security');
88
 
89
  ?>
admin/mscan/mscan-iframe.php ADDED
@@ -0,0 +1,356 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style>
2
+ body {background:white}
3
+ div#bps-inpage-message{display:none}
4
+ div.update-nag{display:none}
5
+ div.notice{display:none}
6
+ div#bps-status-display{display:none}
7
+ div#query-monitor-main{visibility:hidden}
8
+ div#MScan-Time-Container {z-index:999999999;position:relative;top:0px;left:0px;background-color:#fff}
9
+ div#mscantimer {z-index:999999999;color:#000;font-size:13px!important;font-weight:600!important;line-height:18px;padding:4px 0px 0px 0px;position:relative;top:0px;left:0px;}
10
+ #MscanProgressBar {z-index:999999999;position:relative;top:0px;left:0px;width:100%;height:25px;background-color:#e8e8e8;border-radius:2px;-webkit-box-shadow:inset 0 2px 3px rgba(0, 0, 0, 0.25);-moz-box-shadow:inset 0 2px 3px rgba(0, 0, 0, 0.25);box-shadow:inset 0 2px 3px rgba(0, 0, 0, 0.25);}
11
+ #MscanBar {z-index:999999999;width:0%;height:25px;font-size:12px!important;font-weight:600!important;text-align:center;line-height:25px;color:white;}
12
+ .mscan-progress-bar {z-index:999999999;width:0;height:100%;background:#0e8bcb;background:-moz-linear-gradient(top, #0e8bcb 0%, #08496b 100%);background:-webkit-gradient(linear, left top, left bottom, color-stop(0%,#0e8bcb), color-stop(100%,#08496b));background:-webkit-linear-gradient(top, #0e8bcb 0%,#08496b 100%);background:-o-linear-gradient(top, #0e8bcb 0%,#08496b 100%);background:-ms-linear-gradient(top, #0e8bcb 0%,#08496b 100%);background:linear-gradient(to bottom, #0e8bcb 0%,#08496b 100%);-webkit-transition:width 1s ease-in-out;-moz-transition:width 1s ease-in-out;-o-transition:width 1s ease-in-out;transition:width 1s ease-in-out;}
13
+
14
+ @media screen and (min-width: 280px) and (max-width: 1043px){
15
+ div#bps-status-display{display:none}
16
+ }
17
+ @media screen and (min-width: 280px) and (max-width: 960px){
18
+ div#wpadminbar{display:none}
19
+ div#adminmenu, div#adminmenu .wp-submenu, div#adminmenuback, div#adminmenuwrap{display:none}
20
+ }
21
+ </style>
22
+
23
+ <?php
24
+ // don't add any commented out CSS code in the CSS code above - The commented out code will still be processed.
25
+ // Note if someone is displaying the BPS Pro status display in BPS plugin pages only it throws off the iframe section Don't adjust for that and don't use any CSS
26
+ // because it causes other problems.
27
+
28
+ // A typical site will load wp-load.php using $wp_load_file6.
29
+ if ( ! function_exists( 'get_option' ) ) {
30
+ $wp_load_file12 = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))))))) . '/wp-load.php';
31
+ $wp_load_file11 = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))))))) . '/wp-load.php';
32
+ $wp_load_file10 = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))))) . '/wp-load.php';
33
+ $wp_load_file9 = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))))) . '/wp-load.php';
34
+ $wp_load_file8 = dirname(dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))))) . '/wp-load.php';
35
+ $wp_load_file7 = dirname(dirname(dirname(dirname(dirname(dirname(dirname(__FILE__))))))) . '/wp-load.php';
36
+ $wp_load_file6 = dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . '/wp-load.php';
37
+ $wp_load_file5 = dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/wp-load.php';
38
+ $wp_load_file4 = dirname(dirname(dirname(dirname(__FILE__)))) . '/wp-load.php';
39
+ $wp_load_file3 = dirname(dirname(dirname(__FILE__))) . '/wp-load.php';
40
+ $wp_load_file2 = dirname(dirname(__FILE__)) . '/wp-load.php';
41
+ $wp_load_file1 = dirname(__FILE__) . '/wp-load.php';
42
+
43
+ if ( file_exists( $wp_load_file12 ) ) {
44
+ require_once $wp_load_file12;
45
+ } elseif ( file_exists( $wp_load_file11 ) ) {
46
+ require_once $wp_load_file11;
47
+ } elseif ( file_exists( $wp_load_file10 ) ) {
48
+ require_once $wp_load_file10;
49
+ } elseif ( file_exists( $wp_load_file9 ) ) {
50
+ require_once $wp_load_file9;
51
+ } elseif ( file_exists( $wp_load_file8 ) ) {
52
+ require_once $wp_load_file8;
53
+ } elseif ( file_exists( $wp_load_file7 ) ) {
54
+ require_once $wp_load_file7;
55
+ } elseif ( file_exists( $wp_load_file6 ) ) {
56
+ require_once $wp_load_file6;
57
+ } elseif ( file_exists( $wp_load_file5 ) ) {
58
+ require_once $wp_load_file5;
59
+ } elseif ( file_exists( $wp_load_file4 ) ) {
60
+ require_once $wp_load_file4;
61
+ } elseif ( file_exists( $wp_load_file3 ) ) {
62
+ require_once $wp_load_file3;
63
+ } elseif ( file_exists( $wp_load_file2 ) ) {
64
+ require_once $wp_load_file2;
65
+ } elseif ( file_exists( $wp_load_file1 ) ) {
66
+ require_once $wp_load_file1;
67
+ } else {
68
+ echo '<strong><font color="#fb0101">BPS cannot find and load the WordPress wp-load.php file. MScan cannot be used on this website until that problem is fixed.</font></strong>';
69
+ exit();
70
+ }
71
+ }
72
+
73
+ // This function is executed in the js below after the actual scan has completed with MScan Status value: 3 or 5.
74
+ // IMPORTANT: Do not echo anything directly in this function. It will break the js timer.
75
+ function bpsPro_mscan_completed() {
76
+
77
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
78
+ $MScan_options = get_option('bulletproof_security_options_MScan');
79
+ $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '' : $MScan_options['mscan_max_time_limit'];
80
+ ini_set('max_execution_time', $mstime);
81
+
82
+ if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '3' || isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '5' ) {
83
+
84
+ $MScan_status_db = array(
85
+ 'bps_mscan_time_start' => $MScan_status['bps_mscan_time_start'],
86
+ 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
87
+ 'bps_mscan_time_end' => $MScan_status['bps_mscan_time_end'],
88
+ 'bps_mscan_time_remaining' => $MScan_status['bps_mscan_time_remaining'],
89
+ 'bps_mscan_status' => '4',
90
+ 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
91
+ 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
92
+ 'bps_mscan_total_website_files' => '',
93
+ 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
94
+ 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
95
+ 'bps_mscan_total_image_files' => '',
96
+ 'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
97
+ 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
98
+ 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
99
+ 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
100
+ 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
101
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
102
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
103
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
104
+ );
105
+
106
+ foreach( $MScan_status_db as $key => $value ) {
107
+ update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
108
+ }
109
+ }
110
+ }
111
+
112
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
113
+ $MScan_options = get_option('bulletproof_security_options_MScan');
114
+
115
+ $mscan_start_time = ! isset($MScan_status['bps_mscan_time_start']) ? '' : $MScan_status['bps_mscan_time_start'];
116
+ $mscan_time_stop = ! isset($MScan_status['bps_mscan_time_stop']) ? '' : $MScan_status['bps_mscan_time_stop'];
117
+ $mscan_future_time = ! isset($MScan_status['bps_mscan_time_remaining']) ? '' : $MScan_status['bps_mscan_time_remaining'];
118
+ $mscan_status = ! isset($MScan_status['bps_mscan_status']) ? '' : $MScan_status['bps_mscan_status'];
119
+ $mscan_timestamp = ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ? '' : $MScan_status['bps_mscan_last_scan_timestamp'];
120
+ $mscan_total_time = ! isset($MScan_status['bps_mscan_total_time']) ? '' : $MScan_status['bps_mscan_total_time'];
121
+ $mscan_suspect_files = ! isset($MScan_status['bps_mscan_total_suspect_files']) ? '' : $MScan_status['bps_mscan_total_suspect_files'];
122
+ $mscan_suspect_skipped_files = ! isset($MScan_status['bps_mscan_suspect_skipped_files']) ? '' : $MScan_status['bps_mscan_suspect_skipped_files'];
123
+ $mscan_suspect_db = ! isset($MScan_status['bps_mscan_total_suspect_db']) ? '' : $MScan_status['bps_mscan_total_suspect_db'];
124
+ $mscan_skipped_files = ! isset($MScan_status['bps_mscan_total_skipped_files']) ? '' : $MScan_status['bps_mscan_total_skipped_files'];
125
+
126
+ if ( isset($MScan_options['mscan_scan_skipped_files']) && $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
127
+ $mscan_total_files = $MScan_status['bps_mscan_total_skipped_files'];
128
+ $skipped_scan = 1;
129
+ } else {
130
+ $mscan_total_files = ! isset($MScan_status['bps_mscan_total_all_scannable_files']) ? '' : $MScan_status['bps_mscan_total_all_scannable_files'];
131
+ $skipped_scan = 0;
132
+ }
133
+
134
+ if ( isset($MScan_options['mscan_scan_database']) && $MScan_options['mscan_scan_database'] == 'On' ) {
135
+ $mscan_db_scan = 1;
136
+ } else {
137
+ $mscan_db_scan = 0;
138
+ }
139
+
140
+
141
+ if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '2' || isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '3' || isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '5' ) { ?>
142
+
143
+ <div id="MscanProgressBar">
144
+ <div id="MscanBar" class="mscan-progress-bar"></div>
145
+ </div>
146
+
147
+ <?php } ?>
148
+
149
+ <div id="MScan-Time-Container">
150
+ <div id="mscantimer"></div>
151
+ </div>
152
+
153
+ <script type="text/javascript">
154
+ /* <![CDATA[ */
155
+ var currentTimeI = new Date().getTime() / 1000;
156
+ var futureTimeI = <?php echo json_encode( $mscan_future_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
157
+ var scanStartI = <?php echo json_encode( $mscan_start_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
158
+ var mscanStatusI = <?php echo json_encode( $mscan_status, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
159
+ var timeStampI = <?php echo json_encode( $mscan_timestamp, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
160
+ var totalScanTimeI = <?php echo json_encode( $mscan_total_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
161
+ var totalFilesI = <?php echo json_encode( $mscan_total_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
162
+ var skippedFilesI = <?php echo json_encode( $mscan_skipped_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
163
+ var skippedScanI = <?php echo json_encode( $skipped_scan, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
164
+ var dbScanI = <?php echo json_encode( $mscan_db_scan, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
165
+ var suspectI = <?php echo json_encode( $mscan_suspect_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
166
+ var suspectSkipI = <?php echo json_encode( $mscan_suspect_skipped_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
167
+ var suspectDBI = <?php echo json_encode( $mscan_suspect_db, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
168
+
169
+ var timeRemainingI = futureTimeI - currentTimeI;
170
+ var minuteI = 60;
171
+ var hourI = 60 * 60;
172
+ var dayI = 60 * 60 * 24;
173
+ var dayFloorI = Math.floor(totalScanTimeI / dayI);
174
+ var hourFloorI = Math.floor((totalScanTimeI - dayFloorI * dayI) / hourI);
175
+ var minuteFloorI = Math.floor((totalScanTimeI - dayFloorI * dayI - hourFloorI * hourI) / minuteI);
176
+ var secondFloorI = Math.floor((totalScanTimeI - dayFloorI * dayI - hourFloorI * hourI - minuteFloorI * minuteI));
177
+ var hourFloorFI = ("0" + hourFloorI).slice(-2);
178
+ var minuteFloorFI = ("0" + minuteFloorI).slice(-2);
179
+ var secondFloorFI = ("0" + secondFloorI).slice(-2);
180
+
181
+ // 1 = On | 0 = Off or 0 in the case of Total Files or Suspect Files | blank value = 0|Off
182
+
183
+ if ( totalFilesI == "" ) {
184
+ totalFilesI = 0;
185
+ }
186
+
187
+ if ( skippedFilesI == "" ) {
188
+ skippedFilesI = 0;
189
+ }
190
+
191
+ if ( suspectI == "" ) {
192
+ suspectI = 0;
193
+ }
194
+
195
+ if ( suspectSkipI == "" ) {
196
+ suspectSkipI = 0;
197
+ }
198
+
199
+ if ( suspectDBI == "" ) {
200
+ suspectDBI = 0;
201
+ }
202
+
203
+ // This condition prevents displaying the previous scan results if the scan finishes very quickly.
204
+ if ( mscanStatusI == 4 && futureTimeI > currentTimeI ) {
205
+ document.getElementById("mscantimer").innerHTML = "The Scan Completed Before The Scan Estimate Time Finished. Reload/Refresh The MScan Page For Scan Results.<br />Note: For best scan results reload/refresh the MScan page before running a new scan.";
206
+ console.log( "Status: 4 : Future Time > Time : Scan Completed Before The Scan Estimate Time Finished" );
207
+
208
+ } else {
209
+
210
+ if ( mscanStatusI == 4 && skippedScanI == 0 ) {
211
+
212
+ if ( dbScanI == 1 ) {
213
+ document.getElementById("mscantimer").innerHTML = "Scan Completed [" + timeStampI + "] : Total Scan Time: " + hourFloorFI + ":" + minuteFloorFI + ":" + secondFloorFI + " : Total Files Scanned: " + totalFilesI + " : Skipped Files: " + skippedFilesI + " : Suspicious Files: " + suspectI + " : Suspicious DB Entries: " + suspectDBI + "<br />" + "To view the detailed Scan Report click the View Report button below. Please view the Scan Report before clicking the Suspicious Files and DB Entries accordion tabs below.";
214
+ console.log( "Status: 4 : Future Time < Time : Skipped Files: Off : DB Scan: On" );
215
+
216
+ } else {
217
+
218
+ document.getElementById("mscantimer").innerHTML = "Scan Completed [" + timeStampI + "] : Total Scan Time: " + hourFloorFI + ":" + minuteFloorFI + ":" + secondFloorFI + " : Total Files Scanned: " + totalFilesI + " : Skipped Files: " + skippedFilesI + " : Suspicious Files: " + suspectI + "<br />" + "To view the detailed Scan Report click the View Report button below. Please view the Scan Report before clicking the Suspicious Files and DB Entries accordion tabs below.";
219
+ console.log( "Status: 4 : Future Time < Time : Skipped Files: Off : DB Scan: Off" );
220
+ }
221
+ }
222
+
223
+ if ( mscanStatusI == 4 && skippedScanI == 1 ) {
224
+ document.getElementById("mscantimer").innerHTML = "Skipped File Scan Completed [" + timeStampI + "] : Total Scan Time: " + hourFloorFI + ":" + minuteFloorFI + ":" + secondFloorFI + " : Total Files Scanned: " + totalFilesI + " : Suspicious Files: " + suspectSkipI + "<br />" + "To view the detailed Scan Report click the View Report button below. Please view the Scan Report before clicking the Suspicious Files and DB Entries accordion tabs below.";
225
+ console.log( "Status: 4 : Future Time < Time : Skipped Files: On : DB Scan: NA" );
226
+ }
227
+ }
228
+
229
+ var MScan = setInterval(function(){ MScanTimer() }, 1000);
230
+
231
+ function MScanTimer() {
232
+
233
+ var currentTime = new Date().getTime() / 1000;
234
+ var futureTime = <?php echo json_encode( $mscan_future_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
235
+ var scanStart = <?php echo json_encode( $mscan_start_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
236
+ var scanStop = <?php echo json_encode( $mscan_time_stop, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
237
+ var totalFiles = <?php echo json_encode( $mscan_total_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
238
+ var mscanStatus = <?php echo json_encode( $mscan_status, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
239
+
240
+ var timeRemaining = futureTime - (currentTime - 10); // - 10 forces the scan time caculation to appear to end earlier. Just a visual gimmick.
241
+ var timeRemainingTE = futureTime - (currentTime + 30); // + 30 second countdown used in Estimated Scan Time Exceeded. Just a visual gimmick.
242
+ var timeRemainingPB = futureTime - currentTime;
243
+
244
+ var minute = 60;
245
+ var hour = 60 * 60;
246
+ var day = 60 * 60 * 24;
247
+
248
+ // Right to left direction decrease - 100% to 0% width and used in the pBarPercentWidthIncrease math below - don't comment this var out.
249
+ var pBarPercentWidthDecrease = Math.round(timeRemainingPB/(futureTime - scanStart) * 100);
250
+ // Left to right direction increase - 0% to 100% width
251
+ var pBarPercentWidthIncrease = 100 - pBarPercentWidthDecrease;
252
+
253
+ var dayFloor = Math.floor(timeRemaining / day);
254
+ var hourFloor = Math.floor((timeRemaining - dayFloor * day) / hour);
255
+ var minuteFloor = Math.floor((timeRemaining - dayFloor * day - hourFloor * hour) / minute);
256
+ var secondFloor = Math.floor((timeRemaining - dayFloor * day - hourFloor * hour - minuteFloor * minute));
257
+ var hourFloorF = ("0" + hourFloor).slice(-2);
258
+ var minuteFloorF = ("0" + minuteFloor).slice(-2);
259
+ var secondFloorF = ("0" + secondFloor).slice(-2);
260
+
261
+ var dayFloorPB = Math.floor(timeRemainingPB / day);
262
+ var hourFloorPB = Math.floor((timeRemainingPB - dayFloorPB * day) / hour);
263
+ var minuteFloorPB = Math.floor((timeRemainingPB - dayFloorPB * day - hourFloorPB * hour) / minute);
264
+ var secondFloorPB = Math.floor((timeRemainingPB - dayFloorPB * day - hourFloorPB * hour - minuteFloorPB * minute));
265
+ var hourFloorFPB = ("0" + hourFloorPB).slice(-2);
266
+ var minuteFloorFPB = ("0" + minuteFloorPB).slice(-2);
267
+ var secondFloorFPB = ("0" + secondFloorPB).slice(-2);
268
+
269
+ var dayFloorTE = Math.floor(timeRemainingTE / day);
270
+ var hourFloorTE = Math.floor((timeRemainingTE - dayFloorTE * day) / hour);
271
+ var minuteFloorTE = Math.floor((timeRemainingTE - dayFloorTE * day - hourFloorTE * hour) / minute);
272
+ var secondFloorTE = Math.floor((timeRemainingTE - dayFloorTE * day - hourFloorTE * hour - minuteFloorTE * minute));
273
+ var hourFloorFTE = ("0" + hourFloorTE).slice(-2);
274
+ var minuteFloorFTE = ("0" + minuteFloorTE).slice(-2);
275
+ var secondFloorFTE = ("0" + secondFloorTE).slice(-2);
276
+
277
+ var ScanCompleted = "<?php bpsPro_mscan_completed(); ?>";
278
+
279
+ // IMPORTANT: Reloading the page during any Progress bar conditions breaks the display of the Progress bar.
280
+ // Scan times can vary significantly depending on caching and other factors. The visual stuff is primarily for letting someone know things are still happening.
281
+ // The only time a scan will not complete successfully will be if the mscan-ajax-functions.php file functions fail for some reason. ie folder/Ownership, etc. problem.
282
+ // MScan Status 1 is set when the Start button is clicked and means the scan estimate function is being processed. Has an AJAX action.
283
+ // MScan Status 2 is set at the end of the scan estimate function and means the file scanning function and other functions are still being processed.
284
+ // MScan Status 3 is set at the end of the file scanning function and means all scanning is completed.
285
+ // MScan Status 3 Process the ScanCompleted var, which executes the PHP bpsPro_mscan_completed() function.
286
+ // MScan Status 4 is set when the MScan Stop button is clicked and on Scan Completion.
287
+ // MScan Status 4 is a "resting/completed" state that displays the scan results.
288
+ // MScan Status 5 is set when the Scan Time Estimate Tool button is clicked. Has an AJAX action. 1 > 5 > 4. No longer used.
289
+ // futureTime is the current time + the scan estimate time total (time remaining).
290
+ // A typical/average file scan range is: 3,000 to 8,000 files.
291
+
292
+ if ( futureTime > currentTime ) {
293
+
294
+ if ( mscanStatus == 1 && secondFloorF <= 10 ) {
295
+ window.location.reload(true);
296
+ console.log( "Status: 1 : Future Time > Time : secondFloor <= 10 : " + secondFloorF );
297
+ }
298
+
299
+ if ( mscanStatus == 1 && secondFloorF > 9 ) {
300
+ document.getElementById("mscantimer").innerHTML = "Calculating Scan Time: " + hourFloorF + ":" + minuteFloorF + ":" + secondFloorF + "<br />" + "You can leave the MScan page while a scan is in progress and the scan will continue until it is completed.";
301
+ console.log( "Status: 1 : Future Time > Time : Calculating Scan Time : secondFloorF > 9 : " + secondFloorF );
302
+ }
303
+
304
+ // Removing the status 5 condition: mscanStatus == 5 && totalFiles != "". Status 5 is no longer used.
305
+ if ( mscanStatus == 2 && totalFiles != "" || mscanStatus == 3 && totalFiles != "" ) {
306
+ document.getElementById("MscanBar").style.width = pBarPercentWidthIncrease + '%';
307
+ document.getElementById("MscanBar").innerHTML = pBarPercentWidthIncrease + '%';
308
+ document.getElementById("mscantimer").innerHTML = "Scan Completion Time Remaining: " + hourFloorFPB + ":" + minuteFloorFPB + ":" + secondFloorFPB + " : Scanning " + totalFiles + " Files";
309
+ console.log( "Status: 2 or 3: Future Time > Time : Total Files: not blank" );
310
+ }
311
+
312
+ // A blank value is set on MScan Start button click for the total scannable files DB option.
313
+ // Removing the status 5 condition: || mscanStatus == 5 && totalFiles == "". Status 5 is no longer used.
314
+ if ( mscanStatus == 2 && totalFiles == "" ) {
315
+ document.getElementById("MscanBar").style.width = pBarPercentWidthIncrease + '%';
316
+ document.getElementById("MscanBar").innerHTML = pBarPercentWidthIncrease + '%';
317
+ document.getElementById("mscantimer").innerHTML = "Processing Total File Count: Still scanning files: 00:00:" + secondFloorFTE;
318
+ console.log( "Status: 2: Future Time > Time : Total Files: blank" );
319
+ }
320
+
321
+ } else {
322
+
323
+ // Status 5 is no longer used
324
+ if ( mscanStatus == 5 && futureTime < currentTime ) {
325
+ window.location.reload(true);
326
+ //clearInterval(MScan); // for testing ONLY
327
+ console.log( "Status: 5 : Future Time < Time" );
328
+ }
329
+
330
+ // Clicking MScan Reset sets scanStart to a blank value. scanStop != "stop" prevents an endless reload loop from occurring.
331
+ if ( mscanStatus == 4 && futureTime < currentTime && totalFiles == "" && scanStart != "" && scanStop != "stop" ) {
332
+ window.location.reload(true);
333
+ console.log( "Status: 4 : Future Time < Time : Total Files: blank : Start: not blank : Stop: not stop" );
334
+ }
335
+
336
+ if ( mscanStatus == 3 && futureTime < currentTime ) {
337
+ window.location.reload(true);
338
+ document.getElementById("mscantimer").innerHTML = ScanCompleted;
339
+ console.log( "Status: 3 : Future Time < Time : Scan Completed" );
340
+ }
341
+
342
+ // Unfortunately, this condition goes over and under time. Not much I can do about that.
343
+ if ( mscanStatus == 2 && futureTime < currentTime ) {
344
+ window.location.reload(true);
345
+ document.getElementById("mscantimer").innerHTML = "Estimated Scan Time Exceeded: Still scanning files: 00:00:" + secondFloorFTE;
346
+ console.log( "Status: 2 : Future Time < Time : Scan Time Estimate Exceeded. Still Scanning Files." );
347
+ }
348
+
349
+ if ( mscanStatus == 1 && futureTime < currentTime || mscanStatus == 1 && secondFloorF <= 10 ) {
350
+ window.location.reload(true);
351
+ console.log( "Status: 1 : Future Time < Time : secondFloorF <= 10 : " + secondFloorF );
352
+ }
353
+ }
354
+ }
355
+ /* ]]> */
356
+ </script>
admin/mscan/mscan.php CHANGED
@@ -1,25 +1,16 @@
1
- <?php
2
- // Direct calls to this file are Forbidden when core files are not present
3
- if ( ! function_exists('add_action') ) {
4
- header('Status: 403 Forbidden');
5
- header('HTTP/1.1 403 Forbidden');
6
- exit();
7
- }
8
-
9
- if ( ! current_user_can('manage_options') ) {
10
- header('Status: 403 Forbidden');
11
- header('HTTP/1.1 403 Forbidden');
12
- exit();
13
- }
14
- ?>
15
-
16
  <!-- force the vertical scrollbar -->
17
  <style>
18
  #wpwrap{min-height:100.1%};
 
19
  </style>
20
 
21
  <div id="bps-container" class="wrap" style="margin:45px 20px 5px 0px;">
22
 
 
 
 
 
 
23
  <noscript><div id="message" class="updated" style="font-weight:600;font-size:13px;padding:5px;background-color:#dfecf2;border:1px solid #999;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><span style="color:blue">BPS Warning: JavaScript is disabled in your Browser</span><br />BPS plugin pages will not display visually correct and all BPS JavaScript functionality will not work correctly.</div></noscript>
24
 
25
  <?php
@@ -31,10 +22,13 @@ if ( ! current_user_can('manage_options') ) {
31
  echo '</div>';
32
 
33
  ## 2.9: Created new file for mscan pattern matching code. If web host deletes or nulls that file or Dir then mscan will not work, but BPS Pro will still work.
 
 
 
34
  function bpsPro_mscan_pattern_match_file_check() {
35
 
36
  $mscan_db_pattern_match_options = get_option('bulletproof_security_options_mscan_patterns');
37
-
38
  if ( ! empty($mscan_db_pattern_match_options['mscan_pattern_match_files']) ) {
39
 
40
  foreach ( $mscan_db_pattern_match_options['mscan_pattern_match_files'] as $key => $value ) {
@@ -50,23 +44,18 @@ function bpsPro_mscan_pattern_match_file_check() {
50
  if ( $inner_key == 'php_patterns' ) {
51
  $php_pattern = $inner_value;
52
  }
53
- if ( $inner_key == 'image_patterns' ) {
54
- $image_pattern = $inner_value;
55
- }
56
  }
57
  }
58
  }
59
-
60
  if ( empty($js_pattern) ) {
61
- $text = '<div style="background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:0px 5px;margin:-7px 0px 10px 0px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><font color="#fb0101">'.__('The MScan pattern matching code does not exist in your database.', 'bulletproof-security').'</font><br>'.__('Most likely your web host saw the pattern matching code in the MScan /bulletproof-security/admin/htaccess/mscan-pattern-match.php file as malicious and has either deleted the file or made the file or folder unreadable.', 'bulletproof-security').'<br>'.__('Unfortunately that means you will not be able to use MScan on your website/server/web host.', 'bulletproof-security').'</div>';
62
  echo $text;
63
  }
64
  }
65
  bpsPro_mscan_pattern_match_file_check();
66
  ?>
67
 
68
- <h2 class="bps-tab-title"><?php _e('BulletProof Security ~ MScan Malware Scanner', 'bulletproof-security'); ?></h2>
69
-
70
  <div id="message" class="updated" style="border:1px solid #999;background-color:#000;">
71
 
72
  <?php
@@ -84,7 +73,7 @@ if ( isset( $_GET['settings-updated'] ) && @$_GET['settings-updated'] == true) {
84
 
85
  $bpsSpacePop = '-------------------------------------------------------------';
86
 
87
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/admin/mscan/mscan-help-text.php' );
88
 
89
  // Replace ABSPATH = wp-content/plugins
90
  $bps_plugin_dir = str_replace( ABSPATH, '', WP_PLUGIN_DIR );
@@ -94,47 +83,139 @@ $bps_wpcontent_dir = str_replace( ABSPATH, '', WP_CONTENT_DIR );
94
  $wp_upload_dir = wp_upload_dir();
95
  $bps_uploads_dir = str_replace( ABSPATH, '', $wp_upload_dir['basedir'] );
96
 
97
- function bpsPro_mscan_openbasedir_check() {
 
98
 
99
- $open_basedir = ini_get('open_basedir');
100
 
101
- if ( $open_basedir != '' ) {
102
- $text = '<div style="background-color:#dfecf2;padding:5px;margin-bottom:10px;border:1px solid #999;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><font color="blue"><strong>'.__('The open_basedir php.ini directive is enabled on your website/server. MScan scans will take 6 times longer to complete when open_basedir is enabled, the estimated scan time caculations will not be correct and the MScan Progress Bar will not be accurate when open_basedir is enabled. New estimated scan time calculations are pending in a future version of BPS to accomodate open_basedir if you would like to continue to use open_basedir. Recommendation: disable open_basedir in your server php.ini file or custom php.ini file.', 'bulletproof-security').'</strong></font></div>';
103
- echo $text;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
  }
105
  }
106
 
107
- ?>
108
 
 
109
  </div>
110
 
 
 
111
  <!-- jQuery UI Tab Menu -->
112
  <div id="bps-tabs" class="bps-menu">
113
  <div id="bpsHead"><img src="<?php echo plugins_url('/bulletproof-security/admin/images/bps-free-logo.gif'); ?>" /></div>
114
  <ul>
115
- <li><a href="#bps-tabs-1"><?php _e('MScan', 'bulletproof-security'); ?></a></li>
116
  <li><a href="#bps-tabs-2"><?php _e('MScan Log', 'bulletproof-security'); ?></a></li>
117
- <li><a href="#bps-tabs-3"><?php _e('Help &amp; FAQ', 'bulletproof-security'); ?></a></li>
 
 
118
  </ul>
119
 
120
  <div id="bps-tabs-1" class="bps-tab-page">
121
 
122
  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
123
  <tr>
124
- <td class="bps-table_title">
125
- <?php $text = '<h2>'.__('MScan ~ ', 'bulletproof-security').'<span style="font-size:.75em;">'.__('Scans website files for hacker files or code ~ Scans the WP database for hacker code.', 'bulletproof-security').'</span></h2><div class="promo-text">'.__('Want even more security protection?', 'bulletproof-security').'<br>'.__('Get real-time automated security protection that is far superior to all malware scanners: ', 'bulletproof-security').'<a href="https://affiliates.ait-pro.com/po/" target="_blank" title="ARQ IDPS">'.__('Get BPS Pro ARQ IDPS', 'bulletproof-security').'</a></div>'; echo $text;
126
-
127
- $text2 = '<div style="background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:0px 5px;margin:0px 10px 10px 0px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><font color="blue">'.__('MScan Disclaimer:', 'bulletproof-security').'</font><br>'.__('MScan is a very sensitive scanner that will detect hacker\'s code and files that other WordPress malware scanners will not detect, but unfortunately that also means that MScan will detect a lot of false-positives. The majority of things that MScan detects as suspicious are not going to be hacker\'s code or files and can be ignored using the Ignore File or Ignore DB Entry in the View|Ignore|Delete Suspicious Files and View|Ignore Suspicious DB Entries Forms below. For additional help information click this link: ', 'bulletproof-security').' <a href="https://forum.ait-pro.com/forums/topic/mscan-malware-scanner-guide/" target="_blank" title="MScan Malware Scanner Guide">'.__('MScan Malware Scanner Guide', 'bulletproof-security').'</a></div>';
128
- echo $text2;
129
- ?>
130
  </td>
131
  </tr>
132
  <tr>
133
  <td class="bps-table_cell_help">
134
 
135
- <h3 style="margin:0px 0px 10px 0px;"><?php _e('MScan', 'bulletproof-security'); ?> <button id="bps-open-modal1" class="button bps-modal-button"><?php _e('Read Me', 'bulletproof-security'); ?></button></h3>
136
 
137
- <div id="bps-modal-content1" class="bps-dialog-hide" title="<?php _e('MScan', 'bulletproof-security'); ?>">
138
  <p>
139
  <?php
140
  $text = '<strong>'.__('This Read Me Help window is draggable (top) and resizable (bottom right corner)', 'bulletproof-security').'</strong><br><br>';
@@ -144,18 +225,65 @@ function bpsPro_mscan_openbasedir_check() {
144
  ?>
145
  <strong><a href="https://forum.ait-pro.com/forums/topic/mscan-malware-scanner-guide/" title="MScan Malware Scanner Guide" target="_blank"><?php _e('MScan Malware Scanner Guide', 'bulletproof-security'); ?></a></strong><br />
146
  <strong><a href="https://forum.ait-pro.com/forums/topic/mscan-troubleshooting-questions-problems-and-code-posting/" title="MScan Troubleshooting & Code Posting" target="_blank"><?php _e('MScan Troubleshooting & Code Posting', 'bulletproof-security'); ?></a></strong><br />
147
- <strong><a href="https://forum.ait-pro.com/forums/topic/read-me-first-free/#bps-free-general-troubleshooting" title="BPS Troubleshooting Steps" target="_blank"><?php _e('BPS Troubleshooting Steps', 'bulletproof-security'); ?></a></strong><br /><br />
148
 
149
- <?php echo $bps_modal_content1; ?>
150
- </p>
151
  </div>
152
 
 
 
153
 
154
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
 
156
- // Form Processing: Delete DB Scan Data Tool Form
157
- if ( isset( $_POST['Submit-MScan-Delete-All-Scan-Data'] ) && current_user_can('manage_options') ) {
158
- check_admin_referer('bulletproof_security_mscan_delete_all_scan_data');
 
159
 
160
  $MStable_name = $wpdb->prefix . "bpspro_mscan";
161
 
@@ -179,20 +307,10 @@ function bpsPro_mscan_openbasedir_check() {
179
  UNIQUE KEY id (mscan_id)
180
  );";
181
 
182
- require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
183
  dbDelta($sql);
184
  }
185
 
186
- echo $bps_topDiv;
187
- $text = '<font color="green"><strong>'.__('The MScan Database Table: ', 'bulletproof-security').$MStable_name.__(' data has been deleted.', 'bulletproof-security').'</strong></font>';
188
- echo $text;
189
- echo $bps_bottomDiv;
190
- }
191
-
192
- // Form Processing: Delete Scan Status Tool Form
193
- if ( isset( $_POST['Submit-MScan-Delete-Status'] ) && current_user_can('manage_options') ) {
194
- check_admin_referer('bulletproof_security_mscan_delete_status');
195
-
196
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
197
 
198
  $MScan_status_db = array(
@@ -212,15 +330,34 @@ function bpsPro_mscan_openbasedir_check() {
212
  'bps_mscan_total_suspect_files' => '',
213
  'bps_mscan_suspect_skipped_files' => '',
214
  'bps_mscan_total_suspect_db' => '',
215
- 'bps_mscan_total_ignored_files' => ''
 
 
216
  );
217
 
218
  foreach( $MScan_status_db as $key => $value ) {
219
  update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
220
  }
221
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  echo $bps_topDiv;
223
- $text = '<font color="green"><strong>'.__('MScan Status option values have been deleted. The Scan Completed timestamp, Total Scan Time, Total Files Scanned, Skipped Files, Suspicious Files and Suspicious DB Entries status values have been deleted and will either display blank or 0', 'bulletproof-security').'</strong></font>';
224
  echo $text;
225
  echo $bps_bottomDiv;
226
  }
@@ -243,14 +380,16 @@ function bpsPro_mscan_openbasedir_check() {
243
  'bps_mscan_status' => '4',
244
  'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
245
  'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
246
- 'bps_mscan_total_website_files' => $MScan_status['bps_mscan_total_website_files'],
247
  'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
248
  'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
249
- 'bps_mscan_total_image_files' => $MScan_status['bps_mscan_total_image_files'],
250
  'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
251
  'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
252
  'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
253
- 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files']
 
 
254
  );
255
 
256
  foreach( $MScan_status_db as $key => $value ) {
@@ -258,61 +397,17 @@ function bpsPro_mscan_openbasedir_check() {
258
  }
259
 
260
  $mscan_scan_skipped_files_message = '';
261
- $mscan_image_files_message = '';
262
 
263
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
264
  $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. Only skipped files will be scanned.', 'bulletproof-security').'</strong></font>';
265
  }
266
 
267
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
268
- $mscan_image_files_message = '<br><font color="blue"><strong>'.__('Image file scanning is turned On. On some web hosts scanning image files will cause the scan to stop/fail.', 'bulletproof-security').'</strong></font>';
269
- }
270
-
271
  echo $bps_topDiv;
272
- $text = '<font color="green"><strong>'.__('MScan scanning has been stopped. Note: The Stop Scan button also stops the Scan Time Estimate Tool from calculating estimated scan time.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$mscan_image_files_message;
273
  echo $text;
274
  echo $bps_bottomDiv;
275
  }
276
 
277
- // Creates a Time Loop scenario if bpsPro_mscan_calculate_scan_time() function does not complete in 30 seconds.
278
- // This function serves 1 purpose only: Reset time calculation DB status value to 1 during scan time calculation to create a Time Loop/more time if needed.
279
- // This function is only executed in js when the estimated scan time has completed & when actual scan time has completed.
280
- // IMPORTANT: Do not echo anything directly in this function. It will break the js timer. Do not add any other status value conditions.
281
- function bpsPro_mscan_completed() {
282
-
283
- $MScan_status = get_option('bulletproof_security_options_MScan_status');
284
- $MScan_options = get_option('bulletproof_security_options_MScan');
285
- $mstime = $MScan_options['mscan_max_time_limit'];
286
- ini_set('max_execution_time', $mstime);
287
-
288
- if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '1' ) {
289
-
290
- $MScan_status_db = array(
291
- 'bps_mscan_time_start' => time(),
292
- 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
293
- 'bps_mscan_time_end' => time() + 30,
294
- 'bps_mscan_time_remaining' => time() + 30,
295
- 'bps_mscan_status' => '1',
296
- 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
297
- 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
298
- 'bps_mscan_total_website_files' => $MScan_status['bps_mscan_total_website_files'],
299
- 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
300
- 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
301
- 'bps_mscan_total_image_files' => $MScan_status['bps_mscan_total_image_files'],
302
- 'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
303
- 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
304
- 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
305
- 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
306
- 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
307
- 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files']
308
- );
309
-
310
- foreach( $MScan_status_db as $key => $value ) {
311
- update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
312
- }
313
- }
314
- }
315
-
316
  function bpsPro_mscan_displayed_messages() {
317
  global $bps_topDiv, $bps_bottomDiv;
318
 
@@ -320,147 +415,13 @@ global $bps_topDiv, $bps_bottomDiv;
320
  $MScan_options = get_option('bulletproof_security_options_MScan');
321
 
322
  $mscan_scan_skipped_files_message = '';
323
- $mscan_image_files_message = '';
324
 
325
  if ( isset($MScan_options['mscan_scan_skipped_files']) && $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
326
- $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. Only skipped files will be scanned.', 'bulletproof-security').'</strong></font>';
327
- }
328
-
329
- if ( isset($MScan_options['mscan_scan_images']) && $MScan_options['mscan_scan_images'] == 'On' ) {
330
- $mscan_image_files_message = '<br><font color="blue"><strong>'.__('Image file scanning is turned On. On some web hosts scanning image files will cause the scan to stop/fail.', 'bulletproof-security').'</strong></font>';
331
- }
332
-
333
- // This message is only displayed if scan time calculation takes longer than 30 seconds. ie Time Loop.
334
- // The bpsPro_mscan_completed() function is executed in js when the estimated time countdown has completed.
335
- // IMPORTANT: The Refresh button is necessary here. Do not automate this refresh/reload with js. If excessive files are attempting to be scanned then this
336
- // will be an important clue in troubleshooting problems. The User will hopefully understand that they are attempting to scan too many files at one time.
337
- // On some Browsers the Time Loop misfires randomly. It must be related to Browser cache, but all attempts to make sense of this irratic and illogical random
338
- // Browser behaviour have failed to conclusively isolate the Browser malfunction. Revisit this Twilight Zone Browser problem at a later time.
339
- if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '1' ) {
340
 
341
  echo $bps_topDiv;
342
- $text = '<font color="green"><strong>'.__('Calculating Scan Time. The default scan time calculation time of 30 seconds was exceeded. If it takes longer than 30 seconds to calculate total scan time, an additional 30 seconds will be added to the scan time calculation time until actual file scanning starts. Click the Refresh button to refresh the MScan Progress Bar if it is not automatically refreshed. If you see this message more than five times, click the Stop Scan button to stop the scan. Either you are attempting to scan too many files at one time or the scan time calculation is stuck in a time reset loop. Check your MScan Log file to see if the the estimated scan time was successfully logged.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$mscan_image_files_message.'<div class="bps-message-button" style="width:60px;"><a href="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'">'.__('Refresh', 'bulletproof-security').'</a></div>';
343
- echo $text;
344
  echo $bps_bottomDiv;
345
- }
346
-
347
- if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '2' ) {
348
-
349
- if ( isset($MScan_status['bps_mscan_total_time']) && isset($MScan_options['mscan_max_time_limit']) && $MScan_status['bps_mscan_total_time'] > $MScan_options['mscan_max_time_limit'] ) {
350
- $mscan_over_time_limit = '<br><strong><font color="#fb0101">'.__('The estimated total scan time is more than the Max Time Limit to Scan option setting time limit.', 'bulletproof-security').'</font><br>'.__('The scan will automatically end/stop when the Max Time Limit to Scan option setting time limit is reached.', 'bulletproof-security').'<br>'.__('Estimated Total Scan Time: ', 'bulletproof-security').number_format_i18n($MScan_status['bps_mscan_total_time']).'<br>'.__('Max Time Limit to Scan: ', 'bulletproof-security').number_format_i18n($MScan_options['mscan_max_time_limit']).'<br>'.__('Click the MScan Read Me help button for a recommended solution.', 'bulletproof-security').'</strong>';
351
- } else {
352
- $mscan_over_time_limit = '';
353
- }
354
-
355
- echo $bps_topDiv;
356
- $text = '<font color="green"><strong>'.__('MScan Scanning has started. You can leave the MScan page while a scan is in progress and the scan will continue until it is completed or you can open another Browser Tab/Window and leave this Browser Tab/Window open.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$mscan_image_files_message.$mscan_over_time_limit;
357
- echo $text;
358
- echo $bps_bottomDiv;
359
- }
360
-
361
- if ( isset ( $_POST['Submit-MScan-Start'] ) ) {
362
- $_POST['Submit-MScan-Start'] = true;
363
- } else {
364
- $_POST['Submit-MScan-Start'] = null;
365
- }
366
-
367
- if ( isset($_POST['Submit-MScan-Start']) && $_POST['Submit-MScan-Start'] != true && isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '3' ) {
368
-
369
- $suspect_files_message = '';
370
- $suspect_db_message = '';
371
-
372
- if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
373
-
374
- if ( $MScan_status['bps_mscan_suspect_skipped_files'] > 0 ) {
375
- $suspect_files_message = '<br><strong><font color="blue">'.__('Suspicious code or files were detected.', 'bulletproof-security').'</font><br>'.__('Click the View|Ignore|Delete Suspicious Files accordion tab to View, Ignore or Delete suspicious files. For additional help information click the MScan Read Me help button.', 'bulletproof-security').'</strong>';
376
- }
377
-
378
- } else {
379
-
380
- if ( $MScan_status['bps_mscan_total_suspect_files'] > 0 ) {
381
- $suspect_files_message = '<br><strong><font color="blue">'.__('Suspicious code or files were detected.', 'bulletproof-security').'</font><br>'.__('Click the View|Ignore|Delete Suspicious Files accordion tab to View, Ignore or Delete suspicious files. For additional help information click the MScan Read Me help button.', 'bulletproof-security').'</strong>';
382
- }
383
-
384
- if ( $MScan_options['mscan_scan_database'] == 'On' && $MScan_status['bps_mscan_total_suspect_db'] > 0 ) {
385
- $suspect_db_message = '<br><strong><font color="blue">'.__('Suspicious code was detected in your database.', 'bulletproof-security').'</font><br>'.__('Click the View|Ignore Suspicious DB Entries accordion tab to view and ignore suspicious db entries. For additional help information click the MScan Read Me help button.', 'bulletproof-security').'</strong>';
386
- }
387
- }
388
-
389
- echo $bps_topDiv;
390
- $text = '<font color="green"><strong>'.__('MScan Scan has completed. To view extensive details of all scanning phases view the MScan Log file.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$suspect_files_message.$suspect_db_message;
391
- echo $text;
392
- echo $bps_bottomDiv;
393
-
394
- $MScan_status = get_option('bulletproof_security_options_MScan_status');
395
-
396
- $MScan_status_db = array(
397
- 'bps_mscan_time_start' => $MScan_status['bps_mscan_time_start'],
398
- 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
399
- 'bps_mscan_time_end' => $MScan_status['bps_mscan_time_end'],
400
- 'bps_mscan_time_remaining' => $MScan_status['bps_mscan_time_remaining'],
401
- 'bps_mscan_status' => '4',
402
- 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
403
- 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
404
- 'bps_mscan_total_website_files' => $MScan_status['bps_mscan_total_website_files'],
405
- 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
406
- 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
407
- 'bps_mscan_total_image_files' => $MScan_status['bps_mscan_total_image_files'],
408
- 'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
409
- 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
410
- 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
411
- 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
412
- 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
413
- 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files']
414
- );
415
-
416
- foreach( $MScan_status_db as $key => $value ) {
417
- update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
418
- }
419
- }
420
-
421
- if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '5' ) {
422
-
423
- $MScan_status = get_option('bulletproof_security_options_MScan_status');
424
-
425
- $mscan_scan_skipped_files_message = '';
426
- $mscan_image_files_message = '';
427
-
428
- if ( isset($MScan_options['mscan_scan_skipped_files']) && $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
429
- $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. The scan time estimate is for scanning skipped files only.', 'bulletproof-security').'</strong></font>';
430
- }
431
-
432
- if ( isset($MScan_options['mscan_scan_images']) && $MScan_options['mscan_scan_images'] == 'On' ) {
433
- $mscan_image_files_message = '<br><font color="blue"><strong>'.__('Image file scanning is turned On. On some web hosts scanning image files will cause the scan to stop/fail.', 'bulletproof-security').'</strong></font>';
434
- }
435
-
436
- echo $bps_topDiv;
437
- $text = '<strong><font color="green">'.__('The total estimated time of an actual scan based on your MScan option settings is: ', 'bulletproof-security').'<span style="color:blue">'.number_format_i18n($MScan_status['bps_mscan_total_time']).'</span> '.__('Seconds. The MScan Log file contains extensive details about the estimated scan time. Note: The Scan Time Estimate Tool does not affect or change any previous scan results except for the Total Scan Time, which will be changed to the estimated scan time.', 'bulletproof-security').'</font></strong>'.$mscan_scan_skipped_files_message.$mscan_image_files_message;
438
- echo $text;
439
- echo $bps_bottomDiv;
440
-
441
- $MScan_status_db = array(
442
- 'bps_mscan_time_start' => $MScan_status['bps_mscan_time_start'],
443
- 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
444
- 'bps_mscan_time_end' => $MScan_status['bps_mscan_time_end'],
445
- 'bps_mscan_time_remaining' => $MScan_status['bps_mscan_time_remaining'],
446
- 'bps_mscan_status' => '4',
447
- 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
448
- 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
449
- 'bps_mscan_total_website_files' => $MScan_status['bps_mscan_total_website_files'],
450
- 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
451
- 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
452
- 'bps_mscan_total_image_files' => $MScan_status['bps_mscan_total_image_files'],
453
- 'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
454
- 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
455
- 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
456
- 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
457
- 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
458
- 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files']
459
- );
460
-
461
- foreach( $MScan_status_db as $key => $value ) {
462
- update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
463
- }
464
  }
465
  }
466
 
@@ -477,57 +438,42 @@ bpsPro_mscan_displayed_messages();
477
 
478
  $bps_mscan_last_scan_timestamp = ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ? '' : $MScan_status['bps_mscan_last_scan_timestamp'];
479
  $bps_mscan_total_time = ! isset($MScan_status['bps_mscan_total_time']) ? '' : $MScan_status['bps_mscan_total_time'];
480
- $bps_mscan_total_website_files = ! isset($MScan_status['bps_mscan_total_website_files']) ? '' : $MScan_status['bps_mscan_total_website_files'];
481
  $bps_mscan_total_wp_core_files = ! isset($MScan_status['bps_mscan_total_wp_core_files']) ? '' : $MScan_status['bps_mscan_total_wp_core_files'];
482
  $bps_mscan_total_non_image_files = ! isset($MScan_status['bps_mscan_total_non_image_files']) ? '' : $MScan_status['bps_mscan_total_non_image_files'];
483
- $bps_mscan_total_image_files = ! isset($MScan_status['bps_mscan_total_image_files']) ? '' : $MScan_status['bps_mscan_total_image_files'];
484
- $bps_mscan_total_all_scannable_files = ! isset($MScan_status['bps_mscan_total_all_scannable_files']) ? '' : $MScan_status['bps_mscan_total_all_scannable_files'];
485
  $bps_mscan_total_skipped_files = ! isset($MScan_status['bps_mscan_total_skipped_files']) ? '' : $MScan_status['bps_mscan_total_skipped_files'];
486
  $bps_mscan_total_suspect_files = ! isset($MScan_status['bps_mscan_total_suspect_files']) ? '' : $MScan_status['bps_mscan_total_suspect_files'];
487
  $bps_mscan_suspect_skipped_files = ! isset($MScan_status['bps_mscan_suspect_skipped_files']) ? '' : $MScan_status['bps_mscan_suspect_skipped_files'];
488
  $bps_mscan_total_suspect_db = ! isset($MScan_status['bps_mscan_total_suspect_db']) ? '' : $MScan_status['bps_mscan_total_suspect_db'];
489
  $bps_mscan_total_ignored_files = ! isset($MScan_status['bps_mscan_total_ignored_files']) ? '' : $MScan_status['bps_mscan_total_ignored_files'];
 
 
490
 
491
  $MScan_status_db = array(
492
  'bps_mscan_time_start' => time(),
493
  'bps_mscan_time_stop' => '',
494
- 'bps_mscan_time_end' => time() + 30,
495
- 'bps_mscan_time_remaining' => time() + 30,
496
  'bps_mscan_status' => '1',
497
  'bps_mscan_last_scan_timestamp' => $bps_mscan_last_scan_timestamp,
498
  'bps_mscan_total_time' => $bps_mscan_total_time,
499
- 'bps_mscan_total_website_files' => $bps_mscan_total_website_files,
500
  'bps_mscan_total_wp_core_files' => $bps_mscan_total_wp_core_files,
501
  'bps_mscan_total_non_image_files' => $bps_mscan_total_non_image_files,
502
- 'bps_mscan_total_image_files' => $bps_mscan_total_image_files,
503
- 'bps_mscan_total_all_scannable_files' => $bps_mscan_total_all_scannable_files,
504
  'bps_mscan_total_skipped_files' => $bps_mscan_total_skipped_files,
505
  'bps_mscan_total_suspect_files' => $bps_mscan_total_suspect_files,
506
  'bps_mscan_suspect_skipped_files' => $bps_mscan_suspect_skipped_files,
507
  'bps_mscan_total_suspect_db' => $bps_mscan_total_suspect_db,
508
- 'bps_mscan_total_ignored_files' => $bps_mscan_total_ignored_files
 
 
509
  );
510
 
511
  foreach( $MScan_status_db as $key => $value ) {
512
  update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
513
  }
514
-
515
- $mscan_scan_skipped_files_message = '';
516
- $mscan_image_files_message = '';
517
-
518
- if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
519
- $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. The scan time estimate will be for scanning skipped files only.', 'bulletproof-security').'</strong></font>';
520
- }
521
-
522
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
523
- $mscan_image_files_message = '<br><font color="blue"><strong>'.__('Image file scanning is turned On. On some web hosts scanning image files will cause the scan to stop/fail.', 'bulletproof-security').'</strong></font>';
524
- }
525
-
526
- echo $bps_topDiv;
527
- $text = '<font color="green"><strong>'.__('Calculating Estimated Scan Time. Notes: The Scan Time Estimate Tool does not affect or change any previous scan results except for the Total Scan Time, which will be changed to the estimated scan time. If the scan time estimate hangs or is taking too long click the Stop Scan button to stop calculating the estimated scan time.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$mscan_image_files_message;
528
- echo $text;
529
- echo $bps_bottomDiv;
530
- }
531
 
532
  // Form Processing: MScan Start
533
  if ( isset( $_POST['Submit-MScan-Start'] ) && current_user_can('manage_options') ) {
@@ -536,227 +482,100 @@ bpsPro_mscan_displayed_messages();
536
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
537
  $MScan_options = get_option('bulletproof_security_options_MScan');
538
  $mstime = $MScan_options['mscan_max_time_limit'];
539
- ini_set('max_execution_time', $mstime);
540
 
 
541
  $bps_mscan_last_scan_timestamp = ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ? '' : $MScan_status['bps_mscan_last_scan_timestamp'];
542
  $bps_mscan_total_time = ! isset($MScan_status['bps_mscan_total_time']) ? '' : $MScan_status['bps_mscan_total_time'];
543
- $bps_mscan_total_website_files = ! isset($MScan_status['bps_mscan_total_website_files']) ? '' : $MScan_status['bps_mscan_total_website_files'];
544
  $bps_mscan_total_wp_core_files = ! isset($MScan_status['bps_mscan_total_wp_core_files']) ? '' : $MScan_status['bps_mscan_total_wp_core_files'];
545
  $bps_mscan_total_non_image_files = ! isset($MScan_status['bps_mscan_total_non_image_files']) ? '' : $MScan_status['bps_mscan_total_non_image_files'];
546
- $bps_mscan_total_image_files = ! isset($MScan_status['bps_mscan_total_image_files']) ? '' : $MScan_status['bps_mscan_total_image_files'];
547
- $bps_mscan_total_all_scannable_files = ! isset($MScan_status['bps_mscan_total_all_scannable_files']) ? '' : $MScan_status['bps_mscan_total_all_scannable_files'];
548
  $bps_mscan_total_skipped_files = ! isset($MScan_status['bps_mscan_total_skipped_files']) ? '' : $MScan_status['bps_mscan_total_skipped_files'];
549
  $bps_mscan_total_suspect_files = ! isset($MScan_status['bps_mscan_total_suspect_files']) ? '' : $MScan_status['bps_mscan_total_suspect_files'];
550
  $bps_mscan_suspect_skipped_files = ! isset($MScan_status['bps_mscan_suspect_skipped_files']) ? '' : $MScan_status['bps_mscan_suspect_skipped_files'];
551
  $bps_mscan_total_suspect_db = ! isset($MScan_status['bps_mscan_total_suspect_db']) ? '' : $MScan_status['bps_mscan_total_suspect_db'];
552
  $bps_mscan_total_ignored_files = ! isset($MScan_status['bps_mscan_total_ignored_files']) ? '' : $MScan_status['bps_mscan_total_ignored_files'];
 
 
553
 
554
  $MScan_status_db = array(
555
- 'bps_mscan_time_start' => time(),
556
  'bps_mscan_time_stop' => '',
557
- 'bps_mscan_time_end' => time() + 30,
558
- 'bps_mscan_time_remaining' => time() + 30,
559
- 'bps_mscan_status' => '1',
560
  'bps_mscan_last_scan_timestamp' => $bps_mscan_last_scan_timestamp,
561
  'bps_mscan_total_time' => $bps_mscan_total_time,
562
- 'bps_mscan_total_website_files' => $bps_mscan_total_website_files,
563
  'bps_mscan_total_wp_core_files' => $bps_mscan_total_wp_core_files,
564
  'bps_mscan_total_non_image_files' => $bps_mscan_total_non_image_files,
565
- 'bps_mscan_total_image_files' => $bps_mscan_total_image_files,
566
- 'bps_mscan_total_all_scannable_files' => $bps_mscan_total_all_scannable_files,
567
  'bps_mscan_total_skipped_files' => $bps_mscan_total_skipped_files,
568
  'bps_mscan_total_suspect_files' => $bps_mscan_total_suspect_files,
569
  'bps_mscan_suspect_skipped_files' => $bps_mscan_suspect_skipped_files,
570
  'bps_mscan_total_suspect_db' => $bps_mscan_total_suspect_db,
571
- 'bps_mscan_total_ignored_files' => $bps_mscan_total_ignored_files
 
 
572
  );
573
 
574
  foreach( $MScan_status_db as $key => $value ) {
575
  update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
576
  }
577
 
578
- $mscan_scan_skipped_files_message = '';
579
-
580
- if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
581
- $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. Only skipped files will be scanned.', 'bulletproof-security').'</strong></font>';
 
582
  }
583
-
584
- echo $bps_topDiv;
585
- $text = '<font color="green"><strong>'.__('Calculating Scan Time. You can leave the MScan page while a scan is in progress and the scan will continue until it is completed or you can open another Browser Tab/Window and leave this Browser Tab/Window open.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message;
586
- echo $text;
587
- echo $bps_bottomDiv;
588
- }
589
-
590
- $MScan_status = get_option('bulletproof_security_options_MScan_status');
591
- $MScan_options = get_option('bulletproof_security_options_MScan');
592
-
593
- $mscan_start_time = ! isset($MScan_status['bps_mscan_time_start']) ? '' : $MScan_status['bps_mscan_time_start'];
594
- $mscan_future_time = ! isset($MScan_status['bps_mscan_time_remaining']) ? '' : $MScan_status['bps_mscan_time_remaining'];
595
- $mscan_status = ! isset($MScan_status['bps_mscan_status']) ? '' : $MScan_status['bps_mscan_status'];
596
- $mscan_timestamp = ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ? '' : $MScan_status['bps_mscan_last_scan_timestamp'];
597
- $mscan_total_time = ! isset($MScan_status['bps_mscan_total_time']) ? '' : $MScan_status['bps_mscan_total_time'];
598
- $mscan_suspect_files = ! isset($MScan_status['bps_mscan_total_suspect_files']) ? '' : $MScan_status['bps_mscan_total_suspect_files'];
599
- $mscan_suspect_skipped_files = ! isset($MScan_status['bps_mscan_suspect_skipped_files']) ? '' : $MScan_status['bps_mscan_suspect_skipped_files'];
600
- $mscan_suspect_db = ! isset($MScan_status['bps_mscan_total_suspect_db']) ? '' : $MScan_status['bps_mscan_total_suspect_db'];
601
- $mscan_skipped_files = ! isset($MScan_status['bps_mscan_total_skipped_files']) ? '' : $MScan_status['bps_mscan_total_skipped_files'];
602
-
603
- if ( isset($MScan_options['mscan_scan_skipped_files']) && $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
604
- $mscan_total_files = $MScan_status['bps_mscan_total_skipped_files'];
605
- $skipped_scan = 1;
606
- } else {
607
- $mscan_total_files = ! isset($MScan_status['bps_mscan_total_all_scannable_files']) ? '' : $MScan_status['bps_mscan_total_all_scannable_files'];
608
- $skipped_scan = 0;
609
  }
610
 
611
- if ( isset($MScan_options['mscan_scan_database']) && $MScan_options['mscan_scan_database'] == 'On' ) {
612
- $mscan_db_scan = 1;
613
- } else {
614
- $mscan_db_scan = 0;
 
615
  }
 
616
 
617
- if ( isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '1' || isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '2' || isset($MScan_status['bps_mscan_status']) && $MScan_status['bps_mscan_status'] == '3' ) { ?>
618
-
619
- <div id="MscanProgressBar">
620
- <div id="MscanBar" class="mscan-progress-bar"></div>
621
- </div>
622
-
623
- <?php } ?>
624
-
625
- <div id="MScan-Time-Container">
626
- <div id="mscantimer"></div>
627
- </div>
628
-
629
- <script type="text/javascript">
630
- /* <![CDATA[ */
631
- var mscanStatusI = <?php echo json_encode( $mscan_status, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
632
- var timeStampI = <?php echo json_encode( $mscan_timestamp, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
633
- var totalScanTimeI = <?php echo json_encode( $mscan_total_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
634
- var totalFilesI = <?php echo json_encode( $mscan_total_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
635
- var skippedFilesI = <?php echo json_encode( $mscan_skipped_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
636
- var skippedScanI = <?php echo json_encode( $skipped_scan, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
637
- var dbScanI = <?php echo json_encode( $mscan_db_scan, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
638
- var suspectI = <?php echo json_encode( $mscan_suspect_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
639
- var suspectSkipI = <?php echo json_encode( $mscan_suspect_skipped_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
640
- var suspectDBI = <?php echo json_encode( $mscan_suspect_db, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
641
-
642
- var minuteI = 60;
643
- var hourI = 60 * 60;
644
- var dayI = 60 * 60 * 24;
645
- var dayFloorI = Math.floor(totalScanTimeI / dayI);
646
- var hourFloorI = Math.floor((totalScanTimeI - dayFloorI * dayI) / hourI);
647
- var minuteFloorI = Math.floor((totalScanTimeI - dayFloorI * dayI - hourFloorI * hourI) / minuteI);
648
- var secondFloorI = Math.floor((totalScanTimeI - dayFloorI * dayI - hourFloorI * hourI - minuteFloorI * minuteI));
649
- var hourFloorFI = ("0" + hourFloorI).slice(-2);
650
- var minuteFloorFI = ("0" + minuteFloorI).slice(-2);
651
- var secondFloorFI = ("0" + secondFloorI).slice(-2);
652
-
653
- if ( totalFilesI == "" ) {
654
- totalFilesI = 0;
655
- }
656
 
657
- if ( skippedFilesI == "" ) {
658
- skippedFilesI = 0;
659
- }
660
-
661
- if ( suspectI == "" ) {
662
- suspectI = 0;
663
- }
664
-
665
- if ( suspectSkipI == "" ) {
666
- suspectSkipI = 0;
667
- }
668
-
669
- if ( suspectDBI == "" ) {
670
- suspectDBI = 0;
671
- }
672
-
673
- if ( mscanStatusI == 4 && skippedScanI == 0 ) {
674
-
675
- if ( dbScanI == 1 ) {
676
- document.getElementById("mscantimer").innerHTML = "Scan Completed [" + timeStampI + "] : Total Scan Time: " + hourFloorFI + ":" + minuteFloorFI + ":" + secondFloorFI + " : Total Files Scanned: " + totalFilesI + " : Skipped Files: " + skippedFilesI + " : Suspicious Files: " + suspectI + " : Suspicious DB Entries: " + suspectDBI;
677
- } else {
678
- document.getElementById("mscantimer").innerHTML = "Scan Completed [" + timeStampI + "] : Total Scan Time: " + hourFloorFI + ":" + minuteFloorFI + ":" + secondFloorFI + " : Total Files Scanned: " + totalFilesI + " : Skipped Files: " + skippedFilesI + " : Suspicious Files: " + suspectI;
679
- }
680
- }
681
-
682
- if ( mscanStatusI == 4 && skippedScanI == 1 ) {
683
- document.getElementById("mscantimer").innerHTML = "Skipped File Scan Completed [" + timeStampI + "] : Total Scan Time: " + hourFloorFI + ":" + minuteFloorFI + ":" + secondFloorFI + " : Total Files Scanned: " + totalFilesI + " : Suspicious Files: " + suspectSkipI;
684
- }
685
-
686
- var MScan = setInterval(function(){ MScanTimer() }, 1000);
687
-
688
- function MScanTimer() {
689
-
690
- var currentTime = new Date().getTime() / 1000;
691
- var futureTime = <?php echo json_encode( $mscan_future_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
692
- var scanStart = <?php echo json_encode( $mscan_start_time, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
693
- var mscanStatus = <?php echo json_encode( $mscan_status, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
694
- var totalFiles = <?php echo json_encode( $mscan_total_files, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ); ?>;
695
- var timeRemaining = futureTime - currentTime;
696
- var minute = 60;
697
- var hour = 60 * 60;
698
- var day = 60 * 60 * 24;
699
- // Right to left direction decrease - 100% to 0% width
700
- var pBarPercentWidthDecrease = Math.round(timeRemaining/(futureTime - scanStart) * 100);
701
- // Left to right direction increase - 0% to 100% width
702
- var pBarPercentWidthIncrease = 100 - pBarPercentWidthDecrease;
703
- var dayFloor = Math.floor(timeRemaining / day);
704
- var hourFloor = Math.floor((timeRemaining - dayFloor * day) / hour);
705
- var minuteFloor = Math.floor((timeRemaining - dayFloor * day - hourFloor * hour) / minute);
706
- var secondFloor = Math.floor((timeRemaining - dayFloor * day - hourFloor * hour - minuteFloor * minute));
707
- var hourFloorF = ("0" + hourFloor).slice(-2);
708
- var minuteFloorF = ("0" + minuteFloor).slice(-2);
709
- var secondFloorF = ("0" + secondFloor).slice(-2);
710
- var ScanCompleted = "<?php bpsPro_mscan_completed(); ?>";
711
-
712
- if (secondFloor <= 0 && minuteFloor <= 0 && hourFloor <= 0 ) {
713
- window.location.reload(true);
714
- document.getElementById("mscantimer").innerHTML = ScanCompleted;
715
- clearInterval(MScan);
716
-
717
- } else {
718
-
719
- if (futureTime > currentTime) {
720
-
721
- if ( mscanStatus == 1 ) {
722
- document.getElementById("mscantimer").innerHTML = "Calculating Scan Time: " + hourFloorF + ":" + minuteFloorF + ":" + secondFloorF;
723
- document.getElementById("MscanBar").style.width = pBarPercentWidthDecrease + '%';
724
- document.getElementById("MscanBar").innerHTML = pBarPercentWidthDecrease + '%';
725
- }
726
-
727
- if ( mscanStatus == 2 || mscanStatus == 3 ) {
728
- document.getElementById("mscantimer").innerHTML = "Scan Completion Time Remaining: " + hourFloorF + ":" + minuteFloorF + ":" + secondFloorF + " : Scanning " + totalFiles + " Files";
729
- document.getElementById("MscanBar").style.width = pBarPercentWidthIncrease + '%';
730
- document.getElementById("MscanBar").innerHTML = pBarPercentWidthIncrease + '%';
731
- }
732
- }
733
- }
734
- }
735
- /* ]]> */
736
- </script>
737
-
738
- <div id="mscan-start" style="float:left;margin-right:20px">
739
  <form name="MScanStart" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post">
740
  <?php wp_nonce_field('bulletproof_security_mscan_start'); ?>
741
- <input type="submit" id="bps-mscan-start-button" name="Submit-MScan-Start" style="margin:10px 0px 10px 0px;" value="<?php esc_attr_e('Start Scan', 'bulletproof-security') ?>" class="button bps-button" onclick="return confirm('<?php $text = __('Click OK to start scanning or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
742
  </form>
743
- </div>
744
-
745
- <div id="mscan-stop">
746
  <form name="MScanStop" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post">
747
  <?php wp_nonce_field('bulletproof_security_mscan_stop'); ?>
748
- <input type="submit" id="bps-mscan-stop-button" name="Submit-MScan-Stop" style="margin:10px 0px 10px 0px;" value="<?php esc_attr_e('Stop Scan', 'bulletproof-security') ?>" class="button bps-button" onclick="return confirm('<?php $text = __('Click OK to stop scanning or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
 
 
 
 
 
 
 
 
 
 
 
 
749
  </form>
 
 
 
750
  </div>
751
 
752
- <?php bpsPro_mscan_openbasedir_check(); ?>
753
-
754
  <div id="bps-accordion-1" class="bps-accordion-main-2" style="margin:0px 0px 20px 0px;">
755
  <h3 id="mscan-accordion-1"><?php _e('MScan Options & Tools', 'bulletproof-security'); ?></h3>
756
  <div id="mscan-accordion-inner">
757
 
758
  <?php
759
-
760
  // Form Processing: MScan Options Form
761
  // Important: This Form processing code MUST be above the Form & bpsPro_save_mscan_options() function so that new DB option values are current.
762
  if ( isset( $_POST['Submit-MScan-Options'] ) && current_user_can('manage_options') ) {
@@ -779,14 +598,19 @@ if ( isset( $_POST['Submit-MScan-Options'] ) && current_user_can('manage_options
779
  }
780
  }
781
 
782
- $raw_source = $_SERVER['DOCUMENT_ROOT'];
783
- $source = realpath($raw_source);
 
 
 
784
 
785
- if ( is_dir($source) ) {
 
786
 
 
 
787
  $iterator = new DirectoryIterator($source);
788
- $dir_array = array();
789
-
790
  foreach ( $iterator as $files ) {
791
  try {
792
  if ( $files->isDir() && ! $files->isDot() ) {
@@ -796,46 +620,77 @@ if ( isset( $_POST['Submit-MScan-Options'] ) && current_user_can('manage_options
796
  }
797
  }
798
  } catch (RuntimeException $e) {
799
- // pending error message or log entry after Beta Testing is completed
800
  }
801
  }
 
802
 
803
- $dir_flip = array_flip($dir_array);
 
804
 
805
- // replace values in the flipped array with blank values.
806
- $mscan_actual_dirs = array();
807
-
808
- foreach ( $dir_flip as $key => $value ) {
809
- $mscan_actual_dirs[$key] = preg_replace( '/\d/', "", $value );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
810
  }
811
-
812
- // get dirs that do not exist in the bps_mscan_dirs db option. ie an unchecked form checkbox.
813
- $mscan_diff_key_dir = array_diff_key( $mscan_actual_dirs, $mscan_dirs_checked );
814
 
815
- // merge checked form checkboxes and dir array with blank values
816
- $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_checked );
817
- ksort($mscan_array_merge);
818
-
 
 
 
 
 
 
819
  }
 
 
 
 
 
 
 
 
820
  break;
821
  }
822
 
823
- // Add an addition newline for: mscan_exclude_tmp_files so the last file is included in the array
824
  // when using explode()
825
  $mscan_exclude_tmp_files = $_POST['mscan_exclude_tmp_files'] . "\n";
826
  $mscan_exclude_tmp_files = preg_replace("/(\n\n|\n\n\n|\n\n\n\n)/", "\n", $mscan_exclude_tmp_files);
827
-
828
  $MS_Options = array(
829
  'bps_mscan_dirs' => $mscan_array_merge,
830
  'mscan_max_file_size' => esc_html($_POST['mscan_max_file_size']),
831
  'mscan_max_time_limit' => esc_html($_POST['mscan_max_time_limit']),
832
  'mscan_scan_database' => $_POST['mscan_scan_database_select'],
833
- 'mscan_scan_images' => $_POST['mscan_scan_images_select'],
834
  'mscan_scan_skipped_files' => $_POST['mscan_scan_skipped_files_select'],
835
  'mscan_scan_delete_tmp_files' => $_POST['mscan_scan_delete_tmp_files_select'],
836
  'mscan_scan_frequency' => 'Off',
837
  'mscan_exclude_dirs' => $_POST['mscan_exclude_dirs'],
838
- 'mscan_exclude_tmp_files' => $mscan_exclude_tmp_files
 
839
  );
840
 
841
  foreach( $MS_Options as $key => $value ) {
@@ -845,7 +700,6 @@ if ( isset( $_POST['Submit-MScan-Options'] ) && current_user_can('manage_options
845
  $MScan_options = get_option('bulletproof_security_options_MScan');
846
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
847
  $mscan_scan_skipped_files_message = '';
848
- $mscan_image_files_message = '';
849
  $mscan_scan_delete_tmp_files_message = '';
850
 
851
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' && $MScan_status['bps_mscan_total_skipped_files'] > 0 ) {
@@ -856,32 +710,34 @@ if ( isset( $_POST['Submit-MScan-Options'] ) && current_user_can('manage_options
856
  $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. There are no skipped files to be scanned. Either there really are not any skipped files to scan or you have not run a regular scan yet with the Skipped File Scan option turned Off.', 'bulletproof-security').'</strong></font>';
857
  }
858
 
859
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
860
- $mscan_image_files_message = '<br><font color="blue"><strong>'.__('Image file scanning is turned On. On some web hosts scanning image files will cause the scan to stop/fail.', 'bulletproof-security').'</strong></font>';
861
- }
862
-
863
  if ( $MScan_options['mscan_scan_delete_tmp_files'] == 'On' ) {
864
- $mscan_scan_delete_tmp_files_message = '<br><strong><font color="#fb0101">'.__('Warning: ', 'bulletproof-security').'</font>'.__('On some web hosts (Known host issues: SiteGround, Cyon) turning On the "Automatically Delete /tmp Files" option setting will cause your website/server to crash. If your website/server does crash contact your web host support folks, tell them that you deleted /tmp files and your website/server has crashed.', 'bulletproof-security').'</strong>';
865
  }
866
 
867
  echo $bps_topDiv;
868
- $text = '<font color="green"><strong>'.__('MScan Options saved.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$mscan_image_files_message.$mscan_scan_delete_tmp_files_message;
869
  echo $text;
870
  echo $bps_bottomDiv;
871
  }
872
 
873
  // Get any new dirs that have been created and remove any old dirs from the bps_mscan_dirs db option.
874
  // Update the bps_mscan_dirs db option for use in the MscanOptions Form.
 
875
  function bpsPro_save_mscan_options() {
876
 
877
- $raw_source = $_SERVER['DOCUMENT_ROOT'];
878
- $source = realpath($raw_source);
879
-
 
 
 
 
 
 
 
880
  if ( is_dir($source) ) {
881
 
882
- $MScan_options = get_option('bulletproof_security_options_MScan');
883
  $iterator = new DirectoryIterator($source);
884
- $dir_array = array();
885
 
886
  foreach ( $iterator as $files ) {
887
  try {
@@ -892,98 +748,154 @@ function bpsPro_save_mscan_options() {
892
  }
893
  }
894
  } catch (RuntimeException $e) {
895
- // pending error message or log entry after Beta Testing is completed
896
  }
897
  }
 
898
 
899
- $dir_flip = array_flip($dir_array);
900
-
901
- // replace values in the flipped array, good for bulk replacing all values. ie all dirs found.
902
- $mscan_actual_dirs = array();
903
-
904
- foreach ( $dir_flip as $key => $value ) {
905
- $mscan_actual_dirs[$key] = preg_replace( '/\d+/', "1", $value );
906
- }
907
-
908
- // Only processed once on first MScan page load
909
- if ( empty($MScan_options['bps_mscan_dirs']) ) {
910
-
911
- $mscan_max_file_size = isset($MScan_options['mscan_max_file_size']) ? $MScan_options['mscan_max_file_size'] : '400';
912
- $mscan_max_time_limit = isset($MScan_options['mscan_max_time_limit']) ? $MScan_options['mscan_max_time_limit'] : '300';
913
- $mscan_scan_database = isset($MScan_options['mscan_scan_database']) ? $MScan_options['mscan_scan_database'] : 'On';
914
- $mscan_scan_images = isset($MScan_options['mscan_scan_images']) ? $MScan_options['mscan_scan_images'] : 'Off';
915
- $mscan_scan_skipped_files = isset($MScan_options['mscan_scan_skipped_files']) ? $MScan_options['mscan_scan_skipped_files'] : 'Off';
916
- $mscan_scan_delete_tmp_files = isset($MScan_options['mscan_scan_delete_tmp_files']) ? $MScan_options['mscan_scan_delete_tmp_files'] : 'Off';
917
- $mscan_scan_frequency = isset($MScan_options['mscan_scan_frequency']) ? $MScan_options['mscan_scan_frequency'] : 'Off';
918
- $mscan_exclude_dirs = isset($MScan_options['mscan_exclude_dirs']) ? $MScan_options['mscan_exclude_dirs'] : '';
919
- $mscan_exclude_tmp_files = isset($MScan_options['mscan_exclude_tmp_files']) ? $MScan_options['mscan_exclude_tmp_files'] : '';
920
-
921
- $MS_Options = array(
922
- 'bps_mscan_dirs' => $mscan_actual_dirs,
923
- 'mscan_max_file_size' => $mscan_max_file_size,
924
- 'mscan_max_time_limit' => $mscan_max_time_limit,
925
- 'mscan_scan_database' => $mscan_scan_database,
926
- 'mscan_scan_images' => $mscan_scan_images,
927
- 'mscan_scan_skipped_files' => $mscan_scan_skipped_files,
928
- 'mscan_scan_delete_tmp_files' => $mscan_scan_delete_tmp_files,
929
- 'mscan_scan_frequency' => $mscan_scan_frequency,
930
- 'mscan_exclude_dirs' => $mscan_exclude_dirs,
931
- 'mscan_exclude_tmp_files' => $mscan_exclude_tmp_files
932
- );
933
-
934
- foreach( $MS_Options as $key => $value ) {
935
- update_option('bulletproof_security_options_MScan', $MS_Options);
936
- }
937
-
938
- } else {
939
 
940
- $MScan_options = get_option('bulletproof_security_options_MScan');
 
 
 
 
 
 
 
 
941
 
942
- $mscan_dirs_options_inner_array = array();
943
-
944
- foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
945
- $mscan_dirs_options_inner_array[$key] = $value;
 
 
 
 
946
  }
 
 
947
 
948
- // get new dirs found that do not exist in the bps_mscan_dirs db option. ie a new dir has been created.
949
- $mscan_diff_key_dir = array_diff_key($mscan_actual_dirs, $mscan_dirs_options_inner_array);
950
-
951
- // get old dirs that still exist in the bps_mscan_dirs db option. ie a dir has been deleted.
952
- $mscan_diff_key_options = array_diff_key($mscan_dirs_options_inner_array, $dir_flip);
953
-
954
- if ( ! empty($mscan_diff_key_options) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
955
 
956
- foreach ( $mscan_diff_key_options as $key => $value ) {
957
- unset($mscan_dirs_options_inner_array[$key]);
958
- }
959
-
960
- // merge any new dirs found
961
- $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
962
- ksort($mscan_array_merge);
963
-
964
- } else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
965
 
966
- // merge any new dirs found
967
- $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
968
- ksort($mscan_array_merge);
969
- }
 
 
 
 
 
 
 
970
 
971
- $MS_Options = array(
972
- 'bps_mscan_dirs' => $mscan_array_merge,
973
- 'mscan_max_file_size' => $MScan_options['mscan_max_file_size'],
974
- 'mscan_max_time_limit' => $MScan_options['mscan_max_time_limit'],
975
- 'mscan_scan_database' => $MScan_options['mscan_scan_database'],
976
- 'mscan_scan_images' => $MScan_options['mscan_scan_images'],
977
- 'mscan_scan_skipped_files' => $MScan_options['mscan_scan_skipped_files'],
978
- 'mscan_scan_delete_tmp_files' => $MScan_options['mscan_scan_delete_tmp_files'],
979
- 'mscan_scan_frequency' => 'Off',
980
- 'mscan_exclude_dirs' => $MScan_options['mscan_exclude_dirs'],
981
- 'mscan_exclude_tmp_files' => $MScan_options['mscan_exclude_tmp_files']
982
- );
983
-
984
- foreach( $MS_Options as $key => $value ) {
985
- update_option('bulletproof_security_options_MScan', $MS_Options);
986
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
987
  }
988
  }
989
  }
@@ -991,7 +903,7 @@ function bpsPro_save_mscan_options() {
991
  bpsPro_save_mscan_options();
992
 
993
  $scrolltoExcludeDirs = isset($_REQUEST['scrolltoExcludeDirs']) ? (int) $_REQUEST['scrolltoExcludeDirs'] : 0;
994
- $scrolltoExcludeTmpFiles = isset($_REQUEST['scrolltoExcludeTmpFiles']) ? (int) $_REQUEST['scrolltoExcludeTmpFiles'] : 0;
995
 
996
  // Form: MScan Options Form
997
  echo '<form name="MscanOptions" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
@@ -1001,7 +913,7 @@ bpsPro_save_mscan_options();
1001
  echo '<table class="widefat" style="text-align:left;">';
1002
  echo '<thead>';
1003
  echo '<tr>';
1004
- echo '<th scope="col" style="width:40%;font-size:1.13em;background-color:transparent;"><strong>'.__('Hosting Account Root Folders', 'bulletproof-security').'</strong></th>';
1005
  echo '<th scope="col" style="width:30%;font-size:1.13em;background-color:transparent;"><strong>'.__('MScan Options', 'bulletproof-security').'</strong></th>';
1006
  echo '<th scope="col" style="width:30%;font-size:1.13em;background-color:transparent;"><strong>'.__('MScan Tools', 'bulletproof-security').'</strong></th>';
1007
  echo '</tr>';
@@ -1022,6 +934,9 @@ bpsPro_save_mscan_options();
1022
  echo '<tbody>';
1023
  echo '<tr>';
1024
 
 
 
 
1025
  foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
1026
 
1027
  if ( $value == '1' ) {
@@ -1029,25 +944,43 @@ bpsPro_save_mscan_options();
1029
  } else {
1030
  $checked = ( isset( $_POST['mscan[$key]'] ) ) ? $_POST['mscan[$key]'] : '';
1031
  }
1032
-
1033
- if ( ! is_readable( $_SERVER['DOCUMENT_ROOT'] . '/' . $key ) ) {
1034
  echo "<td></td>";
1035
  echo '<td>'.$key.' <strong><font color="blue">'.__('Folder is not readable', 'bulletproof-security').'</font></strong></td>';
1036
  echo '</tr>';
1037
 
1038
  } else {
1039
 
1040
- $wp_index_file = $_SERVER['DOCUMENT_ROOT'] . '/' . $key . '/index.php';
1041
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1042
  if ( file_exists($wp_index_file) ) {
1043
  $check_string = file_get_contents($wp_index_file);
1044
  }
1045
 
1046
- if ( file_exists($wp_index_file) && strpos( $check_string, "define('WP_USE_THEMES" ) ) {
 
 
1047
 
1048
- $hover_icon = '<strong><font color="black"><span class="tooltip-250-80"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('This folder contains another WordPress website. Click the MScan Read Me help button above and read the "Scanning Other WordPress Sites" help section.', 'bulletproof-security').'</span></span></font></strong><br>';
 
 
1049
 
1050
- echo "<td><input type=\"checkbox\" id=\"mscandirs\" name=\"mscan[$key]\" value=\"1\" class=\"MScanALL\" $checked /></td>";
1051
  echo '<td>'.$key.$hover_icon.'</td>';
1052
  echo '</tr>';
1053
 
@@ -1068,11 +1001,20 @@ bpsPro_save_mscan_options();
1068
  echo '<td style="border:none">';
1069
  echo '<div id="MScanOptions" style="margin:0px 0px 0px 0px;float:left;">';
1070
 
1071
- $max_file_size = ( isset( $_POST['mscan_max_file_size'] ) ) ? $_POST['mscan_max_file_size'] : '400';
1072
  $max_time_limit = ( isset( $_POST['mscan_max_time_limit'] ) ) ? $_POST['mscan_max_time_limit'] : '300';
1073
 
 
 
 
 
 
 
 
 
1074
  echo '<label for="bps-mscan-label" style="padding-right:5px">'.__('Max File Size Limit to Scan:', 'bulletproof-security').'</label>';
1075
  echo '<input type="text" name="mscan_max_file_size" class="regular-text-50-fixed" style="margin-bottom:5px" value="'; if ( isset( $_POST['mscan_max_file_size'] ) && preg_match( '/\d/', $_POST['mscan_max_file_size'] ) ) { echo esc_html($max_file_size); } else { echo esc_html(trim(stripslashes($max_file_size))); } echo '" /> KB';
 
1076
  echo '<br>';
1077
 
1078
  echo '<label for="bps-mscan-label" style="padding-right:23px">'.__('Max Time Limit to Scan:', 'bulletproof-security').'</label>';
@@ -1081,48 +1023,42 @@ bpsPro_save_mscan_options();
1081
 
1082
  echo '<label for="bps-mscan-label" style="">'.__('Exclude Individual Folders', 'bulletproof-security').'</label><strong><font color="black"><span class="tooltip-350-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('Enter one folder path per line. Include folder slashes.', 'bulletproof-security').'<br>'.__('Example:', 'bulletproof-security').'<br>/parent-folder-1/child-folder-1/<br>/parent-folder-2/child-folder-2/<br><br>'.__('Click the MScan Read Me help button for more help info.', 'bulletproof-security').'</span></span></font></strong><br>';
1083
  // trimming whitespace does not work because I am not trimming newlines or returns
1084
- echo '<textarea class="text-area-340x60" name="mscan_exclude_dirs" style="width:340px;height:60px;margin-bottom:5px" tabindex="1">'.esc_html( trim(stripslashes($MScan_options['mscan_exclude_dirs']), " \t\0\x0B") ).'</textarea>';
1085
  echo '<input type="hidden" name="scrolltoExcludeDirs" id="scrolltoExcludeDirs" value="'.esc_html( $scrolltoExcludeDirs ).'" />';
1086
  echo '<br>';
1087
 
1088
  echo '<label for="bps-mscan-label">'.__('Scan Database', 'bulletproof-security').'</label><br>';
1089
  echo '<select name="mscan_scan_database_select" class="form-340" style="margin-bottom:10px">';
1090
- echo '<option value="On"'. selected('On', $MScan_options['mscan_scan_database']).'>'.__('Database Scan On', 'bulletproof-security').'</option>';
1091
- echo '<option value="Off"'. selected('Off', $MScan_options['mscan_scan_database']).'>'.__('Database Scan Off', 'bulletproof-security').'</option>';
1092
- echo '</select><br>';
1093
-
1094
- echo '<label for="bps-mscan-label">'.__('Scan Image Files (Stegosploit|Exif Hack)', 'bulletproof-security').'</label><br>';
1095
- echo '<select name="mscan_scan_images_select" class="form-340" style="margin-bottom:10px">';
1096
- echo '<option value="Off"'. selected('Off', $MScan_options['mscan_scan_images']).'>'.__('Image File Scan Off', 'bulletproof-security').'</option>';
1097
- echo '<option value="On"'. selected('On', $MScan_options['mscan_scan_images']).'>'.__('Image File Scan On', 'bulletproof-security').'</option>';
1098
  echo '</select><br>';
1099
 
1100
- echo '<label for="bps-mscan-label">'.__('Scan Skipped Files Only', 'bulletproof-security').'</label><strong><font color="black"><span class="tooltip-350-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('When Skipped File Scan is On only skipped files will be scanned. Note: The only MScan option setting that has any affect while Skipped File Scan is On is Image File Scan On or Off.', 'bulletproof-security').'<br><br>'.__('Click the MScan Read Me help button for more help info.', 'bulletproof-security').'</span></span></font></strong><br>';
1101
  echo '<select name="mscan_scan_skipped_files_select" class="form-340" style="margin-bottom:10px">';
1102
- echo '<option value="Off"'. selected('Off', $MScan_options['mscan_scan_skipped_files']).'>'.__('Skipped File Scan Off', 'bulletproof-security').'</option>';
1103
- echo '<option value="On"'. selected('On', $MScan_options['mscan_scan_skipped_files']).'>'.__('Skipped File Scan On', 'bulletproof-security').'</option>';
1104
  echo '</select><br>';
1105
 
1106
  echo '<label for="bps-mscan-label">'.__('Automatically Delete /tmp Files', 'bulletproof-security').'</label><br>';
1107
  echo '<select name="mscan_scan_delete_tmp_files_select" class="form-340" style="margin-bottom:10px">';
1108
- echo '<option value="Off"'. selected('Off', $MScan_options['mscan_scan_delete_tmp_files']).'>'.__('Delete Tmp Files Off', 'bulletproof-security').'</option>';
1109
- echo '<option value="On"'. selected('On', $MScan_options['mscan_scan_delete_tmp_files']).'>'.__('Delete Tmp Files On', 'bulletproof-security').'</option>';
1110
  echo '</select><br>';
1111
 
1112
  echo '<label for="bps-mscan-label" style="">'.__('Exclude /tmp Files', 'bulletproof-security').'</label><strong><font color="black"><span class="tooltip-350-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('Enter one file name per line.', 'bulletproof-security').'<br>'.__('Example:', 'bulletproof-security').'<br>mysql.sock<br>.s.PGSQL.5432<br>.per-user<br>'.__('Click the MScan Read Me help button for more help info.', 'bulletproof-security').'</span></span></font></strong><br>';
1113
  // trimming whitespace does not work because I am not trimming newlines or returns
1114
- echo '<textarea class="text-area-340x60" name="mscan_exclude_tmp_files" style="width:340px;height:60px;margin-bottom:5px" tabindex="1">'.esc_html( trim(stripslashes($MScan_options['mscan_exclude_tmp_files']), " \t\0\x0B") ).'</textarea>';
1115
  echo '<input type="hidden" name="scrolltoExcludeTmpFiles" id="scrolltoExcludeTmpFiles" value="'.esc_html( $scrolltoExcludeTmpFiles ).'" />';
1116
  echo '<br>';
1117
 
1118
  echo '<label for="bps-mscan-label">'.__('Scheduled Scan Frequency (BPS Pro only)', 'bulletproof-security').'</label><br>';
1119
  echo '<select name="mscan_scan_frequency_select" class="form-340" style="margin-bottom:15px">';
1120
- echo '<option value="Off"'. selected('Off', $MScan_options['mscan_scan_frequency']).'>'.__('Scheduled Scan Off', 'bulletproof-security').'</option>';
1121
- echo '<option value="60"'. selected('60', $MScan_options['mscan_scan_frequency']).'>'.__('Run Scan Every 60 Minutes', 'bulletproof-security').'</option>';
1122
- echo '<option value="180"'. selected('180', $MScan_options['mscan_scan_frequency']).'>'.__('Run Scan Every 3 Hours', 'bulletproof-security').'</option>';
1123
- echo '<option value="360"'. selected('360', $MScan_options['mscan_scan_frequency']).'>'.__('Run Scan Every 6 Hours', 'bulletproof-security').'</option>';
1124
- echo '<option value="720"'. selected('720', $MScan_options['mscan_scan_frequency']).'>'.__('Run Scan Every 12 Hours', 'bulletproof-security').'</option>';
1125
- echo '<option value="1440"'. selected('1440', $MScan_options['mscan_scan_frequency']).'>'.__('Run Scan Every 24 Hours', 'bulletproof-security').'</option>';
1126
  echo '</select><br>';
1127
 
1128
  echo "<p><input type=\"submit\" name=\"Submit-MScan-Options\" value=\"".esc_attr__('Save MScan Options', 'bulletproof-security')."\" class=\"button bps-button\" onclick=\"return confirm('".__('Click OK to save MScan Options or click Cancel', 'bulletproof-security')."')\" /></p></form>";
@@ -1130,22 +1066,42 @@ bpsPro_save_mscan_options();
1130
  echo '</div>';
1131
  echo '</td>';
1132
  echo '<td style="border:none">';
1133
- echo '<div id="MScanOptions" style="margin:82px 0px 0px 0px;float:left;">';
1134
 
 
1135
  echo '<form name="MScanTimeEstimate" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1136
  wp_nonce_field('bulletproof_security_mscan_time_estimate');
1137
  echo "<input type=\"submit\" id=\"bps-mscan-time-estimate-button\" name=\"Submit-MScan-Time-Estimate\" value=\"".esc_attr__('Scan Time Estimate Tool', 'bulletproof-security')."\" class=\"button bps-button\" style=\"width:175px;height:auto;white-space:normal\" onclick=\"return confirm('".__('IMPORTANT: You can stop the scan time estimate if it hangs or is taking too long by clicking the Stop Scan button.\n\n-------------------------------------------------------------\n\nThis tool allows you to check the estimated total scan time of a scan based on your MScan option settings without actually performing/running a scan. Note: This tool does not affect or change any previous scan results except for the Total Scan Time, which will be changed to the estimated scan time.\n\n-------------------------------------------------------------\n\nExample Usage: You can check or uncheck Hosting Account Root Folders checkboxes and change any other MScan option settings, save your MScan option settings and then run the Scan Time Estimate Tool to get the total estimated time that the actual scan will take. For additional help information click the MScan Read Me help button.\n\n-------------------------------------------------------------\n\nClick OK to get a scan time estimate or click Cancel', 'bulletproof-security')."')\" />";
1138
- echo '</form><br>';
1139
-
1140
- echo '<form name="MScanDeleteStatus" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1141
- wp_nonce_field('bulletproof_security_mscan_delete_status');
1142
- echo "<input type=\"submit\" name=\"Submit-MScan-Delete-Status\" value=\"".esc_attr__('Delete Scan Status Tool', 'bulletproof-security')."\" class=\"button bps-button\" style=\"width:175px;height:auto;white-space:normal\" onclick=\"return confirm('".__('This tool allows you to delete all of the MScan Status option values.\n\n-------------------------------------------------------------\n\nThe Scan Completed timestamp, Total Scan Time, Total Files Scanned, Skipped Files, Suspicious Files and Suspicious DB Entries status values will be deleted and will either display blank or 0. For additional help information click the MScan Read Me help button.\n\n-------------------------------------------------------------\n\nClick OK to delete scan status option values or click Cancel', 'bulletproof-security')."')\" />";
1143
- echo '</form><br>';
1144
 
1145
- echo '<form name="MScanDeleteAllScanData" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1146
- wp_nonce_field('bulletproof_security_mscan_delete_all_scan_data');
1147
- echo "<input type=\"submit\" name=\"Submit-MScan-Delete-All-Scan-Data\" value=\"".esc_attr__('Delete DB Scan Data Tool', 'bulletproof-security')."\" class=\"button bps-button\" style=\"width:175px;height:auto;white-space:normal\" onclick=\"return confirm('".__('Deleting all database scan data is a reset that deletes any/all changes you have made and saved using the View|Ignore|Delete Suspicious Files and View|Ignore Suspicious DB Entries Forms.\n\n-------------------------------------------------------------\n\nClick OK to delete all database Scan Data or click Cancel', 'bulletproof-security')."')\" />";
1148
  echo '</form>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1149
 
1150
  echo '</div>';
1151
  echo '</td>';
@@ -1153,6 +1109,234 @@ bpsPro_save_mscan_options();
1153
  echo '</tbody>';
1154
  echo '</table>';
1155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1156
  $UIoptions = get_option('bulletproof_security_options_theme_skin');
1157
 
1158
  if ( isset($UIoptions['bps_ui_theme_skin']) && $UIoptions['bps_ui_theme_skin'] == 'blue' ) { ?>
@@ -1380,6 +1564,9 @@ if ( isset( $_POST['Submit-MScan-Suspect-Form'] ) && current_user_can('manage_op
1380
  }
1381
  }
1382
 
 
 
 
1383
  echo '<form name="MScanSuspiciousFiles" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1384
  wp_nonce_field('bulletproof_security_mscan_suspicious_files');
1385
 
@@ -1399,7 +1586,7 @@ if ( isset( $_POST['Submit-MScan-Suspect-Form'] ) && current_user_can('manage_op
1399
  echo '<th scope="col" style="width:7%;"><input type="checkbox" class="checkallUnignore" style="text-align:left;margin-left:2px;" /><br><strong>'.__('Unignore<br>File', 'bulletproof-security').'</strong></th>';
1400
  echo '<th scope="col" style="width:7%;"><input type="checkbox" class="checkallDelete" style="text-align:left;margin-left:2px;" /><br><strong>'.__('Delete<br>File', 'bulletproof-security').'</strong></th>';
1401
  echo '<th scope="col" style="width:42%;"><strong>'.__('File Path', 'bulletproof-security').'</strong></th>';
1402
- echo '<th scope="col" style="width:10%;"><strong>'.__('Pattern<br>Match', 'bulletproof-security').'</strong></th>';
1403
  echo '<th scope="col" style="width:10%;"><strong>'.__('Scan<br>Time', 'bulletproof-security').'</strong></th>';
1404
  echo '</tr>';
1405
  echo '</thead>';
@@ -1442,7 +1629,14 @@ if ( isset( $_POST['Submit-MScan-Suspect-Form'] ) && current_user_can('manage_op
1442
 
1443
  echo "<td><input type=\"checkbox\" id=\"deletefile\" name=\"mscan[$row->mscan_path]\" value=\"deletefile\" class=\"deletefileALL\" /><br><span style=\"font-size:10px;\">".__('Delete', 'bulletproof-security')."</span></td>";
1444
  echo '<td>'.$row->mscan_path.'</td>';
1445
- echo '<td style="max-width:200px">'.esc_html($row->mscan_pattern).'</td>';
 
 
 
 
 
 
 
1446
  echo '<td>'.$row->mscan_time.'</td>';
1447
  echo '</tr>';
1448
  }
@@ -1673,6 +1867,9 @@ if ( isset( $_POST['Submit-MScan-Suspect-DB-Form'] ) && current_user_can('manage
1673
  }
1674
  }
1675
 
 
 
 
1676
  echo '<form name="MScanSuspiciousDBEntries" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1677
  wp_nonce_field('bulletproof_security_mscan_suspicious_db_entries');
1678
 
@@ -1792,7 +1989,7 @@ jQuery(document).ready(function($){
1792
 
1793
  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
1794
  <tr>
1795
- <td class="bps-table_title"><h2><?php _e('MScan Log ~ ', 'bulletproof-security'); ?><span style="font-size:.75em;"><?php _e('Logs MScan Settings, Completion Time, Memory Usage, Zip Backup File Name, Timestamp...', 'bulletproof-security'); ?></span></h2></td>
1796
  </tr>
1797
  <tr>
1798
  <td class="bps-table_cell_help">
@@ -1860,7 +2057,7 @@ bpsPro_MScan_LogSize();
1860
  <form name="MScanLogModDate" action="options.php#bps-tabs-2" method="post">
1861
  <?php settings_fields('bulletproof_security_options_MScan_log'); ?>
1862
  <?php $MScanLogoptions = get_option('bulletproof_security_options_MScan_log');
1863
- $bps_mscan_log_date_mod = ! isset($MScanLogoptions['bps_mscan_log_date_mod']) ? '' : $MScanLogoptions['bps_mscan_log_date_mod'];
1864
  ?>
1865
  <label for="QLog"><strong><?php _e('MScan Log Last Modified Time:', 'bulletproof-security'); ?></strong></label><br />
1866
  <label for="QLog"><strong><?php echo bpsPro_MScan_ModTimeDiff(); ?></strong><?php echo $bps_mscan_log_date_mod; ?></label><br />
@@ -1873,14 +2070,28 @@ bpsPro_MScan_LogSize();
1873
  if ( isset( $_POST['Submit-Delete-MScan-Log'] ) && current_user_can('manage_options') ) {
1874
  check_admin_referer( 'bulletproof_security_delete_mscan_log' );
1875
 
1876
- $options = get_option('bulletproof_security_options_DBB_log');
1877
- $last_modified_time_db = $options['bps_dbb_log_date_mod'];
1878
- $time = strtotime($last_modified_time_db);
1879
- $DBBLog = WP_CONTENT_DIR . '/bps-backup/logs/db_backup_log.txt';
1880
- $DBBLogMaster = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/db_backup_log.txt';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1881
 
1882
- if ( copy($DBBLogMaster, $DBBLog) ) {
1883
- touch($DBBLog, $time);
1884
 
1885
  echo $bps_topDiv;
1886
  $text = '<font color="green"><strong>'.__('Success! Your MScan Log has been deleted and replaced with a new blank MScan Log file.', 'bulletproof-security').'</strong></font>';
@@ -1986,6 +2197,7 @@ jQuery(document).ready(function($){
1986
  });
1987
  /* ]]> */
1988
  </script>
 
1989
  </div>
1990
 
1991
  </td>
@@ -1996,6 +2208,1300 @@ jQuery(document).ready(function($){
1996
 
1997
  <div id="bps-tabs-3" class="bps-tab-page">
1998
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1999
  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
2000
  <tr>
2001
  <td class="bps-table_title"><h2><?php _e('Help &amp; FAQ', 'bulletproof-security'); ?></h2></td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <!-- force the vertical scrollbar -->
2
  <style>
3
  #wpwrap{min-height:100.1%};
4
+ div.notice{display:none}
5
  </style>
6
 
7
  <div id="bps-container" class="wrap" style="margin:45px 20px 5px 0px;">
8
 
9
+ <!-- MUST be in my page container div. hide notices from other plugins so they don't break the MScan iFrame-->
10
+ <style>
11
+ div.notice{display:none}
12
+ </style>
13
+
14
  <noscript><div id="message" class="updated" style="font-weight:600;font-size:13px;padding:5px;background-color:#dfecf2;border:1px solid #999;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><span style="color:blue">BPS Warning: JavaScript is disabled in your Browser</span><br />BPS plugin pages will not display visually correct and all BPS JavaScript functionality will not work correctly.</div></noscript>
15
 
16
  <?php
22
  echo '</div>';
23
 
24
  ## 2.9: Created new file for mscan pattern matching code. If web host deletes or nulls that file or Dir then mscan will not work, but BPS Pro will still work.
25
+ ## 4.8: Major rebuild: Plugin and Theme files will be checked using MD5 file hash comparisons. Will still offer pattern matching, but am recommending
26
+ ## Premium/custom plugin and theme zip uploads so that MD5 hashes can be made from those plugin and theme files.
27
+ ## MScan pattern matching code is now saved in the DB.
28
  function bpsPro_mscan_pattern_match_file_check() {
29
 
30
  $mscan_db_pattern_match_options = get_option('bulletproof_security_options_mscan_patterns');
31
+
32
  if ( ! empty($mscan_db_pattern_match_options['mscan_pattern_match_files']) ) {
33
 
34
  foreach ( $mscan_db_pattern_match_options['mscan_pattern_match_files'] as $key => $value ) {
44
  if ( $inner_key == 'php_patterns' ) {
45
  $php_pattern = $inner_value;
46
  }
 
 
 
47
  }
48
  }
49
  }
50
+
51
  if ( empty($js_pattern) ) {
52
+ $text = '<div id="bps-inpage-message" style="background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:0px 5px;margin:-7px 0px 10px 0px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><font color="#fb0101">'.__('The MScan pattern matching code does not exist in your database.', 'bulletproof-security').'</font><br>'.__('Most likely your web host saw the pattern matching code in the MScan /bulletproof-security/admin/htaccess/mscan-pattern-match.php file as malicious and has either deleted the file or made the file or folder unreadable.', 'bulletproof-security').'<br>'.__('Unfortunately that means you will not be able to use MScan on your website/server/web host.', 'bulletproof-security').'</div>';
53
  echo $text;
54
  }
55
  }
56
  bpsPro_mscan_pattern_match_file_check();
57
  ?>
58
 
 
 
59
  <div id="message" class="updated" style="border:1px solid #999;background-color:#000;">
60
 
61
  <?php
73
 
74
  $bpsSpacePop = '-------------------------------------------------------------';
75
 
76
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/admin/mscan/mscan-help-text.php';
77
 
78
  // Replace ABSPATH = wp-content/plugins
79
  $bps_plugin_dir = str_replace( ABSPATH, '', WP_PLUGIN_DIR );
83
  $wp_upload_dir = wp_upload_dir();
84
  $bps_uploads_dir = str_replace( ABSPATH, '', $wp_upload_dir['basedir'] );
85
 
86
+ // Get Real IP address - USE EXTREME CAUTION!!!
87
+ function bpsPro_get_real_ip_address_mscan() {
88
 
89
+ if ( is_admin() && current_user_can('manage_options') ) {
90
 
91
+ if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) {
92
+ $ip = esc_html( $_SERVER['HTTP_CLIENT_IP'] );
93
+
94
+ if ( ! is_array($ip) ) {
95
+
96
+ if ( preg_match( '/(\d+\.){3}\d+/', $ip, $matches ) ) {
97
+
98
+ return $matches[0];
99
+
100
+ } elseif ( preg_match( '/([:\d\w]+\.(\d+\.){2}\d+|[:\d\w]+)/', $ip, $matches ) ) {
101
+
102
+ return $matches[0];
103
+
104
+ } else {
105
+
106
+ return $ip;
107
+ }
108
+
109
+ } else {
110
+
111
+ return current($ip);
112
+ }
113
+
114
+ } elseif ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
115
+ $ip = esc_html( $_SERVER['HTTP_X_FORWARDED_FOR'] );
116
+
117
+ if ( ! is_array($ip) ) {
118
+
119
+ if ( preg_match( '/(\d+\.){3}\d+/', $ip, $matches ) ) {
120
+
121
+ return $matches[0];
122
+
123
+ } elseif ( preg_match( '/([:\d\w]+\.(\d+\.){2}\d+|[:\d\w]+)/', $ip, $matches ) ) {
124
+
125
+ return $matches[0];
126
+
127
+ } else {
128
+
129
+ return $ip;
130
+ }
131
+
132
+ } else {
133
+
134
+ return current($ip);
135
+ }
136
+
137
+ } elseif ( isset( $_SERVER['REMOTE_ADDR'] ) ) {
138
+ $ip = esc_html( $_SERVER['REMOTE_ADDR'] );
139
+ return $ip;
140
+ }
141
+ }
142
+ }
143
+
144
+ // Create a new Deny All .htaccess file on first page load with users current IP address to allow the cc-master.zip file to be downloaded
145
+ // Create a new Deny All .htaccess file if IP address is not current
146
+ function bpsPro_Core_mscan_deny_all() {
147
+
148
+ if ( is_admin() && wp_script_is( 'bps-accordion', $list = 'queue' ) && current_user_can('manage_options') ) {
149
+
150
+ $HFiles_options = get_option('bulletproof_security_options_htaccess_files');
151
+ $Apache_Mod_options = get_option('bulletproof_security_options_apache_modules');
152
+ $Zip_download_Options = get_option('bulletproof_security_options_zip_fix');
153
+
154
+ if ( isset( $HFiles_options['bps_htaccess_files'] ) && $HFiles_options['bps_htaccess_files'] == 'disabled' || isset( $Zip_download_Options['bps_zip_download_fix'] ) && $Zip_download_Options['bps_zip_download_fix'] == 'On' ) {
155
+ return;
156
+ }
157
+
158
+ if ( $Apache_Mod_options['bps_apache_mod_ifmodule'] == 'Yes' ) {
159
+
160
+ $denyall_content = "# BPS mod_authz_core IfModule BC\n<IfModule mod_authz_core.c>\nRequire ip ". bpsPro_get_real_ip_address_mscan()."\n</IfModule>\n\n<IfModule !mod_authz_core.c>\n<IfModule mod_access_compat.c>\n<FilesMatch \"(.*)\$\">\nOrder Allow,Deny\nAllow from ". bpsPro_get_real_ip_address_mscan()."\n</FilesMatch>\n</IfModule>\n</IfModule>";
161
+
162
+ } else {
163
+
164
+ $denyall_content = "# BPS mod_access_compat\n<FilesMatch \"(.*)\$\">\nOrder Allow,Deny\nAllow from ". bpsPro_get_real_ip_address_mscan()."\n</FilesMatch>";
165
+ }
166
+
167
+ $create_denyall_htaccess_file = WP_PLUGIN_DIR . '/bulletproof-security/admin/mscan/.htaccess';
168
+
169
+ if ( file_exists($create_denyall_htaccess_file) ) {
170
+ $check_string = @file_get_contents($create_denyall_htaccess_file);
171
+ }
172
+
173
+ if ( ! file_exists($create_denyall_htaccess_file) ) {
174
+
175
+ $handle = fopen( $create_denyall_htaccess_file, 'w+b' );
176
+ fwrite( $handle, $denyall_content );
177
+ fclose( $handle );
178
+ }
179
+
180
+ if ( file_exists($create_denyall_htaccess_file) && ! strpos( $check_string, bpsPro_get_real_ip_address_mscan() ) ) {
181
+ $handle = fopen( $create_denyall_htaccess_file, 'w+b' );
182
+ fwrite( $handle, $denyall_content );
183
+ fclose( $handle );
184
+ }
185
  }
186
  }
187
 
188
+ bpsPro_Core_mscan_deny_all();
189
 
190
+ ?>
191
  </div>
192
 
193
+ <h2 class="bps-tab-title"><?php _e('BulletProof Security ~ MScan 2.0 Malware Scanner', 'bulletproof-security'); ?></h2>
194
+
195
  <!-- jQuery UI Tab Menu -->
196
  <div id="bps-tabs" class="bps-menu">
197
  <div id="bpsHead"><img src="<?php echo plugins_url('/bulletproof-security/admin/images/bps-free-logo.gif'); ?>" /></div>
198
  <ul>
199
+ <li><a href="#bps-tabs-1"><?php _e('MScan 2.0', 'bulletproof-security'); ?></a></li>
200
  <li><a href="#bps-tabs-2"><?php _e('MScan Log', 'bulletproof-security'); ?></a></li>
201
+ <li><a href="#bps-tabs-3"><?php _e('MScan Report', 'bulletproof-security'); ?></a></li>
202
+ <li><a href="#bps-tabs-4"><?php _e('MScan Saved Reports', 'bulletproof-security'); ?></a></li>
203
+ <li><a href="#bps-tabs-5"><?php _e('Help &amp; FAQ', 'bulletproof-security'); ?></a></li>
204
  </ul>
205
 
206
  <div id="bps-tabs-1" class="bps-tab-page">
207
 
208
  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
209
  <tr>
210
+ <td class="bps-table_title"><h2><?php _e('MScan 2.0 ~ ', 'bulletproof-security'); ?><span style="font-size:.75em;"><?php _e('Scans website files & your database for hacker files or code', 'bulletproof-security'); ?></span></h2>
 
 
 
 
 
211
  </td>
212
  </tr>
213
  <tr>
214
  <td class="bps-table_cell_help">
215
 
216
+ <h3 style="margin:0px 0px 10px 0px;"><?php _e('MScan 2.0', 'bulletproof-security'); ?> <button id="bps-open-modal1" class="button bps-modal-button"><?php _e('Read Me', 'bulletproof-security'); ?></button></h3>
217
 
218
+ <div id="bps-modal-content1" class="bps-dialog-hide" title="<?php _e('MScan 2.0', 'bulletproof-security'); ?>">
219
  <p>
220
  <?php
221
  $text = '<strong>'.__('This Read Me Help window is draggable (top) and resizable (bottom right corner)', 'bulletproof-security').'</strong><br><br>';
225
  ?>
226
  <strong><a href="https://forum.ait-pro.com/forums/topic/mscan-malware-scanner-guide/" title="MScan Malware Scanner Guide" target="_blank"><?php _e('MScan Malware Scanner Guide', 'bulletproof-security'); ?></a></strong><br />
227
  <strong><a href="https://forum.ait-pro.com/forums/topic/mscan-troubleshooting-questions-problems-and-code-posting/" title="MScan Troubleshooting & Code Posting" target="_blank"><?php _e('MScan Troubleshooting & Code Posting', 'bulletproof-security'); ?></a></strong><br />
228
+ <strong><a href="https://forum.ait-pro.com/forums/topic/read-me-first-pro/#bps-pro-general-troubleshooting" title="BPS Pro Troubleshooting Steps" target="_blank"><?php _e('BPS Pro Troubleshooting Steps', 'bulletproof-security'); ?></a></strong><br /><br />
229
 
230
+ <?php echo $bps_modal_content1; ?></p>
 
231
  </div>
232
 
233
+ <style>
234
+ #bps-container div.mscan-report-row-small{font-size:1em;margin:0px 0px 10px 0px}
235
 
236
+ @media screen and (max-width: 495px){
237
+ div#bps-mscan-iframe-container{height:150px}
238
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:0px;height:195px;margin-top:-47px;width:100%;}
239
+ }
240
+ @media screen and (min-width: 496px) and (max-width: 916px){
241
+ div#bps-mscan-iframe-container{height:80px}
242
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:0px;height:125px;margin-top:-47px;width:100%;}
243
+ }
244
+ @media screen and (min-width: 917px) and (max-width: 960px){
245
+ div#bps-mscan-iframe-container{height:80px}
246
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-45px;height:125px;margin-top:-32px;width:100%;}
247
+ }
248
+ @media screen and (min-width: 961px) and (max-width: 1043px){
249
+ div#bps-mscan-iframe-container{height:80px}
250
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:0px;height:140px;margin-top:-47px;width:100%;}
251
+ }
252
+ @media screen and (min-width: 1044px) and (max-width: 1185px){
253
+ div#bps-mscan-iframe-container{height:80px}
254
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-45px;height:140px;margin-top:-35px;width:100%;}
255
+ }
256
+ @media screen and (min-width: 1186px) and (max-width: 1221px){
257
+ div#bps-mscan-iframe-container{height:60px}
258
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-45px;height:125px;margin-top:-35px;width:100%;}
259
+ }
260
+ @media screen and (min-width: 1222px) and (max-width: 1304px){
261
+ div#bps-mscan-iframe-container{height:80px}
262
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-170px;height:140px;margin-top:-35px;width:100%;}
263
+ }
264
+ @media screen and (min-width: 1305px) and (max-width: 1370px){
265
+ div#bps-mscan-iframe-container{height:70px}
266
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-170px;height:130px;margin-top:-35px;width:100%;}
267
+ }
268
+ @media screen and (min-width: 1371px) and (max-width: 1599px){
269
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-170px;height:110px;margin-top:-35px;width:100%;}
270
+ }
271
+ @media screen and (min-width: 1600px){
272
+ iframe#bps-mscan-iframe-contents{border:0px none;margin-left:-170px;height:110px;margin-top:-32px;width:100%;}
273
+ }
274
+ </style>
275
+
276
+ <!-- Note if someone is displaying BPS Pro status display in BPS plugin pages only it throws off the iframe section Don't adjust for that and don't use any CSS -->
277
+ <!-- because it causes other problems. For BPS free I will probably need to change the position of the iframe since all BPS free stuff is displayed inpage -->
278
+ <div id="bps-mscan-iframe-container" style="border:none;overflow:hidden;margin:15px auto;max-width:1400px;">
279
+ <iframe id="bps-mscan-iframe-contents" scrolling="no" src="<?php echo get_site_url(null, '/wp-admin/admin.php?page=bulletproof-security%2Fadmin%2Fmscan%2Fmscan-iframe.php', null); ?>" style="">
280
+ </iframe>
281
+ </div>
282
 
283
+ <?php
284
+ // Form Processing: Reset MScan: Deletes the bpspro_mscan DB table, saves blank values for the MScan Status DB options.
285
+ if ( isset( $_POST['Submit-MScan-Reset'] ) && current_user_can('manage_options') ) {
286
+ check_admin_referer('bulletproof_security_mscan_reset');
287
 
288
  $MStable_name = $wpdb->prefix . "bpspro_mscan";
289
 
307
  UNIQUE KEY id (mscan_id)
308
  );";
309
 
310
+ require_once ABSPATH . 'wp-admin/includes/upgrade.php';
311
  dbDelta($sql);
312
  }
313
 
 
 
 
 
 
 
 
 
 
 
314
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
315
 
316
  $MScan_status_db = array(
330
  'bps_mscan_total_suspect_files' => '',
331
  'bps_mscan_suspect_skipped_files' => '',
332
  'bps_mscan_total_suspect_db' => '',
333
+ 'bps_mscan_total_ignored_files' => '',
334
+ 'bps_mscan_total_plugin_files' => '',
335
+ 'bps_mscan_total_theme_files' => ''
336
  );
337
 
338
  foreach( $MScan_status_db as $key => $value ) {
339
  update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
340
  }
341
+
342
+ echo $bps_topDiv;
343
+ $text = '<font color="green"><strong>'.__('MScan scan results and data has been deleted. Your MScan option settings have not been deleted.', 'bulletproof-security').'</strong></font>';
344
+ echo $text;
345
+ echo $bps_bottomDiv;
346
+ }
347
+
348
+ // Form Processing: Delete File Hashes Tool: Deletes the plugin and theme hash DB options
349
+ // and the no zip download DB option (premium/paid and custom plugins and themes or plugins and themes without a zip version #).
350
+ if ( isset( $_POST['Submit-MScan-Delete-Hashes'] ) && current_user_can('manage_options') ) {
351
+ check_admin_referer('bulletproof_security_mscan_delete_hashes');
352
+
353
+ delete_option('bulletproof_security_options_mscan_plugin_hash');
354
+ delete_option('bulletproof_security_options_mscan_p_hash_new');
355
+ delete_option('bulletproof_security_options_mscan_theme_hash');
356
+ delete_option('bulletproof_security_options_mscan_t_hash_new');
357
+ delete_option('bulletproof_security_options_mscan_nodownload');
358
+
359
  echo $bps_topDiv;
360
+ $text = '<font color="green"><strong>'.__('MScan Plugin and Theme file hashes have been deleted. New Plugin and Theme file hashes will be created the next time you run a scan. You should also click the MScan Reset button after using this tool. Your MScan option settings have not been deleted.', 'bulletproof-security').'</strong></font>';
361
  echo $text;
362
  echo $bps_bottomDiv;
363
  }
380
  'bps_mscan_status' => '4',
381
  'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
382
  'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
383
+ 'bps_mscan_total_website_files' => '',
384
  'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
385
  'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
386
+ 'bps_mscan_total_image_files' => '',
387
  'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
388
  'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
389
  'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
390
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
391
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
392
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
393
  );
394
 
395
  foreach( $MScan_status_db as $key => $value ) {
397
  }
398
 
399
  $mscan_scan_skipped_files_message = '';
 
400
 
401
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
402
  $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. Only skipped files will be scanned.', 'bulletproof-security').'</strong></font>';
403
  }
404
 
 
 
 
 
405
  echo $bps_topDiv;
406
+ $text = '<font color="green"><strong>'.__('MScan scanning has been stopped. Note: The Stop Scan button also stops the Scan Time Estimate Tool from calculating estimated scan time.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message;
407
  echo $text;
408
  echo $bps_bottomDiv;
409
  }
410
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  function bpsPro_mscan_displayed_messages() {
412
  global $bps_topDiv, $bps_bottomDiv;
413
 
415
  $MScan_options = get_option('bulletproof_security_options_MScan');
416
 
417
  $mscan_scan_skipped_files_message = '';
 
418
 
419
  if ( isset($MScan_options['mscan_scan_skipped_files']) && $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
420
 
421
  echo $bps_topDiv;
422
+ $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. Only skipped files will be scanned.', 'bulletproof-security').'</strong></font>';
423
+ echo $mscan_scan_skipped_files_message;
424
  echo $bps_bottomDiv;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
425
  }
426
  }
427
 
438
 
439
  $bps_mscan_last_scan_timestamp = ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ? '' : $MScan_status['bps_mscan_last_scan_timestamp'];
440
  $bps_mscan_total_time = ! isset($MScan_status['bps_mscan_total_time']) ? '' : $MScan_status['bps_mscan_total_time'];
 
441
  $bps_mscan_total_wp_core_files = ! isset($MScan_status['bps_mscan_total_wp_core_files']) ? '' : $MScan_status['bps_mscan_total_wp_core_files'];
442
  $bps_mscan_total_non_image_files = ! isset($MScan_status['bps_mscan_total_non_image_files']) ? '' : $MScan_status['bps_mscan_total_non_image_files'];
 
 
443
  $bps_mscan_total_skipped_files = ! isset($MScan_status['bps_mscan_total_skipped_files']) ? '' : $MScan_status['bps_mscan_total_skipped_files'];
444
  $bps_mscan_total_suspect_files = ! isset($MScan_status['bps_mscan_total_suspect_files']) ? '' : $MScan_status['bps_mscan_total_suspect_files'];
445
  $bps_mscan_suspect_skipped_files = ! isset($MScan_status['bps_mscan_suspect_skipped_files']) ? '' : $MScan_status['bps_mscan_suspect_skipped_files'];
446
  $bps_mscan_total_suspect_db = ! isset($MScan_status['bps_mscan_total_suspect_db']) ? '' : $MScan_status['bps_mscan_total_suspect_db'];
447
  $bps_mscan_total_ignored_files = ! isset($MScan_status['bps_mscan_total_ignored_files']) ? '' : $MScan_status['bps_mscan_total_ignored_files'];
448
+ $bps_mscan_total_plugin_files = ! isset($MScan_status['bps_mscan_total_plugin_files']) ? '' : $MScan_status['bps_mscan_total_plugin_files'];
449
+ $bps_mscan_total_theme_files = ! isset($MScan_status['bps_mscan_total_theme_files']) ? '' : $MScan_status['bps_mscan_total_theme_files'];
450
 
451
  $MScan_status_db = array(
452
  'bps_mscan_time_start' => time(),
453
  'bps_mscan_time_stop' => '',
454
+ 'bps_mscan_time_end' => time() + 15,
455
+ 'bps_mscan_time_remaining' => time() + 15,
456
  'bps_mscan_status' => '1',
457
  'bps_mscan_last_scan_timestamp' => $bps_mscan_last_scan_timestamp,
458
  'bps_mscan_total_time' => $bps_mscan_total_time,
459
+ 'bps_mscan_total_website_files' => '',
460
  'bps_mscan_total_wp_core_files' => $bps_mscan_total_wp_core_files,
461
  'bps_mscan_total_non_image_files' => $bps_mscan_total_non_image_files,
462
+ 'bps_mscan_total_image_files' => '',
463
+ 'bps_mscan_total_all_scannable_files' => '', // this needs to be reset/blank on each new scan. extremely large or small file scans have whacky results.
464
  'bps_mscan_total_skipped_files' => $bps_mscan_total_skipped_files,
465
  'bps_mscan_total_suspect_files' => $bps_mscan_total_suspect_files,
466
  'bps_mscan_suspect_skipped_files' => $bps_mscan_suspect_skipped_files,
467
  'bps_mscan_total_suspect_db' => $bps_mscan_total_suspect_db,
468
+ 'bps_mscan_total_ignored_files' => $bps_mscan_total_ignored_files,
469
+ 'bps_mscan_total_plugin_files' => $bps_mscan_total_plugin_files,
470
+ 'bps_mscan_total_theme_files' => $bps_mscan_total_theme_files
471
  );
472
 
473
  foreach( $MScan_status_db as $key => $value ) {
474
  update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
475
  }
476
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
477
 
478
  // Form Processing: MScan Start
479
  if ( isset( $_POST['Submit-MScan-Start'] ) && current_user_can('manage_options') ) {
482
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
483
  $MScan_options = get_option('bulletproof_security_options_MScan');
484
  $mstime = $MScan_options['mscan_max_time_limit'];
485
+ ini_set('max_execution_time', $mstime);
486
 
487
+ $bps_mscan_time_start = ! isset($MScan_status['bps_mscan_time_start']) ? '' : $MScan_status['bps_mscan_time_start'];
488
  $bps_mscan_last_scan_timestamp = ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ? '' : $MScan_status['bps_mscan_last_scan_timestamp'];
489
  $bps_mscan_total_time = ! isset($MScan_status['bps_mscan_total_time']) ? '' : $MScan_status['bps_mscan_total_time'];
 
490
  $bps_mscan_total_wp_core_files = ! isset($MScan_status['bps_mscan_total_wp_core_files']) ? '' : $MScan_status['bps_mscan_total_wp_core_files'];
491
  $bps_mscan_total_non_image_files = ! isset($MScan_status['bps_mscan_total_non_image_files']) ? '' : $MScan_status['bps_mscan_total_non_image_files'];
 
 
492
  $bps_mscan_total_skipped_files = ! isset($MScan_status['bps_mscan_total_skipped_files']) ? '' : $MScan_status['bps_mscan_total_skipped_files'];
493
  $bps_mscan_total_suspect_files = ! isset($MScan_status['bps_mscan_total_suspect_files']) ? '' : $MScan_status['bps_mscan_total_suspect_files'];
494
  $bps_mscan_suspect_skipped_files = ! isset($MScan_status['bps_mscan_suspect_skipped_files']) ? '' : $MScan_status['bps_mscan_suspect_skipped_files'];
495
  $bps_mscan_total_suspect_db = ! isset($MScan_status['bps_mscan_total_suspect_db']) ? '' : $MScan_status['bps_mscan_total_suspect_db'];
496
  $bps_mscan_total_ignored_files = ! isset($MScan_status['bps_mscan_total_ignored_files']) ? '' : $MScan_status['bps_mscan_total_ignored_files'];
497
+ $bps_mscan_total_plugin_files = ! isset($MScan_status['bps_mscan_total_plugin_files']) ? '' : $MScan_status['bps_mscan_total_plugin_files'];
498
+ $bps_mscan_total_theme_files = ! isset($MScan_status['bps_mscan_total_theme_files']) ? '' : $MScan_status['bps_mscan_total_theme_files'];
499
 
500
  $MScan_status_db = array(
501
+ 'bps_mscan_time_start' => $bps_mscan_time_start, // note: time start does not occur here. It occurs in the scan time estimate function.
502
  'bps_mscan_time_stop' => '',
503
+ 'bps_mscan_time_end' => time() + 10,
504
+ 'bps_mscan_time_remaining' => time() + 10, // +10 is the calculating scan time countdown. Don't go any lower than +10.
505
+ 'bps_mscan_status' => '1', // Time Remaining is updated in the scan time estimate function with the estimated scan time.
506
  'bps_mscan_last_scan_timestamp' => $bps_mscan_last_scan_timestamp,
507
  'bps_mscan_total_time' => $bps_mscan_total_time,
508
+ 'bps_mscan_total_website_files' => '',
509
  'bps_mscan_total_wp_core_files' => $bps_mscan_total_wp_core_files,
510
  'bps_mscan_total_non_image_files' => $bps_mscan_total_non_image_files,
511
+ 'bps_mscan_total_image_files' => '',
512
+ 'bps_mscan_total_all_scannable_files' => '', // this needs to be reset/blank on each new scan. extremely large or small file scans have whacky results.
513
  'bps_mscan_total_skipped_files' => $bps_mscan_total_skipped_files,
514
  'bps_mscan_total_suspect_files' => $bps_mscan_total_suspect_files,
515
  'bps_mscan_suspect_skipped_files' => $bps_mscan_suspect_skipped_files,
516
  'bps_mscan_total_suspect_db' => $bps_mscan_total_suspect_db,
517
+ 'bps_mscan_total_ignored_files' => $bps_mscan_total_ignored_files,
518
+ 'bps_mscan_total_plugin_files' => $bps_mscan_total_plugin_files,
519
+ 'bps_mscan_total_theme_files' => $bps_mscan_total_theme_files
520
  );
521
 
522
  foreach( $MScan_status_db as $key => $value ) {
523
  update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
524
  }
525
 
526
+ if ( ! get_option('bulletproof_security_options_mscan_theme_hash') || ! get_option('bulletproof_security_options_mscan_plugin_hash') ) {
527
+ echo $bps_topDiv;
528
+ $text = '<strong><font color="blue">'.__('First Time Scan or the Delete File Hashes Tool was used', 'bulletproof-security').'</font><br><font color="green">'.__('You will only see this message the first time you do a scan or if you use the Delete Files Hashes Tool. In order to make sure all Plugin and Theme hash files are created successfully no file scanning will occur during this scan. You can run a new scan after this scan has completed.', 'bulletproof-security').'</font></strong>';
529
+ echo $text;
530
+ echo $bps_bottomDiv;
531
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
532
  }
533
 
534
+ // Form Processing: MScan Report. I want the page to refresh/reload with a POST instead of GET so that
535
+ // Scan Report scan data is current and the Suspicious Files/DB accordion tab forms scan data is current.
536
+ if ( isset( $_POST['Submit-MScan-Report'] ) && current_user_can('manage_options') ) {
537
+ check_admin_referer( 'bulletproof_security_mscan_report' );
538
+ // don't need to echo a message
539
  }
540
+ ?>
541
 
542
+ <div id="MscanStartStopResetTable" style="position:relative;top:0px;left:-2px;margin:0px;">
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
543
 
544
+ <table width="400" border="0">
545
+ <tr>
546
+ <td>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  <form name="MScanStart" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post">
548
  <?php wp_nonce_field('bulletproof_security_mscan_start'); ?>
549
+ <input type="submit" id="bps-mscan-start-button" name="Submit-MScan-Start" style="margin:0px 5px 15px 0px;" value="<?php esc_attr_e('Start Scan', 'bulletproof-security') ?>" class="button bps-button" onclick="return confirm('<?php $text = __('Click OK to start scanning or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
550
  </form>
551
+ </td>
552
+ <td>
 
553
  <form name="MScanStop" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post">
554
  <?php wp_nonce_field('bulletproof_security_mscan_stop'); ?>
555
+ <input type="submit" id="bps-mscan-stop-button" name="Submit-MScan-Stop" style="margin:0px 5px 15px 0px;" value="<?php esc_attr_e('Stop Scan', 'bulletproof-security') ?>" class="button bps-button" onclick="return confirm('<?php $text = __('Click OK to stop scanning or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
556
+ </form>
557
+ </td>
558
+ <td>
559
+ <form name="MScanReport" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php#bps-tabs-3' ); ?>" method="post">
560
+ <?php wp_nonce_field('bulletproof_security_mscan_report'); ?>
561
+ <input type="submit" id="bps-mscan-report-button" name="Submit-MScan-Report" style="margin:0px 5px 15px 0px;" value="<?php esc_attr_e('View Report', 'bulletproof-security') ?>" class="button bps-button" />
562
+ </form>
563
+ </td>
564
+ <td>
565
+ <form name="MScanReset" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post">
566
+ <?php wp_nonce_field('bulletproof_security_mscan_reset'); ?>
567
+ <input type="submit" id="bps-mscan-reset-button" name="Submit-MScan-Reset" style="margin:0px 0px 15px 0px;" value="<?php esc_attr_e('Reset MScan', 'bulletproof-security') ?>" class="button bps-button" onclick="return confirm('<?php $text = __('Click OK to reset/delete all MScan scan results and data or click Cancel. Note: MScan option settings will not be reset/deleted.', 'bulletproof-security'); echo $text; ?>')" />
568
  </form>
569
+ </td>
570
+ </tr>
571
+ </table>
572
  </div>
573
 
 
 
574
  <div id="bps-accordion-1" class="bps-accordion-main-2" style="margin:0px 0px 20px 0px;">
575
  <h3 id="mscan-accordion-1"><?php _e('MScan Options & Tools', 'bulletproof-security'); ?></h3>
576
  <div id="mscan-accordion-inner">
577
 
578
  <?php
 
579
  // Form Processing: MScan Options Form
580
  // Important: This Form processing code MUST be above the Form & bpsPro_save_mscan_options() function so that new DB option values are current.
581
  if ( isset( $_POST['Submit-MScan-Options'] ) && current_user_can('manage_options') ) {
598
  }
599
  }
600
 
601
+ $wp_abspath_forward_slashes = str_replace( '\\', '/', ABSPATH );
602
+ $wp_install_folder = str_replace( array( get_home_path(), '/', ), "", $wp_abspath_forward_slashes );
603
+ $wp_includes_forward_slashes = $wp_abspath_forward_slashes . WPINC;
604
+ $wp_includes_folder = str_replace( $wp_abspath_forward_slashes, "", $wp_includes_forward_slashes );
605
+ $wp_content_folder = str_replace( ABSPATH, '', WP_CONTENT_DIR );
606
 
607
+ $source = $wp_abspath_forward_slashes;
608
+ $dir_array = array();
609
 
610
+ if ( is_dir($source) ) {
611
+
612
  $iterator = new DirectoryIterator($source);
613
+
 
614
  foreach ( $iterator as $files ) {
615
  try {
616
  if ( $files->isDir() && ! $files->isDot() ) {
620
  }
621
  }
622
  } catch (RuntimeException $e) {
623
+
624
  }
625
  }
626
+ }
627
 
628
+ $get_home_path = get_home_path();
629
+ $home_dir_array = array();
630
 
631
+ if ( $wp_abspath_forward_slashes != $get_home_path ) {
632
+
633
+ if ( is_dir($get_home_path) ) {
634
+
635
+ $iterator = new DirectoryIterator($get_home_path);
636
+
637
+ foreach ( $iterator as $files ) {
638
+ try {
639
+ if ( $files->isDir() && ! $files->isDot() ) {
640
+
641
+ if ( $wp_install_folder != $files->getFilename() && $wp_content_folder != $files->getFilename() && $wp_includes_folder != $files->getFilename() && 'wp-admin' != $files->getFilename()) {
642
+
643
+ if ( ! empty( $files ) ) {
644
+ $home_dir_array[] = $files->getFilename();
645
+ }
646
+ }
647
+ }
648
+ } catch (RuntimeException $e) {
649
+
650
+ }
651
+ }
652
  }
653
+ }
 
 
654
 
655
+ $dir_array_merge = array_merge($dir_array, $home_dir_array);
656
+ $dir_flip = array_flip($dir_array_merge);
657
+
658
+ // replace values in the flipped array with blank values.
659
+ // This seems wrong, but it is not > The $mscan_dirs_checked array (actual checked form checkboxes) is merged below.
660
+ // I don't need to strip out any other WP sites since the form will not allow checking checkboxes for other WP sites.
661
+ $mscan_actual_dirs = array();
662
+
663
+ foreach ( $dir_flip as $key => $value ) {
664
+ $mscan_actual_dirs[$key] = preg_replace( '/\d/', "", $value );
665
  }
666
+
667
+ // get dirs that do not exist in the bps_mscan_dirs db option. ie an unchecked form checkbox.
668
+ $mscan_diff_key_dir = array_diff_key( $mscan_actual_dirs, $mscan_dirs_checked );
669
+
670
+ // merge checked form checkboxes and dir array with blank values
671
+ $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_checked );
672
+ ksort($mscan_array_merge);
673
+
674
  break;
675
  }
676
 
677
+ // Add an additional newline for: mscan_exclude_tmp_files so the last file is included in the array
678
  // when using explode()
679
  $mscan_exclude_tmp_files = $_POST['mscan_exclude_tmp_files'] . "\n";
680
  $mscan_exclude_tmp_files = preg_replace("/(\n\n|\n\n\n|\n\n\n\n)/", "\n", $mscan_exclude_tmp_files);
681
+
682
  $MS_Options = array(
683
  'bps_mscan_dirs' => $mscan_array_merge,
684
  'mscan_max_file_size' => esc_html($_POST['mscan_max_file_size']),
685
  'mscan_max_time_limit' => esc_html($_POST['mscan_max_time_limit']),
686
  'mscan_scan_database' => $_POST['mscan_scan_database_select'],
687
+ 'mscan_scan_images' => 'Off',
688
  'mscan_scan_skipped_files' => $_POST['mscan_scan_skipped_files_select'],
689
  'mscan_scan_delete_tmp_files' => $_POST['mscan_scan_delete_tmp_files_select'],
690
  'mscan_scan_frequency' => 'Off',
691
  'mscan_exclude_dirs' => $_POST['mscan_exclude_dirs'],
692
+ 'mscan_exclude_tmp_files' => $mscan_exclude_tmp_files,
693
+ 'mscan_file_size_limit_hidden' => '14'
694
  );
695
 
696
  foreach( $MS_Options as $key => $value ) {
700
  $MScan_options = get_option('bulletproof_security_options_MScan');
701
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
702
  $mscan_scan_skipped_files_message = '';
 
703
  $mscan_scan_delete_tmp_files_message = '';
704
 
705
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' && $MScan_status['bps_mscan_total_skipped_files'] > 0 ) {
710
  $mscan_scan_skipped_files_message = '<br><font color="blue"><strong>'.__('Skipped file scanning is turned On. There are no skipped files to be scanned. Either there really are not any skipped files to scan or you have not run a regular scan yet with the Skipped File Scan option turned Off.', 'bulletproof-security').'</strong></font>';
711
  }
712
 
 
 
 
 
713
  if ( $MScan_options['mscan_scan_delete_tmp_files'] == 'On' ) {
714
+ $mscan_scan_delete_tmp_files_message = '<br><strong><font color="#fb0101">'.__('Warning: ', 'bulletproof-security').'</font>'.__('On some web hosts (Known host issues: SiteGround, Cyon) turning On the "Automatically Delete /tmp Files" option setting will cause your website/server to crash. If your website/server does crash contact your web host support folks, tell them that you deleted /tmp files and your website/server has crashed. You can use the MScan Exclude /tmp Files option to exclude certain tmp files from being deleted. You will need to ask your web host for the names of those tmp files to exclude.', 'bulletproof-security').'</strong>';
715
  }
716
 
717
  echo $bps_topDiv;
718
+ $text = '<font color="green"><strong>'.__('MScan Options saved.', 'bulletproof-security').'</strong></font>'.$mscan_scan_skipped_files_message.$mscan_scan_delete_tmp_files_message;
719
  echo $text;
720
  echo $bps_bottomDiv;
721
  }
722
 
723
  // Get any new dirs that have been created and remove any old dirs from the bps_mscan_dirs db option.
724
  // Update the bps_mscan_dirs db option for use in the MscanOptions Form.
725
+ // 15.4: MScan now does 2 dir iterations: ABSPATH and Home directory and merges the results.
726
  function bpsPro_save_mscan_options() {
727
 
728
+ $MScan_options = get_option('bulletproof_security_options_MScan');
729
+ $wp_abspath_forward_slashes = str_replace( '\\', '/', ABSPATH );
730
+ $wp_install_folder = str_replace( array( get_home_path(), '/', ), "", $wp_abspath_forward_slashes );
731
+ $wp_includes_forward_slashes = $wp_abspath_forward_slashes . WPINC;
732
+ $wp_includes_folder = str_replace( $wp_abspath_forward_slashes, "", $wp_includes_forward_slashes );
733
+ $wp_content_folder = str_replace( ABSPATH, '', WP_CONTENT_DIR );
734
+
735
+ $source = $wp_abspath_forward_slashes;
736
+ $dir_array = array();
737
+
738
  if ( is_dir($source) ) {
739
 
 
740
  $iterator = new DirectoryIterator($source);
 
741
 
742
  foreach ( $iterator as $files ) {
743
  try {
748
  }
749
  }
750
  } catch (RuntimeException $e) {
751
+
752
  }
753
  }
754
+ }
755
 
756
+ $get_home_path = get_home_path();
757
+ $home_dir_array = array();
758
+
759
+ if ( $wp_abspath_forward_slashes != $get_home_path ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
760
 
761
+ if ( is_dir($get_home_path) ) {
762
+
763
+ $iterator = new DirectoryIterator($get_home_path);
764
+
765
+ foreach ( $iterator as $files ) {
766
+ try {
767
+ if ( $files->isDir() && ! $files->isDot() ) {
768
+
769
+ if ( $wp_install_folder != $files->getFilename() && $wp_content_folder != $files->getFilename() && $wp_includes_folder != $files->getFilename() && 'wp-admin' != $files->getFilename()) {
770
 
771
+ if ( ! empty( $files ) ) {
772
+ $home_dir_array[] = $files->getFilename();
773
+ }
774
+ }
775
+ }
776
+ } catch (RuntimeException $e) {
777
+
778
+ }
779
  }
780
+ }
781
+ }
782
 
783
+ $dir_array_merge = array_merge($dir_array, $home_dir_array);
784
+ $dir_flip = array_flip($dir_array_merge);
785
+
786
+ // replace values in the flipped array, good for bulk replacing all values. ie all dirs found.
787
+ $mscan_actual_dirs = array();
788
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
789
+
790
+ foreach ( $dir_flip as $key => $value ) {
791
+
792
+ $wp_index_file = $source . $key . '/index.php';
793
+ $wp_blog_header_file = $source . $key . '/wp-blog-header.php';
794
+ $wp_cron_file = $source . $key . '/wp-cron.php';
795
+ $wp_load_file = $source . $key . '/wp-load.php';
796
+ $wp_login_file = $source . $key . '/wp-login.php';
797
+ $wp_settings_file = $source . $key . '/wp-settings.php';
798
+
799
+ $home_wp_index_file = $get_home_path . $key . '/index.php';
800
+ $home_wp_blog_header_file = $get_home_path . $key . '/wp-blog-header.php';
801
+ $home_wp_cron_file = $get_home_path . $key . '/wp-cron.php';
802
+ $home_wp_load_file = $get_home_path . $key . '/wp-load.php';
803
+ $home_wp_login_file = $get_home_path . $key . '/wp-login.php';
804
+ $home_wp_settings_file = $get_home_path . $key . '/wp-settings.php';
805
 
806
+ if ( file_exists($wp_index_file) ) {
807
+ $check_string = file_get_contents($wp_index_file);
808
+ }
809
+
810
+ if ( file_exists($home_wp_index_file) ) {
811
+ $home_check_string = file_get_contents($home_wp_index_file);
812
+ }
813
+
814
+ if ( file_exists($wp_index_file) && preg_match( $pattern, $check_string ) && file_exists($wp_blog_header_file) && file_exists($wp_cron_file) && file_exists($wp_load_file) && file_exists($wp_login_file) && file_exists($wp_settings_file) || file_exists($home_wp_index_file) && preg_match( $pattern, $home_check_string ) && file_exists($home_wp_blog_header_file) && file_exists($home_wp_cron_file) && file_exists($home_wp_load_file) && file_exists($home_wp_login_file) && file_exists($home_wp_settings_file) ) {
815
+ $mscan_actual_dirs[$key] = preg_replace( '/\d+/', "", $value );
816
+ } else {
817
+ $mscan_actual_dirs[$key] = preg_replace( '/\d+/', "1", $value );
818
+ }
819
+ }
820
+
821
+ // Only processed once on first MScan page load
822
+ if ( empty($MScan_options['bps_mscan_dirs']) ) {
823
+
824
+ $mscan_max_file_size = isset($MScan_options['mscan_max_file_size']) ? $MScan_options['mscan_max_file_size'] : '400';
825
+ $mscan_max_time_limit = isset($MScan_options['mscan_max_time_limit']) ? $MScan_options['mscan_max_time_limit'] : '300';
826
+ $mscan_scan_database = isset($MScan_options['mscan_scan_database']) ? $MScan_options['mscan_scan_database'] : 'On';
827
+ $mscan_scan_skipped_files = isset($MScan_options['mscan_scan_skipped_files']) ? $MScan_options['mscan_scan_skipped_files'] : 'Off';
828
+ $mscan_scan_delete_tmp_files = isset($MScan_options['mscan_scan_delete_tmp_files']) ? $MScan_options['mscan_scan_delete_tmp_files'] : 'Off';
829
+ $mscan_scan_frequency = isset($MScan_options['mscan_scan_frequency']) ? $MScan_options['mscan_scan_frequency'] : 'Off';
830
+ $mscan_exclude_dirs = isset($MScan_options['mscan_exclude_dirs']) ? $MScan_options['mscan_exclude_dirs'] : '';
831
+ $mscan_exclude_tmp_files = isset($MScan_options['mscan_exclude_tmp_files']) ? $MScan_options['mscan_exclude_tmp_files'] : '';
832
+ $mscan_file_size_limit_hidden = ! isset($MScan_options['mscan_file_size_limit_hidden']) ? '14' : $MScan_options['mscan_file_size_limit_hidden'];
833
+
834
+ $MS_Options = array(
835
+ 'bps_mscan_dirs' => $mscan_actual_dirs,
836
+ 'mscan_max_file_size' => $mscan_max_file_size,
837
+ 'mscan_max_time_limit' => $mscan_max_time_limit,
838
+ 'mscan_scan_database' => $mscan_scan_database,
839
+ 'mscan_scan_images' => 'Off',
840
+ 'mscan_scan_skipped_files' => $mscan_scan_skipped_files,
841
+ 'mscan_scan_delete_tmp_files' => $mscan_scan_delete_tmp_files,
842
+ 'mscan_scan_frequency' => $mscan_scan_frequency,
843
+ 'mscan_exclude_dirs' => $mscan_exclude_dirs,
844
+ 'mscan_exclude_tmp_files' => $mscan_exclude_tmp_files,
845
+ 'mscan_file_size_limit_hidden' => $mscan_file_size_limit_hidden
846
+ );
847
+
848
+ foreach( $MS_Options as $key => $value ) {
849
+ update_option('bulletproof_security_options_MScan', $MS_Options);
850
+ }
851
+
852
+ } else {
853
+
854
+ $mscan_dirs_options_inner_array = array();
855
 
856
+ foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
857
+ $mscan_dirs_options_inner_array[$key] = $value;
858
+ }
859
+
860
+ // get new dirs found that do not exist in the bps_mscan_dirs db option. ie a new dir has been created.
861
+ $mscan_diff_key_dir = array_diff_key($mscan_actual_dirs, $mscan_dirs_options_inner_array);
862
+
863
+ // get old dirs that still exist in the bps_mscan_dirs db option. ie a dir has been deleted.
864
+ $mscan_diff_key_options = array_diff_key($mscan_dirs_options_inner_array, $dir_flip);
865
+
866
+ if ( ! empty($mscan_diff_key_options) ) {
867
 
868
+ foreach ( $mscan_diff_key_options as $key => $value ) {
869
+ unset($mscan_dirs_options_inner_array[$key]);
 
 
 
 
 
 
 
 
 
 
 
 
 
870
  }
871
+
872
+ // merge any new dirs found
873
+ $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
874
+ ksort($mscan_array_merge);
875
+
876
+ } else {
877
+
878
+ // merge any new dirs found
879
+ $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
880
+ ksort($mscan_array_merge);
881
+ }
882
+
883
+ $MS_Options = array(
884
+ 'bps_mscan_dirs' => $mscan_array_merge,
885
+ 'mscan_max_file_size' => $MScan_options['mscan_max_file_size'],
886
+ 'mscan_max_time_limit' => $MScan_options['mscan_max_time_limit'],
887
+ 'mscan_scan_database' => $MScan_options['mscan_scan_database'],
888
+ 'mscan_scan_images' => 'Off',
889
+ 'mscan_scan_skipped_files' => $MScan_options['mscan_scan_skipped_files'],
890
+ 'mscan_scan_delete_tmp_files' => $MScan_options['mscan_scan_delete_tmp_files'],
891
+ 'mscan_scan_frequency' => 'Off',
892
+ 'mscan_exclude_dirs' => $MScan_options['mscan_exclude_dirs'],
893
+ 'mscan_exclude_tmp_files' => $MScan_options['mscan_exclude_tmp_files'],
894
+ 'mscan_file_size_limit_hidden' => '14'
895
+ );
896
+
897
+ foreach( $MS_Options as $key => $value ) {
898
+ update_option('bulletproof_security_options_MScan', $MS_Options);
899
  }
900
  }
901
  }
903
  bpsPro_save_mscan_options();
904
 
905
  $scrolltoExcludeDirs = isset($_REQUEST['scrolltoExcludeDirs']) ? (int) $_REQUEST['scrolltoExcludeDirs'] : 0;
906
+ $scrolltoExcludeTmpFiles = isset($_REQUEST['scrolltoExcludeTmpFiles']) ? (int) $_REQUEST['scrolltoExcludeTmpFiles'] : 0;
907
 
908
  // Form: MScan Options Form
909
  echo '<form name="MscanOptions" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
913
  echo '<table class="widefat" style="text-align:left;">';
914
  echo '<thead>';
915
  echo '<tr>';
916
+ echo '<th scope="col" style="width:40%;font-size:1.13em;background-color:transparent;"><strong>'.__('Website Folders & Files To Scan', 'bulletproof-security').'<br>'.__('Files are not displayed, but will be scanned', 'bulletproof-security').'</strong></th>';
917
  echo '<th scope="col" style="width:30%;font-size:1.13em;background-color:transparent;"><strong>'.__('MScan Options', 'bulletproof-security').'</strong></th>';
918
  echo '<th scope="col" style="width:30%;font-size:1.13em;background-color:transparent;"><strong>'.__('MScan Tools', 'bulletproof-security').'</strong></th>';
919
  echo '</tr>';
934
  echo '<tbody>';
935
  echo '<tr>';
936
 
937
+ $source = str_replace( '\\', '/', ABSPATH );
938
+ $get_home_path = get_home_path();
939
+
940
  foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
941
 
942
  if ( $value == '1' ) {
944
  } else {
945
  $checked = ( isset( $_POST['mscan[$key]'] ) ) ? $_POST['mscan[$key]'] : '';
946
  }
947
+
948
+ if ( ! is_readable( $source . $key ) && ! is_readable( $get_home_path . $key ) ) {
949
  echo "<td></td>";
950
  echo '<td>'.$key.' <strong><font color="blue">'.__('Folder is not readable', 'bulletproof-security').'</font></strong></td>';
951
  echo '</tr>';
952
 
953
  } else {
954
 
955
+ $wp_index_file = $source . $key . '/index.php';
956
+ $wp_blog_header_file = $source . $key . '/wp-blog-header.php';
957
+ $wp_cron_file = $source . $key . '/wp-cron.php';
958
+ $wp_load_file = $source . $key . '/wp-load.php';
959
+ $wp_login_file = $source . $key . '/wp-login.php';
960
+ $wp_settings_file = $source . $key . '/wp-settings.php';
961
+
962
+ $home_wp_index_file = $get_home_path . $key . '/index.php';
963
+ $home_wp_blog_header_file = $get_home_path . $key . '/wp-blog-header.php';
964
+ $home_wp_cron_file = $get_home_path . $key . '/wp-cron.php';
965
+ $home_wp_load_file = $get_home_path . $key . '/wp-load.php';
966
+ $home_wp_login_file = $get_home_path . $key . '/wp-login.php';
967
+ $home_wp_settings_file = $get_home_path . $key . '/wp-settings.php';
968
+
969
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
970
+
971
  if ( file_exists($wp_index_file) ) {
972
  $check_string = file_get_contents($wp_index_file);
973
  }
974
 
975
+ if ( file_exists($home_wp_index_file) ) {
976
+ $home_check_string = file_get_contents($home_wp_index_file);
977
+ }
978
 
979
+ if ( file_exists($wp_index_file) && preg_match( $pattern, $check_string ) && file_exists($wp_blog_header_file) && file_exists($wp_cron_file) && file_exists($wp_load_file) && file_exists($wp_login_file) && file_exists($wp_settings_file) || file_exists($home_wp_index_file) && preg_match( $pattern, $home_check_string ) && file_exists($home_wp_blog_header_file) && file_exists($home_wp_cron_file) && file_exists($home_wp_load_file) && file_exists($home_wp_login_file) && file_exists($home_wp_settings_file) ) {
980
+
981
+ $hover_icon = '<strong><font color="black"><span class="tooltip-250-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('This folder contains another WordPress website. This checkbox cannot be checked. To scan that site run MScan from that site. Click the MScan Read Me help button above and read the "Scanning Other WordPress Sites" help section.', 'bulletproof-security').'</span></span></font></strong><br>';
982
 
983
+ echo "<td><input type=\"checkbox\" id=\"mscandirs\" name=\"mscan[$key]\" value=\"\" class=\"MScanALL\" $checked /></td>";
984
  echo '<td>'.$key.$hover_icon.'</td>';
985
  echo '</tr>';
986
 
1001
  echo '<td style="border:none">';
1002
  echo '<div id="MScanOptions" style="margin:0px 0px 0px 0px;float:left;">';
1003
 
1004
+ $max_file_size = ( isset( $_POST['mscan_max_file_size'] ) ) ? $_POST['mscan_max_file_size'] : '1000';
1005
  $max_time_limit = ( isset( $_POST['mscan_max_time_limit'] ) ) ? $_POST['mscan_max_time_limit'] : '300';
1006
 
1007
+ $mscan_exclude_dirs = ! isset($MScan_options['mscan_exclude_dirs']) ? '' : $MScan_options['mscan_exclude_dirs'];
1008
+ $mscan_scan_database = ! isset($MScan_options['mscan_scan_database']) ? '' : $MScan_options['mscan_scan_database'];
1009
+ $mscan_scan_skipped_files = ! isset($MScan_options['mscan_scan_skipped_files']) ? '' : $MScan_options['mscan_scan_skipped_files'];
1010
+ $mscan_scan_delete_tmp_files = ! isset($MScan_options['mscan_scan_delete_tmp_files']) ? '' : $MScan_options['mscan_scan_delete_tmp_files'];
1011
+ $mscan_exclude_tmp_files = ! isset($MScan_options['mscan_exclude_tmp_files']) ? '' : $MScan_options['mscan_exclude_tmp_files'];
1012
+ $mscan_scan_frequency = ! isset($MScan_options['mscan_scan_frequency']) ? 'Off' : $MScan_options['mscan_scan_frequency'];
1013
+ $mscan_file_size_limit_hidden = ! isset($MScan_options['mscan_file_size_limit_hidden']) ? '14' : $MScan_options['mscan_file_size_limit_hidden'];
1014
+
1015
  echo '<label for="bps-mscan-label" style="padding-right:5px">'.__('Max File Size Limit to Scan:', 'bulletproof-security').'</label>';
1016
  echo '<input type="text" name="mscan_max_file_size" class="regular-text-50-fixed" style="margin-bottom:5px" value="'; if ( isset( $_POST['mscan_max_file_size'] ) && preg_match( '/\d/', $_POST['mscan_max_file_size'] ) ) { echo esc_html($max_file_size); } else { echo esc_html(trim(stripslashes($max_file_size))); } echo '" /> KB';
1017
+ echo '<input type="hidden" name="mscan_file_size_limit_hidden" value="14" />';
1018
  echo '<br>';
1019
 
1020
  echo '<label for="bps-mscan-label" style="padding-right:23px">'.__('Max Time Limit to Scan:', 'bulletproof-security').'</label>';
1023
 
1024
  echo '<label for="bps-mscan-label" style="">'.__('Exclude Individual Folders', 'bulletproof-security').'</label><strong><font color="black"><span class="tooltip-350-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('Enter one folder path per line. Include folder slashes.', 'bulletproof-security').'<br>'.__('Example:', 'bulletproof-security').'<br>/parent-folder-1/child-folder-1/<br>/parent-folder-2/child-folder-2/<br><br>'.__('Click the MScan Read Me help button for more help info.', 'bulletproof-security').'</span></span></font></strong><br>';
1025
  // trimming whitespace does not work because I am not trimming newlines or returns
1026
+ echo '<textarea class="text-area-340x60" name="mscan_exclude_dirs" style="width:340px;height:60px;margin-bottom:5px" tabindex="1">'.esc_html( trim(stripslashes($mscan_exclude_dirs), " \t\0\x0B") ).'</textarea>';
1027
  echo '<input type="hidden" name="scrolltoExcludeDirs" id="scrolltoExcludeDirs" value="'.esc_html( $scrolltoExcludeDirs ).'" />';
1028
  echo '<br>';
1029
 
1030
  echo '<label for="bps-mscan-label">'.__('Scan Database', 'bulletproof-security').'</label><br>';
1031
  echo '<select name="mscan_scan_database_select" class="form-340" style="margin-bottom:10px">';
1032
+ echo '<option value="On"'. selected('On', $mscan_scan_database).'>'.__('Database Scan On', 'bulletproof-security').'</option>';
1033
+ echo '<option value="Off"'. selected('Off', $mscan_scan_database).'>'.__('Database Scan Off', 'bulletproof-security').'</option>';
 
 
 
 
 
 
1034
  echo '</select><br>';
1035
 
1036
+ echo '<label for="bps-mscan-label">'.__('Scan Skipped Files Only', 'bulletproof-security').'</label><strong><font color="black"><span class="tooltip-350-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('When Skipped File Scan is On only skipped files will be scanned. Note: No other MScan option settings have any effect while Skipped File Scan is set to On.', 'bulletproof-security').'<br><br>'.__('Click the MScan Read Me help button for more help info.', 'bulletproof-security').'</span></span></font></strong><br>';
1037
  echo '<select name="mscan_scan_skipped_files_select" class="form-340" style="margin-bottom:10px">';
1038
+ echo '<option value="Off"'. selected('Off', $mscan_scan_skipped_files).'>'.__('Skipped File Scan Off', 'bulletproof-security').'</option>';
1039
+ echo '<option value="On"'. selected('On', $mscan_scan_skipped_files).'>'.__('Skipped File Scan On', 'bulletproof-security').'</option>';
1040
  echo '</select><br>';
1041
 
1042
  echo '<label for="bps-mscan-label">'.__('Automatically Delete /tmp Files', 'bulletproof-security').'</label><br>';
1043
  echo '<select name="mscan_scan_delete_tmp_files_select" class="form-340" style="margin-bottom:10px">';
1044
+ echo '<option value="Off"'. selected('Off', $mscan_scan_delete_tmp_files).'>'.__('Delete Tmp Files Off', 'bulletproof-security').'</option>';
1045
+ echo '<option value="On"'. selected('On', $mscan_scan_delete_tmp_files).'>'.__('Delete Tmp Files On', 'bulletproof-security').'</option>';
1046
  echo '</select><br>';
1047
 
1048
  echo '<label for="bps-mscan-label" style="">'.__('Exclude /tmp Files', 'bulletproof-security').'</label><strong><font color="black"><span class="tooltip-350-120"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('Enter one file name per line.', 'bulletproof-security').'<br>'.__('Example:', 'bulletproof-security').'<br>mysql.sock<br>.s.PGSQL.5432<br>.per-user<br>'.__('Click the MScan Read Me help button for more help info.', 'bulletproof-security').'</span></span></font></strong><br>';
1049
  // trimming whitespace does not work because I am not trimming newlines or returns
1050
+ echo '<textarea class="text-area-340x60" name="mscan_exclude_tmp_files" style="width:340px;height:60px;margin-bottom:5px" tabindex="1">'.esc_html( trim(stripslashes($mscan_exclude_tmp_files), " \t\0\x0B") ).'</textarea>';
1051
  echo '<input type="hidden" name="scrolltoExcludeTmpFiles" id="scrolltoExcludeTmpFiles" value="'.esc_html( $scrolltoExcludeTmpFiles ).'" />';
1052
  echo '<br>';
1053
 
1054
  echo '<label for="bps-mscan-label">'.__('Scheduled Scan Frequency (BPS Pro only)', 'bulletproof-security').'</label><br>';
1055
  echo '<select name="mscan_scan_frequency_select" class="form-340" style="margin-bottom:15px">';
1056
+ echo '<option value="Off"'. selected('Off', $mscan_scan_frequency).'>'.__('Scheduled Scan Off', 'bulletproof-security').'</option>';
1057
+ echo '<option value="60"'. selected('60', $mscan_scan_frequency).'>'.__('Run Scan Every 60 Minutes', 'bulletproof-security').'</option>';
1058
+ echo '<option value="180"'. selected('180', $mscan_scan_frequency).'>'.__('Run Scan Every 3 Hours', 'bulletproof-security').'</option>';
1059
+ echo '<option value="360"'. selected('360', $mscan_scan_frequency).'>'.__('Run Scan Every 6 Hours', 'bulletproof-security').'</option>';
1060
+ echo '<option value="720"'. selected('720', $mscan_scan_frequency).'>'.__('Run Scan Every 12 Hours', 'bulletproof-security').'</option>';
1061
+ echo '<option value="1440"'. selected('1440', $mscan_scan_frequency).'>'.__('Run Scan Every 24 Hours', 'bulletproof-security').'</option>';
1062
  echo '</select><br>';
1063
 
1064
  echo "<p><input type=\"submit\" name=\"Submit-MScan-Options\" value=\"".esc_attr__('Save MScan Options', 'bulletproof-security')."\" class=\"button bps-button\" onclick=\"return confirm('".__('Click OK to save MScan Options or click Cancel', 'bulletproof-security')."')\" /></p></form>";
1066
  echo '</div>';
1067
  echo '</td>';
1068
  echo '<td style="border:none">';
1069
+ echo '<div id="MScanOptions" style="margin:19px 0px 0px 0px;float:left;">';
1070
 
1071
+ /*
1072
  echo '<form name="MScanTimeEstimate" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1073
  wp_nonce_field('bulletproof_security_mscan_time_estimate');
1074
  echo "<input type=\"submit\" id=\"bps-mscan-time-estimate-button\" name=\"Submit-MScan-Time-Estimate\" value=\"".esc_attr__('Scan Time Estimate Tool', 'bulletproof-security')."\" class=\"button bps-button\" style=\"width:175px;height:auto;white-space:normal\" onclick=\"return confirm('".__('IMPORTANT: You can stop the scan time estimate if it hangs or is taking too long by clicking the Stop Scan button.\n\n-------------------------------------------------------------\n\nThis tool allows you to check the estimated total scan time of a scan based on your MScan option settings without actually performing/running a scan. Note: This tool does not affect or change any previous scan results except for the Total Scan Time, which will be changed to the estimated scan time.\n\n-------------------------------------------------------------\n\nExample Usage: You can check or uncheck Hosting Account Root Folders checkboxes and change any other MScan option settings, save your MScan option settings and then run the Scan Time Estimate Tool to get the total estimated time that the actual scan will take. For additional help information click the MScan Read Me help button.\n\n-------------------------------------------------------------\n\nClick OK to get a scan time estimate or click Cancel', 'bulletproof-security')."')\" />";
1075
+ echo '</form><br>';
1076
+ */
 
 
 
 
1077
 
1078
+ echo '<form name="MScanDeleteHashes" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1079
+ wp_nonce_field('bulletproof_security_mscan_delete_hashes');
1080
+ echo "<input type=\"submit\" name=\"Submit-MScan-Delete-Hashes\" value=\"".esc_attr__('Delete File Hashes Tool', 'bulletproof-security')."\" class=\"button bps-button\" style=\"width:175px;height:auto;white-space:normal\" onclick=\"return confirm('".__('CAUTION: Please click the MScan Read Me help button before using this tool. This tool allows you to delete the Plugin and Theme file hashes.\n\n-------------------------------------------------------------\n\nThis tool should ONLY be used if there is a problem when scanning Plugin and Theme files.\n\n-------------------------------------------------------------\n\nClick OK to delete Plugin and Theme file hashes or click Cancel', 'bulletproof-security')."')\" />";
1081
  echo '</form>';
1082
+ ?>
1083
+
1084
+ <div id="CC-Import" style="margin:24px 0px 20px 0px">
1085
+ <form name="MScanPluginZipUpload" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post" enctype="multipart/form-data">
1086
+ <?php wp_nonce_field('bulletproof_security_plugin_zip_upload');
1087
+ bpsPro_mscan_plugin_zip_upload();
1088
+ ?>
1089
+ <input type="file" name="bps_plugin_zip_upload[]" id="bps_plugin_zip_upload" multiple="multiple" />
1090
+ <input type="submit" name="Submit-Plugin-Zip-Upload" class="button bps-button" style="margin-top:1px;" value="<?php esc_attr_e('Upload Plugin Zip Files', 'bulletproof-security') ?>" onclick="return confirm('<?php $text = __('Clicking OK will upload Plugin Zip files to the /wp-content/bps-backup/plugin-hashes/ folder. The zip files will be extracted, MD5 file hashes will be created and the zip files will be deleted.', 'bulletproof-security').'\n\n'.$bpsSpacePop.'\n\n'.__('Zip files MUST be named using this exact format: plugin-name.x.x.zip where x is the actual current version number of the plugin in the zip file.', 'bulletproof-security').'\n\n'.$bpsSpacePop.'\n\n'.__('Click OK to upload Plugin Zip files or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
1091
+ </form>
1092
+ </div>
1093
+
1094
+ <div id="CC-Import" style="margin:20px 0px 20px 0px">
1095
+ <form name="MScanThemeZipUpload" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ); ?>" method="post" enctype="multipart/form-data">
1096
+ <?php wp_nonce_field('bulletproof_security_theme_zip_upload');
1097
+ bpsPro_mscan_theme_zip_upload();
1098
+ ?>
1099
+ <input type="file" name="bps_theme_zip_upload[]" id="bps_theme_zip_upload" multiple="multiple" />
1100
+ <input type="submit" name="Submit-Theme-Zip-Upload" class="button bps-button" style="margin-top:1px;" value="<?php esc_attr_e('Upload Theme Zip Files', 'bulletproof-security') ?>" onclick="return confirm('<?php $text = __('Clicking OK will upload Theme Zip files to the /wp-content/bps-backup/theme-hashes/ folder. The zip files will be extracted, MD5 file hashes will be created and the zip files will be deleted.', 'bulletproof-security').'\n\n'.$bpsSpacePop.'\n\n'.__('Zip files MUST be named using this exact format: theme-name.x.x.zip where x is the actual current version number of the theme in the zip file.', 'bulletproof-security').'\n\n'.$bpsSpacePop.'\n\n'.__('Click OK to upload Theme Zip files or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
1101
+ </form>
1102
+ </div>
1103
+
1104
+ <?php
1105
 
1106
  echo '</div>';
1107
  echo '</td>';
1109
  echo '</tbody>';
1110
  echo '</table>';
1111
 
1112
+ // Plugin Zip file upload Form
1113
+ // Note: ModSecurity randomly breaks file uploads: https://forum.ait-pro.com/forums/topic/file-upload-does-not-work-no-errors-modsecurity/
1114
+ function bpsPro_mscan_plugin_zip_upload() {
1115
+ global $bps_topDiv, $bps_bottomDiv;
1116
+
1117
+ if ( isset( $_POST['Submit-Plugin-Zip-Upload'] ) && current_user_can('manage_options') ) {
1118
+ check_admin_referer( 'bulletproof_security_plugin_zip_upload' );
1119
+
1120
+ if ( ! is_dir( WP_CONTENT_DIR . '/bps-backup/plugin-hashes' ) ) {
1121
+ @mkdir( WP_CONTENT_DIR . '/bps-backup/plugin-hashes', 0755, true );
1122
+ @chmod( WP_CONTENT_DIR . '/bps-backup/plugin-hashes/', 0755 );
1123
+ }
1124
+
1125
+ echo $bps_topDiv;
1126
+
1127
+ $plugin_hashes_dir = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/';
1128
+ $allowed_file_types = array( 'zip' );
1129
+
1130
+ foreach ( $_FILES['bps_plugin_zip_upload']['error'] as $key => $error ) {
1131
+
1132
+ if ( $error == UPLOAD_ERR_OK ) {
1133
+
1134
+ $file_name = $_FILES['bps_plugin_zip_upload']['name'][$key];
1135
+ $file_tmp_name = $_FILES['bps_plugin_zip_upload']['tmp_name'][$key];
1136
+ $file_dest = $plugin_hashes_dir . $file_name;
1137
+ $file_ext = pathinfo( $file_name, PATHINFO_EXTENSION );
1138
+
1139
+ if ( in_array( strtolower($file_ext), $allowed_file_types ) && preg_match( '/(.*)\.[\d\.]{1,}\.zip/', $file_name ) ) {
1140
+
1141
+ if ( move_uploaded_file($file_tmp_name, $file_dest) ) {
1142
+
1143
+ $text = '<strong><font color="green">'.__('Plugin Zip File Upload Successful: ', 'bulletproof-security').$file_dest.'</font></strong><br>';
1144
+ echo $text;
1145
+
1146
+ $plugin_name_version_array = array();
1147
+
1148
+ foreach ( $_FILES['bps_plugin_zip_upload']['name'] as $key => $value ) {
1149
+ // Plugin File Name: plugin-name.1.0.zip
1150
+ $plugin_name = strstr($value, '.', true); // plugin-name
1151
+ $plugin_version = strstr($value, '.'); // .1.0.zip
1152
+ $plugin_version_nodot = substr($plugin_version, 1); // 1.0.zip
1153
+ $plugin_version_replace = str_replace( ".zip", "", $plugin_version_nodot ); // 1.0
1154
+ $plugin_name_version_array[$plugin_name] = $plugin_version_replace;
1155
+ }
1156
+
1157
+ $zip_upload_options = 'bulletproof_security_options_mscan_zip_upload';
1158
+ $mscan_zip_db_options = get_option('bulletproof_security_options_mscan_zip_upload');
1159
+ $bps_mscan_theme_zip_upload = isset($mscan_zip_db_options['bps_mscan_theme_zip_upload']) ? $mscan_zip_db_options['bps_mscan_theme_zip_upload'] : array('' => '');
1160
+
1161
+ $Mscan_Zip_Options = array(
1162
+ 'bps_mscan_plugin_zip_upload' => $plugin_name_version_array,
1163
+ 'bps_mscan_theme_zip_upload' => $bps_mscan_theme_zip_upload
1164
+ );
1165
+
1166
+ if ( ! get_option( $zip_upload_options ) ) {
1167
+
1168
+ foreach( $Mscan_Zip_Options as $key => $value ) {
1169
+ update_option('bulletproof_security_options_mscan_zip_upload', $Mscan_Zip_Options);
1170
+ }
1171
+
1172
+ } else {
1173
+
1174
+ $plugin_name_version_update_array = array();
1175
+
1176
+ foreach ( $mscan_zip_db_options['bps_mscan_plugin_zip_upload'] as $key3 => $value3 ) {
1177
+
1178
+ foreach ( $plugin_name_version_array as $key4 => $value4 ) {
1179
+
1180
+ if ( ! empty($key3) ) {
1181
+ $plugin_name_version_update_array[$key3] = $value3;
1182
+ }
1183
+
1184
+ if ( $key3 == $key4 ) {
1185
+ $plugin_name_version_update_array[$key3] = $value4;
1186
+ }
1187
+
1188
+ if ( ! in_array( $key4, $mscan_zip_db_options['bps_mscan_plugin_zip_upload'] ) ) {
1189
+ $plugin_name_version_update_array[$key4] = $value4;
1190
+ }
1191
+ }
1192
+ }
1193
+
1194
+ $Mscan_Zip_Options = array(
1195
+ 'bps_mscan_plugin_zip_upload' => $plugin_name_version_update_array,
1196
+ 'bps_mscan_theme_zip_upload' => $bps_mscan_theme_zip_upload
1197
+ );
1198
+
1199
+ foreach( $Mscan_Zip_Options as $key => $value ) {
1200
+ update_option('bulletproof_security_options_mscan_zip_upload', $Mscan_Zip_Options);
1201
+ }
1202
+ }
1203
+
1204
+ } else {
1205
+
1206
+ $text = '<strong><font color="#fb0101">'.__('Error: Zip File Upload Failed: ', 'bulletproof-security').'</font><font color="black">'.__('Unable to move this uploaded zip file: ', 'bulletproof-security').$file_name.__(' to this folder: ', 'bulletproof-security').$file_dest.'.</font></strong><br>';
1207
+ echo $text;
1208
+ }
1209
+
1210
+ } else {
1211
+
1212
+ $text = '<strong><font color="#fb0101">'.__('File Extension/Type or Filename Error: ', 'bulletproof-security').'</font><font color="black"> '.$file_name.__(' is either not a .zip file or the .zip file is not named correctly. Only .zip files are allowed to be uploaded. Zip files MUST be named using this exact filename format: plugin-name.x.x.zip where x is the actual current version of the plugin in the zip file.', 'bulletproof-security').'</font></strong><br>';
1213
+ echo $text;
1214
+ }
1215
+
1216
+ } else {
1217
+
1218
+ $text = '<strong><font color="#fb0101">'.__('Error: No zip file chosen: ', 'bulletproof-security').'</font><font color="black">'.__('You need to choose zip files before clicking the Upload Plugin Zip Files button.', 'bulletproof-security').'</font></strong><br>';
1219
+ echo $text;
1220
+ }
1221
+ }
1222
+ echo $bps_bottomDiv;
1223
+ }
1224
+ }
1225
+
1226
+ // Theme Zip file upload Form
1227
+ // Note: ModSecurity randomly breaks file uploads: https://forum.ait-pro.com/forums/topic/file-upload-does-not-work-no-errors-modsecurity/
1228
+ function bpsPro_mscan_theme_zip_upload() {
1229
+ global $bps_topDiv, $bps_bottomDiv;
1230
+
1231
+ if ( isset( $_POST['Submit-Theme-Zip-Upload'] ) && current_user_can('manage_options') ) {
1232
+ check_admin_referer( 'bulletproof_security_theme_zip_upload' );
1233
+
1234
+ if ( ! is_dir( WP_CONTENT_DIR . '/bps-backup/theme-hashes' ) ) {
1235
+ @mkdir( WP_CONTENT_DIR . '/bps-backup/theme-hashes', 0755, true );
1236
+ @chmod( WP_CONTENT_DIR . '/bps-backup/theme-hashes/', 0755 );
1237
+ }
1238
+
1239
+ echo $bps_topDiv;
1240
+
1241
+ $theme_hashes_dir = WP_CONTENT_DIR . '/bps-backup/theme-hashes/';
1242
+ $allowed_file_types = array( 'zip' );
1243
+
1244
+ foreach ( $_FILES['bps_theme_zip_upload']['error'] as $key => $error ) {
1245
+
1246
+ if ( $error == UPLOAD_ERR_OK ) {
1247
+
1248
+ $file_name = $_FILES['bps_theme_zip_upload']['name'][$key];
1249
+ $file_tmp_name = $_FILES['bps_theme_zip_upload']['tmp_name'][$key];
1250
+ $file_dest = $theme_hashes_dir . $file_name;
1251
+ $file_ext = pathinfo( $file_name, PATHINFO_EXTENSION );
1252
+
1253
+ if ( in_array( strtolower($file_ext), $allowed_file_types ) && preg_match( '/(.*)\.[\d\.]{1,}\.zip/', $file_name ) ) {
1254
+
1255
+ if ( move_uploaded_file($file_tmp_name, $file_dest) ) {
1256
+
1257
+ $text = '<strong><font color="green">'.__('Theme Zip File Upload Successful: ', 'bulletproof-security').$file_dest.'</font></strong><br>';
1258
+ echo $text;
1259
+
1260
+ $theme_name_version_array = array();
1261
+
1262
+ foreach ( $_FILES['bps_theme_zip_upload']['name'] as $key => $value ) {
1263
+ // Theme File Name: theme-name.1.0.zip
1264
+ $theme_name = strstr($value, '.', true); // theme-name
1265
+ $theme_version = strstr($value, '.'); // .1.0.zip
1266
+ $theme_version_nodot = substr($theme_version, 1); // 1.0.zip
1267
+ $theme_version_replace = str_replace( ".zip", "", $theme_version_nodot ); // 1.0
1268
+ $theme_name_version_array[$theme_name] = $theme_version_replace;
1269
+ }
1270
+
1271
+ $zip_upload_options = 'bulletproof_security_options_mscan_zip_upload';
1272
+ $mscan_zip_db_options = get_option('bulletproof_security_options_mscan_zip_upload');
1273
+ $bps_mscan_plugin_zip_upload = isset($mscan_zip_db_options['bps_mscan_plugin_zip_upload']) ? $mscan_zip_db_options['bps_mscan_plugin_zip_upload'] : array('' => '');
1274
+
1275
+ $Mscan_Zip_Options = array(
1276
+ 'bps_mscan_plugin_zip_upload' => $bps_mscan_plugin_zip_upload,
1277
+ 'bps_mscan_theme_zip_upload' => $theme_name_version_array
1278
+ );
1279
+
1280
+ if ( ! get_option( $zip_upload_options ) ) {
1281
+
1282
+ foreach( $Mscan_Zip_Options as $key => $value ) {
1283
+ update_option('bulletproof_security_options_mscan_zip_upload', $Mscan_Zip_Options);
1284
+ }
1285
+
1286
+ } else {
1287
+
1288
+ $theme_name_version_update_array = array();
1289
+
1290
+ foreach ( $mscan_zip_db_options['bps_mscan_theme_zip_upload'] as $key3 => $value3 ) {
1291
+
1292
+ foreach ( $theme_name_version_array as $key4 => $value4 ) {
1293
+
1294
+ if ( ! empty($key3) ) {
1295
+ $theme_name_version_update_array[$key3] = $value3;
1296
+ }
1297
+
1298
+ if ( $key3 == $key4 ) {
1299
+ $theme_name_version_update_array[$key3] = $value4;
1300
+ }
1301
+
1302
+ if ( ! in_array( $key4, $mscan_zip_db_options['bps_mscan_theme_zip_upload'] ) ) {
1303
+ $theme_name_version_update_array[$key4] = $value4;
1304
+ }
1305
+ }
1306
+ }
1307
+
1308
+ $Mscan_Zip_Options = array(
1309
+ 'bps_mscan_plugin_zip_upload' => $bps_mscan_plugin_zip_upload,
1310
+ 'bps_mscan_theme_zip_upload' => $theme_name_version_update_array
1311
+ );
1312
+
1313
+ foreach( $Mscan_Zip_Options as $key => $value ) {
1314
+ update_option('bulletproof_security_options_mscan_zip_upload', $Mscan_Zip_Options);
1315
+ }
1316
+ }
1317
+
1318
+ } else {
1319
+
1320
+ $text = '<strong><font color="#fb0101">'.__('Error: Zip File Upload Failed: ', 'bulletproof-security').'</font><font color="black">'.__('Unable to move this uploaded zip file: ', 'bulletproof-security').$file_name.__(' to this folder: ', 'bulletproof-security').$file_dest.'.</font></strong><br>';
1321
+ echo $text;
1322
+ }
1323
+
1324
+ } else {
1325
+
1326
+ $text = '<strong><font color="#fb0101">'.__('File Extension/Type or Filename Error: ', 'bulletproof-security').'</font><font color="black"> '.$file_name.__(' is either not a .zip file or the .zip file is not named correctly. Only .zip files are allowed to be uploaded. Zip files MUST be named using this exact filename format: theme-name.x.x.zip where x is the actual current version of the theme in the zip file.', 'bulletproof-security').'</font></strong><br>';
1327
+ echo $text;
1328
+ }
1329
+
1330
+ } else {
1331
+
1332
+ $text = '<strong><font color="#fb0101">'.__('Error: No zip file chosen: ', 'bulletproof-security').'</font><font color="black">'.__('You need to choose zip files before clicking the Upload Theme Zip Files button.', 'bulletproof-security').'</font></strong><br>';
1333
+ echo $text;
1334
+ }
1335
+ }
1336
+ echo $bps_bottomDiv;
1337
+ }
1338
+ }
1339
+
1340
  $UIoptions = get_option('bulletproof_security_options_theme_skin');
1341
 
1342
  if ( isset($UIoptions['bps_ui_theme_skin']) && $UIoptions['bps_ui_theme_skin'] == 'blue' ) { ?>
1564
  }
1565
  }
1566
 
1567
+ $mscan_file_scan_help_text = '<div class="mscan-report-row-small"><strong>'.__('File hash comparison scan results are 100% accurate. WP Core, Plugin and Theme files are scanned using file hash comparison scanning.', 'bulletproof-security').'<br>'.__('Pattern matching scan results are less accurate and will usually detect some false positive matches. All other files that are not WP Core, Plugin and Theme files are scanned using pattern matching scanning.', 'bulletproof-security').'<br>'.__('You can View, Ignore and Delete files detected as suspicious using the Form below. Before deleting any files make a backup of those files on your computer not on your hosting account.', 'bulletproof-security').'<br>'.__('And of course check the file contents of suspicious files to see if they contain hacker code or are false positive matches. Use the Ignore File checkbox option to ignore false postive matches.', 'bulletproof-security').'<br>'.__('When you ignore a file it will no longer be scanned in any future scans. When you unignore an ignored file it will be scanned in future scans.', 'bulletproof-security').'</strong></div>';
1568
+ echo $mscan_file_scan_help_text;
1569
+
1570
  echo '<form name="MScanSuspiciousFiles" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1571
  wp_nonce_field('bulletproof_security_mscan_suspicious_files');
1572
 
1586
  echo '<th scope="col" style="width:7%;"><input type="checkbox" class="checkallUnignore" style="text-align:left;margin-left:2px;" /><br><strong>'.__('Unignore<br>File', 'bulletproof-security').'</strong></th>';
1587
  echo '<th scope="col" style="width:7%;"><input type="checkbox" class="checkallDelete" style="text-align:left;margin-left:2px;" /><br><strong>'.__('Delete<br>File', 'bulletproof-security').'</strong></th>';
1588
  echo '<th scope="col" style="width:42%;"><strong>'.__('File Path', 'bulletproof-security').'</strong></th>';
1589
+ echo '<th scope="col" style="width:10%;"><strong>'.__('File Hash or<br>Pattern Match', 'bulletproof-security').'</strong></th>';
1590
  echo '<th scope="col" style="width:10%;"><strong>'.__('Scan<br>Time', 'bulletproof-security').'</strong></th>';
1591
  echo '</tr>';
1592
  echo '</thead>';
1629
 
1630
  echo "<td><input type=\"checkbox\" id=\"deletefile\" name=\"mscan[$row->mscan_path]\" value=\"deletefile\" class=\"deletefileALL\" /><br><span style=\"font-size:10px;\">".__('Delete', 'bulletproof-security')."</span></td>";
1631
  echo '<td>'.$row->mscan_path.'</td>';
1632
+
1633
+ if ( preg_match( '/Altered\sor\sunknown(.*)/', $row->mscan_pattern ) ) {
1634
+ $hash_pattern = 'File Hash:<br>';
1635
+ } else {
1636
+ $hash_pattern = 'Pattern Match:<br>';
1637
+ }
1638
+
1639
+ echo '<td style="max-width:200px">'.$hash_pattern.esc_html($row->mscan_pattern).'</td>';
1640
  echo '<td>'.$row->mscan_time.'</td>';
1641
  echo '</tr>';
1642
  }
1867
  }
1868
  }
1869
 
1870
+ $mscan_db_scan_help_text = '<div class="mscan-report-row-small"><strong>'.__('Database scanning uses pattern matching scanning.', 'bulletproof-security').'<br>'.__('Pattern matching scan results will usually detect some false positive matches.', 'bulletproof-security').'<br>'.__('This form allows you to view, ignore or unignore suspicious DB Entries. Note: The view option displays the DB Table, Column, Row ID and the MScan Pattern Match that was detected by the MScan scan.', 'bulletproof-security').'<br>'.__('Before deleting any database data make a backup of your database.', 'bulletproof-security').'<br>'.__('Use phpMyAdmin or a similar tool to check your database Row where the suspicious code was found.', 'bulletproof-security').'<br>'.__('When you ignore a DB Entry it will no longer be scanned in any future scans. When you unignore an ignored DB Entry it will be scanned in future scans.', 'bulletproof-security').'</strong></div>';
1871
+ echo $mscan_db_scan_help_text;
1872
+
1873
  echo '<form name="MScanSuspiciousDBEntries" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" method="post">';
1874
  wp_nonce_field('bulletproof_security_mscan_suspicious_db_entries');
1875
 
1989
 
1990
  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
1991
  <tr>
1992
+ <td class="bps-table_title"><h2><?php _e('MScan Log ~ ', 'bulletproof-security'); ?><span style="font-size:.75em;"><?php _e('Logs extensive details about each scan that you run.', 'bulletproof-security'); ?></span></h2></td>
1993
  </tr>
1994
  <tr>
1995
  <td class="bps-table_cell_help">
2057
  <form name="MScanLogModDate" action="options.php#bps-tabs-2" method="post">
2058
  <?php settings_fields('bulletproof_security_options_MScan_log'); ?>
2059
  <?php $MScanLogoptions = get_option('bulletproof_security_options_MScan_log');
2060
+ $bps_mscan_log_date_mod = ! isset($MScanLogoptions['bps_mscan_log_date_mod']) ? '' : $MScanLogoptions['bps_mscan_log_date_mod'];
2061
  ?>
2062
  <label for="QLog"><strong><?php _e('MScan Log Last Modified Time:', 'bulletproof-security'); ?></strong></label><br />
2063
  <label for="QLog"><strong><?php echo bpsPro_MScan_ModTimeDiff(); ?></strong><?php echo $bps_mscan_log_date_mod; ?></label><br />
2070
  if ( isset( $_POST['Submit-Delete-MScan-Log'] ) && current_user_can('manage_options') ) {
2071
  check_admin_referer( 'bulletproof_security_delete_mscan_log' );
2072
 
2073
+ ?>
2074
+ <script type="text/javascript">
2075
+ /* <![CDATA[ */
2076
+ // Note: Active Tab numbering is literal from left to right.
2077
+ jQuery(document).ready(function($){
2078
+ $( "#bps-tabs" ).tabs({
2079
+ active: 1
2080
+ });
2081
+ });
2082
+ /* ]]> */
2083
+ </script>
2084
+
2085
+ <?php
2086
+
2087
+ $options = get_option('bulletproof_security_options_MScan_log');
2088
+ $last_modified_time_db = $options['bps_mscan_log_date_mod'];
2089
+ $time = strtotime($last_modified_time_db);
2090
+ $MscanLog = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
2091
+ $MscanLogMaster = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/mscan_log.txt';
2092
 
2093
+ if ( copy($MscanLogMaster, $MscanLog) ) {
2094
+ touch($MscanLog, $time);
2095
 
2096
  echo $bps_topDiv;
2097
  $text = '<font color="green"><strong>'.__('Success! Your MScan Log has been deleted and replaced with a new blank MScan Log file.', 'bulletproof-security').'</strong></font>';
2197
  });
2198
  /* ]]> */
2199
  </script>
2200
+
2201
  </div>
2202
 
2203
  </td>
2208
 
2209
  <div id="bps-tabs-3" class="bps-tab-page">
2210
 
2211
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
2212
+ <tr>
2213
+ <td class="bps-table_title"><h2><?php _e('MScan Report ~ ', 'bulletproof-security'); ?><span style="font-size:.75em;"><?php _e('Displays the current scan results data. Click the Save MScan Report button to save MScan Reports.', 'bulletproof-security'); ?></span></h2></td>
2214
+ </tr>
2215
+ <tr>
2216
+ <td class="bps-table_cell_help">
2217
+
2218
+ <h3 style="margin:0px 0px 10px 0px;"><?php _e('MScan Report', 'bulletproof-security'); ?> <button id="bps-open-modal3" class="button bps-modal-button"><?php _e('Read Me', 'bulletproof-security'); ?></button></h3>
2219
+
2220
+ <div id="bps-modal-content3" class="bps-dialog-hide" title="<?php _e('MScan Report', 'bulletproof-security'); ?>">
2221
+ <p><?php echo $bps_modal_content3; ?></p>
2222
+ </div>
2223
+
2224
+ <form name="MScanSaveReport" action="<?php echo admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php#bps-tabs-3' ); ?>" method="post">
2225
+ <?php wp_nonce_field('bulletproof_security_mscan_save_report'); ?>
2226
+ <input type="submit" id="bps-mscan-save-report-button" name="Submit-MScan-Save-Report" style="margin:5px 0px 15px 0px;" value="<?php esc_attr_e('Save MScan Report', 'bulletproof-security') ?>" class="button bps-button" onclick="return confirm('<?php $text = __('Click OK to save the MScan Report or click Cancel.', 'bulletproof-security'); echo $text; ?>')" />
2227
+ </form>
2228
+
2229
+ <style>
2230
+ #bps-container div.mscan-report-row-title-large{font-size:1.5em;font-weight:600;margin:0px 0px 10px 0px}
2231
+ #bps-container div.mscan-report-row-title{font-size:1.25em;font-weight:600;margin:0px 0px 5px 0px}
2232
+ #bps-container div.mscan-report-row{font-size:1.13em;margin:0px 0px 0px 0px}
2233
+ #bps-container div.mscan-report-row-small{font-size:1em;margin:0px 0px 10px 0px}
2234
+ </style>
2235
+
2236
+ <?php
2237
+
2238
+ // MScan Report: Displays the current Report & contains the MScan Save Report Form processing code.
2239
+ function bpsPro_mscan_report() {
2240
+ global $wpdb, $wp_version, $bps_topDiv, $bps_bottomDiv;
2241
+
2242
+ $MScan_options = get_option('bulletproof_security_options_MScan');
2243
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
2244
+
2245
+ if ( ! isset($MScan_status['bps_mscan_last_scan_timestamp']) || isset($MScan_status['bps_mscan_last_scan_timestamp']) && $MScan_status['bps_mscan_last_scan_timestamp'] == '' ) {
2246
+
2247
+ echo '<h2>'.__('No Scan Results To Display: No scans have been run yet or you clicked the MScan Reset button.', 'bulletproof-security').'</h2>';
2248
+ echo '<div id="bps-page-height" style="height:400px"></div>';
2249
+
2250
+ } else {
2251
+
2252
+ $bps_mscan_total_time = $MScan_status['bps_mscan_total_time'];
2253
+
2254
+ $hours = (int)($bps_mscan_total_time / 60 / 60);
2255
+ $minutes = (int)($bps_mscan_total_time / 60) - $hours * 60;
2256
+ $seconds = (int)$bps_mscan_total_time - $hours * 60 * 60 - $minutes * 60;
2257
+ $hours_format = $hours == 0 ? "00" : $hours;
2258
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
2259
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
2260
+
2261
+ $mscan_report_timestamp = '<div class="mscan-report-row-title-large">'.__('Scan Date|Time: ', 'bulletproof-security') . $MScan_status['bps_mscan_last_scan_timestamp'].'</div>';
2262
+ echo $mscan_report_timestamp;
2263
+
2264
+ $mscan_report_website_domain = '<div class="mscan-report-row-title">'.__('Website: ', 'bulletproof-security') . get_bloginfo( 'url' ).'</div>';
2265
+ echo $mscan_report_website_domain;
2266
+
2267
+ $mscan_report_total_scan_time = '<div class="mscan-report-row-title">'.__('Scan Completion Time: ', 'bulletproof-security') . $hours_format . ':'. $minutes_format . ':' . $seconds_format.'</div>';
2268
+ echo $mscan_report_total_scan_time;
2269
+
2270
+ $mscan_report_total_files_scanned = '<div class="mscan-report-row-title">'.__('Total Files Scanned: ', 'bulletproof-security') . $MScan_status['bps_mscan_total_all_scannable_files'].'</div>';
2271
+ echo $mscan_report_total_files_scanned;
2272
+
2273
+ $mscan_report_total_skipped_files = '<div class="mscan-report-row-title">'.__('Total Skipped Files: ', 'bulletproof-security') . $MScan_status['bps_mscan_total_skipped_files'].'</div>';
2274
+ echo $mscan_report_total_skipped_files;
2275
+
2276
+ if ( $MScan_status['bps_mscan_total_suspect_files'] == '' ) {
2277
+ $bps_mscan_total_suspect_files = 0;
2278
+ } else {
2279
+ $bps_mscan_total_suspect_files = $MScan_status['bps_mscan_total_suspect_files'];
2280
+ }
2281
+
2282
+ $mscan_report_total_suspicious_files = '<div class="mscan-report-row-title">'.__('Total Suspicious Files: ', 'bulletproof-security') .$bps_mscan_total_suspect_files.'</div>';
2283
+ echo $mscan_report_total_suspicious_files;
2284
+
2285
+ if ( $MScan_status['bps_mscan_total_suspect_db'] == '' ) {
2286
+ $bps_mscan_total_suspect_db = 0;
2287
+ } else {
2288
+ $bps_mscan_total_suspect_db = $MScan_status['bps_mscan_total_suspect_db'];
2289
+ }
2290
+
2291
+ $mscan_report_total_suspicious_db_entries = '<div class="mscan-report-row-title" style="border-bottom:2px solid #999999;padding-bottom:10px">'.__('Total Suspicious DB Entries: ', 'bulletproof-security') . $bps_mscan_total_suspect_db.'</div>';
2292
+ echo $mscan_report_total_suspicious_db_entries;
2293
+
2294
+ $mscan_report_option_settings = '<div class="mscan-report-row-title-large" style="padding-top:5px">'.__('MScan Option Settings: ', 'bulletproof-security') . '</div>';
2295
+ echo $mscan_report_option_settings;
2296
+
2297
+ $mscan_dirs_array = array();
2298
+
2299
+ foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
2300
+
2301
+ if ( $value == '1' ) {
2302
+ $mscan_dirs_array[] = $key;
2303
+ }
2304
+ }
2305
+
2306
+ if ( $MScan_options['bps_mscan_dirs'] != '' ) {
2307
+ $mscan_dirs = implode( ', ', $mscan_dirs_array );
2308
+ $mscan_report_folders_to_scan = '<div class="mscan-report-row"><strong>'.__('Website Folders & Files To Scan: ', 'bulletproof-security'). '</strong>' .$mscan_dirs.'</div>';
2309
+ echo $mscan_report_folders_to_scan;
2310
+ } else {
2311
+ $mscan_report_folders_to_scan = '<div class="mscan-report-row"><strong>'.__('Website Folders & Files To Scan: ', 'bulletproof-security'). '</strong>' .__('None', 'bulletproof-security').'</div>';
2312
+ echo $mscan_report_folders_to_scan;
2313
+ }
2314
+
2315
+ if ( $MScan_options['mscan_exclude_dirs'] != '' ) {
2316
+
2317
+ $mscan_exclude_dirs = implode( '', explode( "\n", $MScan_options['mscan_exclude_dirs'] ) );
2318
+ $mscan_exclude_dirs_replace = str_replace( array( "", "\n", "\r\n", "\r" ), ", ", $mscan_exclude_dirs );
2319
+ $mscan_report_excluded_dirs = '<div class="mscan-report-row"><strong>'.__('Excluded Folders: ', 'bulletproof-security'). '</strong>' .$mscan_exclude_dirs_replace.'</div>';
2320
+ echo $mscan_report_excluded_dirs;
2321
+ } else {
2322
+ $mscan_report_excluded_dirs = '<div class="mscan-report-row"><strong>'.__('Excluded Folders: ', 'bulletproof-security'). '</strong>' .__('None', 'bulletproof-security').'</div>';
2323
+ echo $mscan_report_excluded_dirs;
2324
+ }
2325
+
2326
+ $mscan_report_max_file_size = '<div class="mscan-report-row"><strong>'.__('Max File Size Limit to Scan: ', 'bulletproof-security'). '</strong>' .$MScan_options['mscan_max_file_size'].' KB</div>';
2327
+ echo $mscan_report_max_file_size;
2328
+
2329
+ $mscan_report_max_time_limit = '<div class="mscan-report-row"><strong>'.__('Max Time Limit to Scan: ', 'bulletproof-security'). '</strong>' .$MScan_options['mscan_max_time_limit'].' Seconds</div>';
2330
+ echo $mscan_report_max_time_limit;
2331
+
2332
+ $mscan_report_db_scan = '<div class="mscan-report-row"><strong>'.__('Scan Database: ', 'bulletproof-security'). '</strong>' .$MScan_options['mscan_scan_database'].'</div>';
2333
+ echo $mscan_report_db_scan;
2334
+
2335
+ $mscan_report_skipped_file_scan = '<div class="mscan-report-row"><strong>'.__('Scan Skipped Files Only: ', 'bulletproof-security'). '</strong>' .$MScan_options['mscan_scan_skipped_files'].'</div>';
2336
+ echo $mscan_report_skipped_file_scan;
2337
+
2338
+ $mscan_report_delete_tmp_files = '<div class="mscan-report-row"><strong>'.__('Automatically Delete /tmp Files: ', 'bulletproof-security'). '</strong>' .$MScan_options['mscan_scan_delete_tmp_files'].'</div>';
2339
+ echo $mscan_report_delete_tmp_files;
2340
+
2341
+ if ( $MScan_options['mscan_exclude_tmp_files'] != '' ) {
2342
+
2343
+ $mscan_exclude_tmp_files = implode( '', explode( "\n", $MScan_options['mscan_exclude_tmp_files'] ) );
2344
+ $mscan_exclude_tmp_files_replace = str_replace( array( "", "\n", "\r\n", "\r" ), ", ", $mscan_exclude_tmp_files );
2345
+ $mscan_exclude_tmp_files_trim = trim( $mscan_exclude_tmp_files_replace, ", " );
2346
+ $mscan_report_exclude_tmp_files = '<div class="mscan-report-row"><strong>'.__('Exclude /tmp Files: ', 'bulletproof-security'). '</strong>' .$mscan_exclude_tmp_files_trim.'</div>';
2347
+ echo $mscan_report_exclude_tmp_files;
2348
+ } else {
2349
+ $mscan_report_exclude_tmp_files = '<div class="mscan-report-row"><strong>'.__('Exclude /tmp Files: ', 'bulletproof-security'). '</strong>' .__('None', 'bulletproof-security').'</div>';
2350
+ echo $mscan_report_exclude_tmp_files;
2351
+ }
2352
+
2353
+ if ( $MScan_options['mscan_scan_frequency'] == '60' ) {
2354
+ $mscan_scan_frequency = 'Run Scan Every 60 Minutes';
2355
+ } elseif ( $MScan_options['mscan_scan_frequency'] == '180' ) {
2356
+ $mscan_scan_frequency = 'Run Scan Every 3 Hours';
2357
+ } elseif ( $MScan_options['mscan_scan_frequency'] == '360' ) {
2358
+ $mscan_scan_frequency = 'Run Scan Every 6 Hours';
2359
+ } elseif ( $MScan_options['mscan_scan_frequency'] == '720' ) {
2360
+ $mscan_scan_frequency = 'Run Scan Every 12 Hours';
2361
+ } elseif ( $MScan_options['mscan_scan_frequency'] == '1440' ) {
2362
+ $mscan_scan_frequency = 'Run Scan Every 24 Hours';
2363
+ } else {
2364
+ $mscan_scan_frequency = 'Off';
2365
+ }
2366
+
2367
+ $mscan_report_scheduled_scan = '<div class="mscan-report-row" style="padding-bottom:10px"><strong>'.__('Scheduled Scan Frequency: ', 'bulletproof-security'). '</strong>' .$mscan_scan_frequency.'</div>';
2368
+ echo $mscan_report_scheduled_scan;
2369
+
2370
+ $mscan_report_file_hashes = '<div class="mscan-report-row-title-large" style="border-top:2px solid #999999;padding-top:10px">'.__('WP Core|Plugin|Theme File Hashes: ', 'bulletproof-security') . '</div>';
2371
+ echo $mscan_report_file_hashes;
2372
+
2373
+ $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
2374
+
2375
+ if ( file_exists($wp_hashes_file) ) {
2376
+ $check_string = file_get_contents($wp_hashes_file);
2377
+ $wp_core_hash_file_version = preg_match( '/WordPress\s(\d\.){1,}\d\sHashes/', $check_string, $matches );
2378
+ $wp_core_hash_file_version_replace = preg_replace( array( '/WordPress\s/', '/\sHashes/' ), "", $matches[0] );
2379
+
2380
+ $mscan_report_core_hash_version_comparison = '<div class="mscan-report-row"><strong>'.__('WP Core Hash File Version: ', 'bulletproof-security'). '</strong>' .$wp_core_hash_file_version_replace.' | <strong>'.__('WP Installed Version: ', 'bulletproof-security').'</strong>' .$wp_version.'</div>';
2381
+ echo $mscan_report_core_hash_version_comparison;
2382
+
2383
+ } else {
2384
+
2385
+ $mscan_report_core_hash_version_comparison = '<div class="mscan-report-row"><strong><font color="#fb0101">'.__('Error|Problem: ', 'bulletproof-security'). '</font></strong>' .__('The WP Core Hash File Does Not Exist', 'bulletproof-security').'</div>';
2386
+ echo $mscan_report_core_hash_version_comparison;
2387
+ }
2388
+
2389
+ $plugin_hash_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
2390
+ $theme_hash_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
2391
+
2392
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
2393
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
2394
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
2395
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
2396
+ $mscan_nodownload = get_option('bulletproof_security_options_mscan_nodownload');
2397
+ $mscan_zip_upload_options = get_option('bulletproof_security_options_mscan_zip_upload');
2398
+
2399
+ $mscan_report_plugin_hash_title = '<div class="mscan-report-row-title" style="padding-top:8px">'.__('Plugin File Hashes: ', 'bulletproof-security').'</div>';
2400
+ echo $mscan_report_plugin_hash_title;
2401
+
2402
+ $mscan_report_plugin_hash_version_comparison_array = array();
2403
+
2404
+ if ( ! file_exists($plugin_hash_file) ) {
2405
+ $mscan_report_plugin_hash_version_comparison = '<div class="mscan-report-row"><strong><font color="#fb0101">'.__('Error|Problem: ', 'bulletproof-security'). '</font></strong>' .__('The Plugin Hash File Does Not Exist', 'bulletproof-security').'</div>';
2406
+ echo $mscan_report_plugin_hash_version_comparison;
2407
+ $mscan_report_plugin_hash_version_comparison_array[] = $mscan_report_plugin_hash_version_comparison;
2408
+
2409
+ } else {
2410
+
2411
+ // Note: $value['TextDomain'] is not reliable. Use $key instead.
2412
+ $all_plugins = get_plugins();
2413
+
2414
+ $active_plugins_array = array();
2415
+ $inactive_plugins_array = array();
2416
+ $hello_dolly_plugin_array = array();
2417
+
2418
+ foreach ( $all_plugins as $key => $value ) {
2419
+
2420
+ if ( ! empty($key) ) {
2421
+
2422
+ $active_plugins = in_array( $key, apply_filters('active_plugins', get_option('active_plugins')));
2423
+
2424
+ if ( 1 == $active_plugins || is_plugin_active_for_network( $key ) ) {
2425
+
2426
+ $pos = strpos($key, '/');
2427
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
2428
+
2429
+ if ( $pos !== false ) {
2430
+
2431
+ $plugin_name = strstr($key, '/', true);
2432
+ $active_plugins_array[$plugin_name] = $value['Version'];
2433
+
2434
+ } else {
2435
+
2436
+ if ( $dolly_pos !== false ) {
2437
+
2438
+ $hello_dolly_plugin_array['hello-dolly'] = $value['Version'];
2439
+ }
2440
+ }
2441
+
2442
+ } else {
2443
+
2444
+ $pos = strpos($key, '/');
2445
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
2446
+
2447
+ if ( $pos !== false ) {
2448
+
2449
+ $plugin_name = strstr($key, '/', true);
2450
+ $inactive_plugins_array[$plugin_name] = $value['Version'];
2451
+
2452
+ } else {
2453
+
2454
+ if ( $dolly_pos !== false ) {
2455
+
2456
+ $hello_dolly_plugin_array['hello-dolly'] = $value['Version'];
2457
+ }
2458
+ }
2459
+ }
2460
+ }
2461
+ }
2462
+
2463
+ $plugins_array_merged = array_merge($active_plugins_array, $inactive_plugins_array, $hello_dolly_plugin_array);
2464
+
2465
+ $hover_icon_plugin_hash = '<strong><font color="black"><span class="tooltip-350-150"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('File hashes do not exist for this plugin. This plugin\'s files were not scanned. If you would like to scan this plugin\'s files then use the "Upload Plugin Zip Files" Form to upload a zip file for this plugin. Click the MScan 2.0 Read Me help button on the MScan 2.0 tab page and read the "Upload Plugin Zip Files" help section for more help info.', 'bulletproof-security').'</span></span></font></strong>';
2466
+
2467
+ $hover_icon_theme_hash = '<strong><font color="black"><span class="tooltip-350-150"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;left:10px;" /><span>'.__('File hashes do not exist for this theme. This theme\'s files were not scanned. If you would like to scan this themes\'s files then use the "Upload Theme Zip Files" Form to upload a zip file for this theme. Click the MScan 2.0 Read Me help button on the MScan 2.0 tab page and read the "Upload Theme Zip Files" help section for more help info.', 'bulletproof-security').'</span></span></font></strong>';
2468
+
2469
+ foreach ( $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'] as $key => $value ) {
2470
+
2471
+ foreach ( $plugins_array_merged as $key2 => $value2 ) {
2472
+
2473
+ if ( $key == $key2 && ! in_array( $key2, $mscan_nodownload['bps_plugin_nodownload'] ) ) {
2474
+
2475
+ $mscan_report_plugin_hash_version_comparison = '<div class="mscan-report-row"><strong>'.$key.__(' Plugin Hash File Version: ', 'bulletproof-security'). '</strong>' .$value.' | <strong>'.$key2.__(' Installed Version: ', 'bulletproof-security').'</strong>' .$value2.'</div>';
2476
+ echo $mscan_report_plugin_hash_version_comparison;
2477
+ $mscan_report_plugin_hash_version_comparison_array[] = $mscan_report_plugin_hash_version_comparison;
2478
+
2479
+ }
2480
+
2481
+ if ( $key == $key2 && in_array( $key2, $mscan_nodownload['bps_plugin_nodownload'] ) ) {
2482
+
2483
+ if ( isset( $mscan_zip_upload_options['bps_mscan_plugin_zip_upload'] ) && array_key_exists( $key2, $mscan_zip_upload_options['bps_mscan_plugin_zip_upload'] ) ) {
2484
+
2485
+ $mscan_report_plugin_hash_version_comparison = '<div class="mscan-report-row"><strong>'.$key.__(' Plugin Hash File Version: ', 'bulletproof-security'). '</strong>' .$value.' | <strong>'.$key2.__(' Installed Version: ', 'bulletproof-security').'</strong>' .$value2.'</div>';
2486
+ echo $mscan_report_plugin_hash_version_comparison;
2487
+ $mscan_report_plugin_hash_version_comparison_array[] = $mscan_report_plugin_hash_version_comparison;
2488
+
2489
+ } else {
2490
+
2491
+ $mscan_report_plugin_hash_version_comparison = '<div class="mscan-report-row"><strong>'.$key.__(' Plugin Hash File Version: ', 'bulletproof-security'). '</strong><strong><font color="blue">'.__('No File Hashes for This Plugin', 'bulletproof-security').'</font></strong> | <strong>'.$key2.__(' Installed Version: ', 'bulletproof-security').'</strong>' .$value2.$hover_icon_plugin_hash.'</div>';
2492
+ echo $mscan_report_plugin_hash_version_comparison;
2493
+ $mscan_report_plugin_hash_version_comparison_array[] = $mscan_report_plugin_hash_version_comparison;
2494
+ }
2495
+ }
2496
+ }
2497
+ }
2498
+ }
2499
+
2500
+ $mscan_report_theme_hash_title = '<div class="mscan-report-row-title" style="padding-top:8px">'.__('Theme File Hashes: ', 'bulletproof-security').'</div>';
2501
+ echo $mscan_report_theme_hash_title;
2502
+
2503
+ $mscan_report_theme_hash_version_comparison_array = array();
2504
+
2505
+ if ( ! file_exists($theme_hash_file) ) {
2506
+ $mscan_report_theme_hash_version_comparison = '<div class="mscan-report-row"><strong><font color="#fb0101">'.__('Error|Problem: ', 'bulletproof-security'). '</font></strong>' .__('The Theme Hash File Does Not Exist', 'bulletproof-security').'</div>';
2507
+ echo $mscan_report_theme_hash_version_comparison;
2508
+ $mscan_report_theme_hash_version_comparison_array[] = $mscan_report_theme_hash_version_comparison;
2509
+
2510
+ } else {
2511
+
2512
+ $all_themes = wp_get_themes();
2513
+ $all_themes_array = array();
2514
+
2515
+ foreach ( $all_themes as $key => $value ) {
2516
+
2517
+ if ( ! empty($key) ) {
2518
+ $all_themes_array[$key] = $value['Version'];
2519
+ }
2520
+ }
2521
+
2522
+ foreach ( $mscan_theme_hash['bps_mscan_theme_hash_version_check'] as $key => $value ) {
2523
+
2524
+ foreach ( $all_themes_array as $key2 => $value2 ) {
2525
+
2526
+ if ( $key == $key2 && ! in_array( $key2, $mscan_nodownload['bps_theme_nodownload'] ) ) {
2527
+
2528
+ $mscan_report_theme_hash_version_comparison = '<div class="mscan-report-row"><strong>'.$key.__(' Theme Hash File Version: ', 'bulletproof-security'). '</strong>' .$value.' | <strong>'.$key2.__(' Installed Version: ', 'bulletproof-security').'</strong>' .$value2.'</div>';
2529
+ echo $mscan_report_theme_hash_version_comparison;
2530
+ $mscan_report_theme_hash_version_comparison_array[] = $mscan_report_theme_hash_version_comparison;
2531
+ }
2532
+
2533
+ if ( $key == $key2 && in_array( $key2, $mscan_nodownload['bps_theme_nodownload'] ) ) {
2534
+
2535
+ if ( isset( $mscan_zip_upload_options['bps_mscan_theme_zip_upload'] ) && array_key_exists( $key2, $mscan_zip_upload_options['bps_mscan_theme_zip_upload'] ) ) {
2536
+
2537
+ $mscan_report_theme_hash_version_comparison = '<div class="mscan-report-row"><strong>'.$key.__(' Theme Hash File Version: ', 'bulletproof-security'). '</strong>' .$value.' | <strong>'.$key2.__(' Installed Version: ', 'bulletproof-security').'</strong>' .$value2.'</div>';
2538
+ echo $mscan_report_theme_hash_version_comparison;
2539
+ $mscan_report_theme_hash_version_comparison_array[] = $mscan_report_theme_hash_version_comparison;
2540
+
2541
+ } else {
2542
+
2543
+ $mscan_report_theme_hash_version_comparison = '<div class="mscan-report-row"><strong>'.$key.__(' Theme Hash File Version: ', 'bulletproof-security'). '</strong><strong><font color="blue">'.__('No File Hashes for This Theme', 'bulletproof-security').'</font></strong> | <strong>'.$key2.__(' Installed Version: ', 'bulletproof-security').'</strong>' .$value2.$hover_icon_theme_hash.'</div>';
2544
+ echo $mscan_report_theme_hash_version_comparison;
2545
+ $mscan_report_theme_hash_version_comparison_array[] = $mscan_report_theme_hash_version_comparison;
2546
+ }
2547
+ }
2548
+ }
2549
+ }
2550
+ }
2551
+
2552
+ $mscan_report_scan_results_title_spacer = '<div class="spacer" style="padding-top:10px"></div>';
2553
+ echo $mscan_report_scan_results_title_spacer;
2554
+
2555
+ $mscan_report_scan_results_title = '<div class="mscan-report-row-title-large" style="border-top:2px solid #999999;padding-top:10px">'.__('Scan Results ', 'bulletproof-security').'</div>';
2556
+ echo $mscan_report_scan_results_title;
2557
+
2558
+ $mscan_report_file_scan_help_text = '<div class="mscan-report-row-small"><strong>'.__('File hash comparison scan results are 100% accurate. WP Core, Plugin and Theme files are scanned using file hash comparison scanning.', 'bulletproof-security').'<br>'.__('Pattern matching scan results are less accurate and will usually detect some false positive matches. All other files that are not WP Core, Plugin and Theme files are scanned using pattern matching scanning.', 'bulletproof-security').'<br>'.__('You can View, Ignore and Delete files detected as suspicious using the View|Ignore|Delete Suspicious Files Form on the MScan 2.0 tab page. Before deleting any files make a backup of those files on your computer not on your hosting account.', 'bulletproof-security').'<br>'.__('And of course check the file contents of suspicious files to see if they contain hacker code or are false positive matches. Use the Ignore File checkbox option to ignore false postive matches.', 'bulletproof-security').'<br>'.__('When you ignore a file it will no longer be scanned in any future scans. When you unignore an ignored file it will be scanned in future scans.', 'bulletproof-security').'</strong></div>';
2559
+ echo $mscan_report_file_scan_help_text;
2560
+
2561
+ $mscan_report_scan_results_file_scan_array = array();
2562
+
2563
+ $MStable = $wpdb->prefix . "bpspro_mscan";
2564
+ $db_rows = 'db';
2565
+ $clean_rows = 'clean';
2566
+ $safe_rows = 'safe';
2567
+ $MScanFilesRows = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $MStable WHERE mscan_type != %s AND mscan_status != %s AND mscan_status != %s", $db_rows, $clean_rows, $safe_rows ) );
2568
+
2569
+ echo '<div id="MScanSuspectcheckall" style="">';
2570
+ echo '<table class="widefat" style="margin-bottom:20px;">';
2571
+ echo '<thead>';
2572
+ echo '<tr>';
2573
+ echo '<th scope="col" style="width:10%;"><strong>'.__('Current Status', 'bulletproof-security').'</strong></th>';
2574
+ echo '<th scope="col" style="width:50%;"><strong>'.__('File Path', 'bulletproof-security').'</strong></th>';
2575
+ echo '<th scope="col" style="width:25%;"><strong>'.__('File Hash or Pattern Match', 'bulletproof-security').'</strong></th>';
2576
+ echo '<th scope="col" style="width:15%;"><strong>'.__('Scan Time', 'bulletproof-security').'</strong></th>';
2577
+ echo '</tr>';
2578
+ echo '</thead>';
2579
+ echo '<tbody>';
2580
+ echo '<tr>';
2581
+
2582
+ if ( $wpdb->num_rows != 0 ) {
2583
+
2584
+ foreach ( $MScanFilesRows as $row ) {
2585
+
2586
+ if ( $row->mscan_status == '' ) {
2587
+
2588
+ if ( $row->mscan_ignored != 'ignore' ) {
2589
+ $status = '<strong><font color="blue">'.__('Skipped File', 'bulletproof-security').'<br>'.__('Not Scanned', 'bulletproof-security').'</font></strong>';
2590
+ }
2591
+
2592
+ if ( $row->mscan_ignored == 'ignore' ) {
2593
+ $status = '<strong><font color="green">'.__('Ignored File', 'bulletproof-security').'</font></strong>';
2594
+ }
2595
+ }
2596
+
2597
+ if ( $row->mscan_status != '' ) {
2598
+
2599
+ if ( $row->mscan_ignored == 'ignore' ) {
2600
+ $status = '<strong><font color="green">'.__('Ignored File', 'bulletproof-security').'</font></strong>';
2601
+
2602
+ } else {
2603
+
2604
+ if ( $row->mscan_status == 'suspect' ) {
2605
+ $status = '<strong><font color="#fb0101">'.__('Suspicious File', 'bulletproof-security').'</font></strong>';
2606
+ }
2607
+ }
2608
+ }
2609
+
2610
+ echo '<th scope="row" style="border-bottom:none;">'.$status.'</th>';
2611
+
2612
+ if ( preg_match( '/Altered\sor\sunknown(.*)/', $row->mscan_pattern ) ) {
2613
+ $hash_pattern = 'File Hash: ';
2614
+ } else {
2615
+ $hash_pattern = 'Pattern Match: ';
2616
+ }
2617
+
2618
+ echo '<td>'.$row->mscan_path.'</td>';
2619
+ echo '<td style="max-width:200px">'.$hash_pattern.esc_html($row->mscan_pattern).'</td>';
2620
+ echo '<td>'.$row->mscan_time.'</td>';
2621
+ echo '</tr>';
2622
+
2623
+ $mscan_report_scan_results_file_scan_array[] = array( $status, $row->mscan_path, $hash_pattern.esc_html($row->mscan_pattern), $row->mscan_time );
2624
+ }
2625
+
2626
+ } else {
2627
+
2628
+ echo '<th scope="row" style="border-bottom:none;font-weight:600;color:green">'.__('No Suspicious Files were detected', 'bulletproof-security').'</th>';
2629
+ echo '<td></td>';
2630
+ echo '<td></td>';
2631
+ echo '<td></td>';
2632
+ echo '</tr>';
2633
+ }
2634
+ echo '</tbody>';
2635
+ echo '</table>';
2636
+ echo '</div>';
2637
+
2638
+ $mscan_report_db_scan_help_text = '<div class="mscan-report-row-small"><strong>'.__('Database scanning uses pattern matching scanning.', 'bulletproof-security').'<br>'.__('Pattern matching scan results will usually detect some false positive matches.', 'bulletproof-security').'<br>'.__('You can View, Ignore and Unignore suspicious DB Entries using the View|Ignore Suspicious DB Entries Form on the MScan 2.0 tab page. Before deleting any database data make a backup of your database.', 'bulletproof-security').'<br>'.__('Use phpMyAdmin or a similar tool to check your database Row where the suspicious code was found.', 'bulletproof-security').'<br>'.__('When you ignore a DB Entry it will no longer be scanned in any future scans. When you unignore an ignored DB Entry it will be scanned in future scans.', 'bulletproof-security').'</strong></div>';
2639
+ echo $mscan_report_db_scan_help_text;
2640
+
2641
+ $mscan_report_scan_results_db_scan_array = array();
2642
+
2643
+ $MStable = $wpdb->prefix . "bpspro_mscan";
2644
+ $db_rows = 'db';
2645
+ $MScanDBRows = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $MStable WHERE mscan_type = %s", $db_rows ) );
2646
+
2647
+ echo '<div id="MScanSuspectDBcheckall" style="">';
2648
+ echo '<table class="widefat" style="margin-bottom:10px;">';
2649
+ echo '<thead>';
2650
+ echo '<tr>';
2651
+ echo '<th scope="col" style="width:16%;"><strong>'.__('Current Status', 'bulletproof-security').'</strong></th>';
2652
+ echo '<th scope="col" style="width:16%;"><strong>'.__('DB Table', 'bulletproof-security').'</strong></th>';
2653
+ echo '<th scope="col" style="width:16%;"><strong>'.__('DB Column', 'bulletproof-security').'</strong>'.'</th>';
2654
+ echo '<th scope="col" style="width:16%;"><strong>'.__('DB Row ID', 'bulletproof-security').'</strong>'.'</th>';
2655
+ echo '<th scope="col" style="width:16%;"><strong>'.__('Pattern Match', 'bulletproof-security').'</strong></th>';
2656
+ echo '<th scope="col" style="width:16%;"><strong>'.__('Scan Time', 'bulletproof-security').'</strong></th>';
2657
+ echo '</tr>';
2658
+ echo '</thead>';
2659
+ echo '<tbody>';
2660
+ echo '<tr>';
2661
+
2662
+ if ( $wpdb->num_rows != 0 ) {
2663
+
2664
+ foreach ( $MScanDBRows as $row ) {
2665
+
2666
+ if ( $row->mscan_ignored == 'ignore' ) {
2667
+ $status = '<strong><font color="green">'.__('Ignored DB Entry', 'bulletproof-security').'</font></strong>';
2668
+
2669
+ } else {
2670
+
2671
+ if ( $row->mscan_status == 'suspect' ) {
2672
+ $status = '<strong><font color="#fb0101">'.__('Suspicious DB Entry', 'bulletproof-security').'</font></strong>';
2673
+ }
2674
+ }
2675
+
2676
+ echo '<th scope="row" style="border-bottom:none;">'.$status.'</th>';
2677
+ echo '<td>'.$row->mscan_db_table.'</td>';
2678
+ echo '<td>'.$row->mscan_db_column.'</td>';
2679
+ echo '<td>'.$row->mscan_db_pkid.'</td>';
2680
+ echo '<td style="max-width:200px">'.esc_html($row->mscan_pattern).'</td>';
2681
+ echo '<td>'.$row->mscan_time.'</td>';
2682
+ echo '</tr>';
2683
+
2684
+ $mscan_report_scan_results_db_scan_array[] = array( $status, $row->mscan_db_table, $row->mscan_db_column, $row->mscan_db_pkid, esc_html($row->mscan_pattern), $row->mscan_time );
2685
+ }
2686
+
2687
+ } else {
2688
+
2689
+ echo '<th scope="row" style="border-bottom:none;font-weight:600;color:green">'.__('No Suspicious DB Entries were detected', 'bulletproof-security').'</th>';
2690
+ echo "<td></td>";
2691
+ echo "<td></td>";
2692
+ echo "<td></td>";
2693
+ echo '<td></td>';
2694
+ echo '<td></td>';
2695
+ echo '</tr>';
2696
+ }
2697
+ echo '</tbody>';
2698
+ echo '</table>';
2699
+ echo '</div>';
2700
+ }
2701
+
2702
+ // MScan Save Report Form processing
2703
+ if ( isset( $_POST['Submit-MScan-Save-Report'] ) && current_user_can('manage_options') ) {
2704
+ check_admin_referer('bulletproof_security_mscan_save_report');
2705
+
2706
+ $bps_mscan_report_timestamp = array(
2707
+ 'Scan Report' => $mscan_report_timestamp, $mscan_report_website_domain, $mscan_report_total_scan_time, $mscan_report_total_files_scanned, $mscan_report_total_skipped_files, $mscan_report_total_suspicious_files, $mscan_report_total_suspicious_db_entries,
2708
+ array( 'MScan Option Settings:' => $mscan_report_folders_to_scan, $mscan_report_excluded_dirs, $mscan_report_max_file_size, $mscan_report_max_time_limit, $mscan_report_db_scan, $mscan_report_skipped_file_scan, $mscan_report_delete_tmp_files, $mscan_report_exclude_tmp_files, $mscan_report_scheduled_scan,
2709
+ array( 'WP Core|Plugin|Theme File Hashes:' => $mscan_report_core_hash_version_comparison,
2710
+ array( 'Plugin File Hashes:' => $mscan_report_plugin_hash_version_comparison_array,
2711
+ array( 'Theme File Hashes:' => $mscan_report_theme_hash_version_comparison_array,
2712
+ array( 'Scan Results:' =>
2713
+ array( 'File Scan' => $mscan_report_scan_results_file_scan_array,
2714
+ array( 'DB Scan' => $mscan_report_scan_results_db_scan_array
2715
+ ) ) ) ) ) ) ) );
2716
+
2717
+ $bps_mscan_report_data_2 = array( '' => '' );
2718
+ $bps_mscan_report_data_3 = array( '' => '' );
2719
+ $bps_mscan_report_data_4 = array( '' => '' );
2720
+ $bps_mscan_report_data_5 = array( '' => '' );
2721
+ $bps_mscan_report_data_6 = array( '' => '' );
2722
+ $bps_mscan_report_data_7 = array( '' => '' );
2723
+ $bps_mscan_report_data_8 = array( '' => '' );
2724
+ $bps_mscan_report_data_9 = array( '' => '' );
2725
+ $bps_mscan_report_data_10 = array( '' => '' );
2726
+ $bps_mscan_report_data_11 = array( '' => '' );
2727
+ $bps_mscan_report_data_12 = array( '' => '' );
2728
+ $bps_mscan_report_data_13 = array( '' => '' );
2729
+ $bps_mscan_report_data_14 = array( '' => '' );
2730
+ $bps_mscan_report_data_15 = array( '' => '' );
2731
+ $bps_mscan_report_data_16 = array( '' => '' );
2732
+ $bps_mscan_report_data_17 = array( '' => '' );
2733
+ $bps_mscan_report_data_18 = array( '' => '' );
2734
+ $bps_mscan_report_data_19 = array( '' => '' );
2735
+ $bps_mscan_report_data_20 = array( '' => '' );
2736
+
2737
+ $Mscan_Report_Options = array(
2738
+ 'bps_mscan_report_data_1' => $bps_mscan_report_timestamp,
2739
+ 'bps_mscan_report_data_2' => $bps_mscan_report_data_2,
2740
+ 'bps_mscan_report_data_3' => $bps_mscan_report_data_3,
2741
+ 'bps_mscan_report_data_4' => $bps_mscan_report_data_4,
2742
+ 'bps_mscan_report_data_5' => $bps_mscan_report_data_5,
2743
+ 'bps_mscan_report_data_6' => $bps_mscan_report_data_6,
2744
+ 'bps_mscan_report_data_7' => $bps_mscan_report_data_7,
2745
+ 'bps_mscan_report_data_8' => $bps_mscan_report_data_8,
2746
+ 'bps_mscan_report_data_9' => $bps_mscan_report_data_9,
2747
+ 'bps_mscan_report_data_10' => $bps_mscan_report_data_10,
2748
+ 'bps_mscan_report_data_11' => $bps_mscan_report_data_11,
2749
+ 'bps_mscan_report_data_12' => $bps_mscan_report_data_12,
2750
+ 'bps_mscan_report_data_13' => $bps_mscan_report_data_13,
2751
+ 'bps_mscan_report_data_14' => $bps_mscan_report_data_14,
2752
+ 'bps_mscan_report_data_15' => $bps_mscan_report_data_15,
2753
+ 'bps_mscan_report_data_16' => $bps_mscan_report_data_16,
2754
+ 'bps_mscan_report_data_17' => $bps_mscan_report_data_17,
2755
+ 'bps_mscan_report_data_18' => $bps_mscan_report_data_18,
2756
+ 'bps_mscan_report_data_19' => $bps_mscan_report_data_19,
2757
+ 'bps_mscan_report_data_20' => $bps_mscan_report_data_20
2758
+ );
2759
+
2760
+ if ( ! get_option( 'bulletproof_security_options_mscan_report' ) ) {
2761
+
2762
+ foreach( $Mscan_Report_Options as $key => $value ) {
2763
+ update_option('bulletproof_security_options_mscan_report', $Mscan_Report_Options);
2764
+ }
2765
+
2766
+ $text = '<strong><font color="green">'.__('The MScan Report was saved successfully. Saved MScan Reports can be viewed on the MScan Saved Reports tab page.', 'bulletproof-security').'</font></strong>';
2767
+
2768
+ echo $bps_topDiv;
2769
+ echo $text;
2770
+ echo $bps_bottomDiv;
2771
+
2772
+ } else {
2773
+
2774
+ $report_options = get_option('bulletproof_security_options_mscan_report');
2775
+
2776
+ $bps_mscan_report_data_1 = isset($report_options['bps_mscan_report_data_1']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_1'] ) ? $report_options['bps_mscan_report_data_1'] : array( '' => '' );
2777
+ $bps_mscan_report_data_2 = isset($report_options['bps_mscan_report_data_2']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_2'] ) ? $report_options['bps_mscan_report_data_2'] : array( '' => '' );
2778
+ $bps_mscan_report_data_3 = isset($report_options['bps_mscan_report_data_3']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_3'] ) ? $report_options['bps_mscan_report_data_3'] : array( '' => '' );
2779
+ $bps_mscan_report_data_4 = isset($report_options['bps_mscan_report_data_4']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_4'] ) ? $report_options['bps_mscan_report_data_4'] : array( '' => '' );
2780
+ $bps_mscan_report_data_5 = isset($report_options['bps_mscan_report_data_5']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_5'] ) ? $report_options['bps_mscan_report_data_5'] : array( '' => '' );
2781
+ $bps_mscan_report_data_6 = isset($report_options['bps_mscan_report_data_6']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_6'] ) ? $report_options['bps_mscan_report_data_6'] : array( '' => '' );
2782
+ $bps_mscan_report_data_7 = isset($report_options['bps_mscan_report_data_7']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_7'] ) ? $report_options['bps_mscan_report_data_7'] : array( '' => '' );
2783
+ $bps_mscan_report_data_8 = isset($report_options['bps_mscan_report_data_8']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_8'] ) ? $report_options['bps_mscan_report_data_8'] : array( '' => '' );
2784
+ $bps_mscan_report_data_9 = isset($report_options['bps_mscan_report_data_9']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_9'] ) ? $report_options['bps_mscan_report_data_9'] : array( '' => '' );
2785
+ $bps_mscan_report_data_10 = isset($report_options['bps_mscan_report_data_10']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_10'] ) ? $report_options['bps_mscan_report_data_10'] : array( '' => '' );
2786
+ $bps_mscan_report_data_11 = isset($report_options['bps_mscan_report_data_11']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_11'] ) ? $report_options['bps_mscan_report_data_11'] : array( '' => '' );
2787
+ $bps_mscan_report_data_12 = isset($report_options['bps_mscan_report_data_12']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_12'] ) ? $report_options['bps_mscan_report_data_12'] : array( '' => '' );
2788
+ $bps_mscan_report_data_13 = isset($report_options['bps_mscan_report_data_13']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_13'] ) ? $report_options['bps_mscan_report_data_13'] : array( '' => '' );
2789
+ $bps_mscan_report_data_14 = isset($report_options['bps_mscan_report_data_14']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_14'] ) ? $report_options['bps_mscan_report_data_14'] : array( '' => '' );
2790
+ $bps_mscan_report_data_15 = isset($report_options['bps_mscan_report_data_15']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_15'] ) ? $report_options['bps_mscan_report_data_15'] : array( '' => '' );
2791
+ $bps_mscan_report_data_16 = isset($report_options['bps_mscan_report_data_16']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_16'] ) ? $report_options['bps_mscan_report_data_16'] : array( '' => '' );
2792
+ $bps_mscan_report_data_17 = isset($report_options['bps_mscan_report_data_17']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_17'] ) ? $report_options['bps_mscan_report_data_17'] : array( '' => '' );
2793
+ $bps_mscan_report_data_18 = isset($report_options['bps_mscan_report_data_18']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_18'] ) ? $report_options['bps_mscan_report_data_18'] : array( '' => '' );
2794
+ $bps_mscan_report_data_19 = isset($report_options['bps_mscan_report_data_19']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_19'] ) ? $report_options['bps_mscan_report_data_19'] : array( '' => '' );
2795
+ $bps_mscan_report_data_20 = isset($report_options['bps_mscan_report_data_20']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_20'] ) ? $report_options['bps_mscan_report_data_20'] : array( '' => '' );
2796
+
2797
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_1'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_2'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_3'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_4'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_5'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_6'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_7'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_8'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_9'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_10'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_11'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_12'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_13'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_14'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_15'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_16'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_17'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_18'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_19'] ) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_20'] ) ) {
2798
+
2799
+ $text = '<strong><font color="#fb0101">'.__('The MScan Report was not saved', 'bulletproof-security').'</font><br>'.__('The maximum number of Reports that can be saved is 20 Reports. In order to save the current Report you will need to delete an older saved Report.', 'bulletproof-security').'</strong>';
2800
+
2801
+ echo $bps_topDiv;
2802
+ echo $text;
2803
+ echo $bps_bottomDiv;
2804
+
2805
+ } else {
2806
+
2807
+ if ( isset($report_options['bps_mscan_report_data_1']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_1'] ) ) {
2808
+ $bps_mscan_report_data_1 = $bps_mscan_report_timestamp;
2809
+ } elseif ( isset($report_options['bps_mscan_report_data_2']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_2'] ) ) {
2810
+ $bps_mscan_report_data_2 = $bps_mscan_report_timestamp;
2811
+ } elseif ( isset($report_options['bps_mscan_report_data_3']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_3'] ) ) {
2812
+ $bps_mscan_report_data_3 = $bps_mscan_report_timestamp;
2813
+ } elseif ( isset($report_options['bps_mscan_report_data_4']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_4'] ) ) {
2814
+ $bps_mscan_report_data_4 = $bps_mscan_report_timestamp;
2815
+ } elseif ( isset($report_options['bps_mscan_report_data_5']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_5'] ) ) {
2816
+ $bps_mscan_report_data_5 = $bps_mscan_report_timestamp;
2817
+ } elseif ( isset($report_options['bps_mscan_report_data_6']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_6'] ) ) {
2818
+ $bps_mscan_report_data_6 = $bps_mscan_report_timestamp;
2819
+ } elseif ( isset($report_options['bps_mscan_report_data_7']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_7'] ) ) {
2820
+ $bps_mscan_report_data_7 = $bps_mscan_report_timestamp;
2821
+ } elseif ( isset($report_options['bps_mscan_report_data_8']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_8'] ) ) {
2822
+ $bps_mscan_report_data_8 = $bps_mscan_report_timestamp;
2823
+ } elseif ( isset($report_options['bps_mscan_report_data_9']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_9'] ) ) {
2824
+ $bps_mscan_report_data_9 = $bps_mscan_report_timestamp;
2825
+ } elseif ( isset($report_options['bps_mscan_report_data_10']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_10'] ) ) {
2826
+ $bps_mscan_report_data_10 = $bps_mscan_report_timestamp;
2827
+ } elseif ( isset($report_options['bps_mscan_report_data_11']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_11'] ) ) {
2828
+ $bps_mscan_report_data_11 = $bps_mscan_report_timestamp;
2829
+ } elseif ( isset($report_options['bps_mscan_report_data_12']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_12'] ) ) {
2830
+ $bps_mscan_report_data_12 = $bps_mscan_report_timestamp;
2831
+ } elseif ( isset($report_options['bps_mscan_report_data_13']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_13'] ) ) {
2832
+ $bps_mscan_report_data_13 = $bps_mscan_report_timestamp;
2833
+ } elseif ( isset($report_options['bps_mscan_report_data_14']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_14'] ) ) {
2834
+ $bps_mscan_report_data_14 = $bps_mscan_report_timestamp;
2835
+ } elseif ( isset($report_options['bps_mscan_report_data_15']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_15'] ) ) {
2836
+ $bps_mscan_report_data_15 = $bps_mscan_report_timestamp;
2837
+ } elseif ( isset($report_options['bps_mscan_report_data_16']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_16'] ) ) {
2838
+ $bps_mscan_report_data_16 = $bps_mscan_report_timestamp;
2839
+ } elseif ( isset($report_options['bps_mscan_report_data_17']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_17'] ) ) {
2840
+ $bps_mscan_report_data_17 = $bps_mscan_report_timestamp;
2841
+ } elseif ( isset($report_options['bps_mscan_report_data_18']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_18'] ) ) {
2842
+ $bps_mscan_report_data_18 = $bps_mscan_report_timestamp;
2843
+ } elseif ( isset($report_options['bps_mscan_report_data_19']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_19'] ) ) {
2844
+ $bps_mscan_report_data_19 = $bps_mscan_report_timestamp;
2845
+ } elseif ( isset($report_options['bps_mscan_report_data_20']) && ! array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_20'] ) ) {
2846
+ $bps_mscan_report_data_20 = $bps_mscan_report_timestamp;
2847
+ }
2848
+
2849
+ $Mscan_Report_Options = array(
2850
+ 'bps_mscan_report_data_1' => $bps_mscan_report_data_1,
2851
+ 'bps_mscan_report_data_2' => $bps_mscan_report_data_2,
2852
+ 'bps_mscan_report_data_3' => $bps_mscan_report_data_3,
2853
+ 'bps_mscan_report_data_4' => $bps_mscan_report_data_4,
2854
+ 'bps_mscan_report_data_5' => $bps_mscan_report_data_5,
2855
+ 'bps_mscan_report_data_6' => $bps_mscan_report_data_6,
2856
+ 'bps_mscan_report_data_7' => $bps_mscan_report_data_7,
2857
+ 'bps_mscan_report_data_8' => $bps_mscan_report_data_8,
2858
+ 'bps_mscan_report_data_9' => $bps_mscan_report_data_9,
2859
+ 'bps_mscan_report_data_10' => $bps_mscan_report_data_10,
2860
+ 'bps_mscan_report_data_11' => $bps_mscan_report_data_11,
2861
+ 'bps_mscan_report_data_12' => $bps_mscan_report_data_12,
2862
+ 'bps_mscan_report_data_13' => $bps_mscan_report_data_13,
2863
+ 'bps_mscan_report_data_14' => $bps_mscan_report_data_14,
2864
+ 'bps_mscan_report_data_15' => $bps_mscan_report_data_15,
2865
+ 'bps_mscan_report_data_16' => $bps_mscan_report_data_16,
2866
+ 'bps_mscan_report_data_17' => $bps_mscan_report_data_17,
2867
+ 'bps_mscan_report_data_18' => $bps_mscan_report_data_18,
2868
+ 'bps_mscan_report_data_19' => $bps_mscan_report_data_19,
2869
+ 'bps_mscan_report_data_20' => $bps_mscan_report_data_20
2870
+ );
2871
+
2872
+ foreach( $Mscan_Report_Options as $key => $value ) {
2873
+ update_option('bulletproof_security_options_mscan_report', $Mscan_Report_Options);
2874
+ }
2875
+
2876
+ $text = '<strong><font color="green">'.__('The MScan Report was saved successfully. Saved MScan Reports can be viewed on the MScan Saved Reports tab page.', 'bulletproof-security').'</font></strong>';
2877
+
2878
+ echo $bps_topDiv;
2879
+ echo $text;
2880
+ echo $bps_bottomDiv;
2881
+ }
2882
+ }
2883
+ }
2884
+ }
2885
+
2886
+ bpsPro_mscan_report();
2887
+ ?>
2888
+
2889
+ </td>
2890
+ </tr>
2891
+ </table>
2892
+
2893
+ </div>
2894
+
2895
+ <div id="bps-tabs-4" class="bps-tab-page">
2896
+
2897
+ <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
2898
+ <tr>
2899
+ <td class="bps-table_title"><h2><?php _e('MScan Saved Reports ~ ', 'bulletproof-security'); ?><span style="font-size:.75em;"><?php _e('Saved reports can be viewed or deleted.', 'bulletproof-security'); ?></span></h2></td>
2900
+ </tr>
2901
+ <tr>
2902
+ <td class="bps-table_cell_help">
2903
+
2904
+ <h3 style="margin:0px 0px 10px 0px;"><?php _e('MScan Saved Reports', 'bulletproof-security'); ?> <button id="bps-open-modal4" class="button bps-modal-button"><?php _e('Read Me', 'bulletproof-security'); ?></button></h3>
2905
+
2906
+ <div id="bps-modal-content4" class="bps-dialog-hide" title="<?php _e('MScan Saved Reports', 'bulletproof-security'); ?>">
2907
+ <p><?php echo $bps_modal_content4; ?></p>
2908
+ </div>
2909
+
2910
+ <?php
2911
+
2912
+ // MScan Saved Reports Form: View or Delete Report
2913
+ if ( ! get_option('bulletproof_security_options_mscan_report') ) {
2914
+
2915
+ echo '<h2>'.__('No Saved MScan Reports To Display: No MScan Reports have been saved yet.', 'bulletproof-security').'</h2>';
2916
+ echo '<div id="bps-page-height" style="height:400px"></div>';
2917
+
2918
+ } else {
2919
+
2920
+ $report_options = get_option('bulletproof_security_options_mscan_report');
2921
+
2922
+ $mscan_report_date_array = array();
2923
+
2924
+ if ( isset($report_options['bps_mscan_report_data_1']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_1'] ) ) {
2925
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_1']['Scan Report'];
2926
+ }
2927
+
2928
+ if ( isset($report_options['bps_mscan_report_data_2']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_2'] ) ) {
2929
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_2']['Scan Report'];
2930
+ }
2931
+
2932
+ if ( isset($report_options['bps_mscan_report_data_3']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_3'] ) ) {
2933
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_3']['Scan Report'];
2934
+ }
2935
+
2936
+ if ( isset($report_options['bps_mscan_report_data_4']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_4'] ) ) {
2937
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_4']['Scan Report'];
2938
+ }
2939
+
2940
+ if ( isset($report_options['bps_mscan_report_data_5']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_5'] ) ) {
2941
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_5']['Scan Report'];
2942
+ }
2943
+
2944
+ if ( isset($report_options['bps_mscan_report_data_6']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_6'] ) ) {
2945
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_6']['Scan Report'];
2946
+ }
2947
+
2948
+ if ( isset($report_options['bps_mscan_report_data_7']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_7'] ) ) {
2949
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_7']['Scan Report'];
2950
+ }
2951
+
2952
+ if ( isset($report_options['bps_mscan_report_data_8']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_8'] ) ) {
2953
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_8']['Scan Report'];
2954
+ }
2955
+
2956
+ if ( isset($report_options['bps_mscan_report_data_9']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_9'] ) ) {
2957
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_9']['Scan Report'];
2958
+ }
2959
+
2960
+ if ( isset($report_options['bps_mscan_report_data_10']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_10'] ) ) {
2961
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_10']['Scan Report'];
2962
+ }
2963
+
2964
+ if ( isset($report_options['bps_mscan_report_data_11']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_11'] ) ) {
2965
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_11']['Scan Report'];
2966
+ }
2967
+
2968
+ if ( isset($report_options['bps_mscan_report_data_12']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_12'] ) ) {
2969
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_12']['Scan Report'];
2970
+ }
2971
+
2972
+ if ( isset($report_options['bps_mscan_report_data_13']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_13'] ) ) {
2973
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_13']['Scan Report'];
2974
+ }
2975
+
2976
+ if ( isset($report_options['bps_mscan_report_data_14']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_14'] ) ) {
2977
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_14']['Scan Report'];
2978
+ }
2979
+
2980
+ if ( isset($report_options['bps_mscan_report_data_15']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_15'] ) ) {
2981
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_15']['Scan Report'];
2982
+ }
2983
+
2984
+ if ( isset($report_options['bps_mscan_report_data_16']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_16'] ) ) {
2985
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_16']['Scan Report'];
2986
+ }
2987
+
2988
+ if ( isset($report_options['bps_mscan_report_data_17']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_17'] ) ) {
2989
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_17']['Scan Report'];
2990
+ }
2991
+
2992
+ if ( isset($report_options['bps_mscan_report_data_18']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_18'] ) ) {
2993
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_18']['Scan Report'];
2994
+ }
2995
+
2996
+ if ( isset($report_options['bps_mscan_report_data_19']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_19'] ) ) {
2997
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_19']['Scan Report'];
2998
+ }
2999
+
3000
+ if ( isset($report_options['bps_mscan_report_data_20']) && array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_20'] ) ) {
3001
+ $mscan_report_date_array[] = $report_options['bps_mscan_report_data_20']['Scan Report'];
3002
+ }
3003
+
3004
+ echo '<h3>'.__('MScan Saved Reports Form', 'bulletproof-security').'</h3>';
3005
+
3006
+ echo '<form name="MScanSavedReports" action="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php#bps-tabs4' ).'" method="post">';
3007
+ wp_nonce_field('bulletproof_security_mscan_saved_reports');
3008
+
3009
+ echo '<div id="ARQcheckall" style="">';
3010
+ echo '<table class="widefat" style="margin-bottom:20px;">';
3011
+ echo '<thead>';
3012
+ echo '<tr>';
3013
+ echo '<th scope="col" style="width:30%;"><strong>'.__('Report Date', 'bulletproof-security').'</strong></th>';
3014
+ echo '<th scope="col" style="width:30%;"><br><strong>'.__('View Report', 'bulletproof-security').'</strong></th>';
3015
+ echo '<th scope="col" style="width:30%;"><input type="checkbox" class="checkallDelete" style="text-align:left; margin-left:2px;" /><br><strong>'.__('Delete Report', 'bulletproof-security').'</strong></th>';
3016
+ echo '</tr>';
3017
+ echo '</thead>';
3018
+ echo '<tbody>';
3019
+ echo '<tr>';
3020
+
3021
+ foreach ( $mscan_report_date_array as $key => $value ) {
3022
+
3023
+ $value = preg_replace( array( '/<div class="mscan-report-row-title-large">/', '/<\/div>/'), "", $value );
3024
+
3025
+ echo '<th scope="row" style="border-bottom:none;font-weight:600;">'.$value.'</th>';
3026
+ echo "<td><input type=\"checkbox\" id=\"view_report\" name=\"qradio[$value]\" value=\"view_report\" /><br><span style=\"font-size:10px;\">".__('View', 'bulletproof-security')."</span></td>";
3027
+ echo "<td><input type=\"checkbox\" id=\"delete_report\" name=\"qradio[$value]\" value=\"delete_report\" class=\"deletereportALL\" /><br><span style=\"font-size:10px;\">".__('Delete', 'bulletproof-security')."</span></td>";
3028
+
3029
+ echo '</tr>';
3030
+ }
3031
+
3032
+ echo '</tbody>';
3033
+ echo '</table>';
3034
+ echo '</div>';
3035
+
3036
+ echo "<input type=\"submit\" name=\"Submit-MScan-View-Delete\" value=\"".__('View|Delete Reports', 'bulletproof-security')."\" class=\"button bps-button\" style=\"margin:0px 0px 0px 0px\" onclick=\"return confirm('".__('Click OK to proceed or click Cancel', 'bulletproof-security')."')\" /></p></form>";
3037
+
3038
+ }
3039
+
3040
+ // MScan Saved Reports Form Proccessing - View or Delete Scan Reports
3041
+ if ( isset( $_POST['Submit-MScan-View-Delete'] ) && current_user_can('manage_options') ) {
3042
+ check_admin_referer('bulletproof_security_mscan_saved_reports');
3043
+
3044
+ ?>
3045
+ <script type="text/javascript">
3046
+ /* <![CDATA[ */
3047
+ // Note: Active Tab numbering is literal from left to right.
3048
+ jQuery(document).ready(function($){
3049
+ $( "#bps-tabs" ).tabs({
3050
+ active: 3
3051
+ });
3052
+ });
3053
+ /* ]]> */
3054
+ </script>
3055
+
3056
+ <?php
3057
+
3058
+ $qradio = isset($_POST['qradio']) ? $_POST['qradio'] : '';
3059
+ $report_options = get_option('bulletproof_security_options_mscan_report');
3060
+
3061
+ switch( $_POST['Submit-MScan-View-Delete'] ) {
3062
+ case __('View|Delete Reports', 'bulletproof-security'):
3063
+
3064
+ $delete_reports = array();
3065
+ $view_reports = array();
3066
+
3067
+ if ( ! empty($qradio) ) {
3068
+
3069
+ foreach ( $qradio as $key => $value ) {
3070
+
3071
+ if ( $value == 'delete_report' ) {
3072
+ $delete_reports[] = $key;
3073
+ } elseif ( $value == 'view_report' ) {
3074
+ $view_reports[] = $key;
3075
+ }
3076
+ }
3077
+ }
3078
+
3079
+ if ( empty($delete_reports) && empty($view_reports) ) {
3080
+
3081
+ $text_delete = '<strong><font color="#fb0101">'.__('You did not select an MScan Report to view or delete', 'bulletproof-security').'</font><br>'.__('Click the checkbox for the MScan Report that you would like to view or delete and then click the View|Delete Reports button.', 'bulletproof-security').'</strong>';
3082
+ echo $bps_topDiv;
3083
+ echo $text_delete;
3084
+ echo $bps_bottomDiv;
3085
+ }
3086
+
3087
+ if ( ! empty($delete_reports) ) {
3088
+
3089
+ echo $bps_topDiv;
3090
+
3091
+ $deleted_report_text = '';
3092
+
3093
+ foreach ( $delete_reports as $delete_report ) {
3094
+
3095
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_1'] ) && $report_options['bps_mscan_report_data_1']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3096
+ $bps_mscan_report_data_1 = array( '' => '' );
3097
+ } else {
3098
+ $bps_mscan_report_data_1 = $report_options['bps_mscan_report_data_1'];
3099
+ }
3100
+
3101
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_2'] ) && $report_options['bps_mscan_report_data_2']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3102
+ $bps_mscan_report_data_2 = array( '' => '' );
3103
+ } else {
3104
+ $bps_mscan_report_data_2 = $report_options['bps_mscan_report_data_2'];
3105
+ }
3106
+
3107
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_3'] ) && $report_options['bps_mscan_report_data_3']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3108
+ $bps_mscan_report_data_3 = array( '' => '' );
3109
+ } else {
3110
+ $bps_mscan_report_data_3 = $report_options['bps_mscan_report_data_3'];
3111
+ }
3112
+
3113
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_4'] ) && $report_options['bps_mscan_report_data_4']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3114
+ $bps_mscan_report_data_4 = array( '' => '' );
3115
+ } else {
3116
+ $bps_mscan_report_data_4 = $report_options['bps_mscan_report_data_4'];
3117
+ }
3118
+
3119
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_5'] ) && $report_options['bps_mscan_report_data_5']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3120
+ $bps_mscan_report_data_5 = array( '' => '' );
3121
+ } else {
3122
+ $bps_mscan_report_data_5 = $report_options['bps_mscan_report_data_5'];
3123
+ }
3124
+
3125
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_6'] ) && $report_options['bps_mscan_report_data_6']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3126
+ $bps_mscan_report_data_6 = array( '' => '' );
3127
+ } else {
3128
+ $bps_mscan_report_data_6 = $report_options['bps_mscan_report_data_6'];
3129
+ }
3130
+
3131
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_7'] ) && $report_options['bps_mscan_report_data_7']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3132
+ $bps_mscan_report_data_7 = array( '' => '' );
3133
+ } else {
3134
+ $bps_mscan_report_data_7 = $report_options['bps_mscan_report_data_7'];
3135
+ }
3136
+
3137
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_8'] ) && $report_options['bps_mscan_report_data_8']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3138
+ $bps_mscan_report_data_8 = array( '' => '' );
3139
+ } else {
3140
+ $bps_mscan_report_data_8 = $report_options['bps_mscan_report_data_8'];
3141
+ }
3142
+
3143
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_9'] ) && $report_options['bps_mscan_report_data_9']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3144
+ $bps_mscan_report_data_9 = array( '' => '' );
3145
+ } else {
3146
+ $bps_mscan_report_data_9 = $report_options['bps_mscan_report_data_9'];
3147
+ }
3148
+
3149
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_10'] ) && $report_options['bps_mscan_report_data_10']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3150
+ $bps_mscan_report_data_10 = array( '' => '' );
3151
+ } else {
3152
+ $bps_mscan_report_data_10 = $report_options['bps_mscan_report_data_10'];
3153
+ }
3154
+
3155
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_11'] ) && $report_options['bps_mscan_report_data_11']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3156
+ $bps_mscan_report_data_11 = array( '' => '' );
3157
+ } else {
3158
+ $bps_mscan_report_data_11 = $report_options['bps_mscan_report_data_11'];
3159
+ }
3160
+
3161
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_12'] ) && $report_options['bps_mscan_report_data_12']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3162
+ $bps_mscan_report_data_12 = array( '' => '' );
3163
+ } else {
3164
+ $bps_mscan_report_data_12 = $report_options['bps_mscan_report_data_12'];
3165
+ }
3166
+
3167
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_13'] ) && $report_options['bps_mscan_report_data_13']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3168
+ $bps_mscan_report_data_13 = array( '' => '' );
3169
+ } else {
3170
+ $bps_mscan_report_data_13 = $report_options['bps_mscan_report_data_13'];
3171
+ }
3172
+
3173
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_14'] ) && $report_options['bps_mscan_report_data_14']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3174
+ $bps_mscan_report_data_14 = array( '' => '' );
3175
+ } else {
3176
+ $bps_mscan_report_data_14 = $report_options['bps_mscan_report_data_14'];
3177
+ }
3178
+
3179
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_15'] ) && $report_options['bps_mscan_report_data_15']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3180
+ $bps_mscan_report_data_15 = array( '' => '' );
3181
+ } else {
3182
+ $bps_mscan_report_data_15 = $report_options['bps_mscan_report_data_15'];
3183
+ }
3184
+
3185
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_16'] ) && $report_options['bps_mscan_report_data_16']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3186
+ $bps_mscan_report_data_16 = array( '' => '' );
3187
+ } else {
3188
+ $bps_mscan_report_data_16 = $report_options['bps_mscan_report_data_16'];
3189
+ }
3190
+
3191
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_17'] ) && $report_options['bps_mscan_report_data_17']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3192
+ $bps_mscan_report_data_17 = array( '' => '' );
3193
+ } else {
3194
+ $bps_mscan_report_data_17 = $report_options['bps_mscan_report_data_17'];
3195
+ }
3196
+
3197
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_18'] ) && $report_options['bps_mscan_report_data_18']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3198
+ $bps_mscan_report_data_18 = array( '' => '' );
3199
+ } else {
3200
+ $bps_mscan_report_data_18 = $report_options['bps_mscan_report_data_18'];
3201
+ }
3202
+
3203
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_19'] ) && $report_options['bps_mscan_report_data_19']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3204
+ $bps_mscan_report_data_19 = array( '' => '' );
3205
+ } else {
3206
+ $bps_mscan_report_data_19 = $report_options['bps_mscan_report_data_19'];
3207
+ }
3208
+
3209
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_20'] ) && $report_options['bps_mscan_report_data_20']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$delete_report.'</div>' ) {
3210
+ $bps_mscan_report_data_20 = array( '' => '' );
3211
+ } else {
3212
+ $bps_mscan_report_data_20 = $report_options['bps_mscan_report_data_20'];
3213
+ }
3214
+
3215
+ $Mscan_Report_Options = array(
3216
+ 'bps_mscan_report_data_1' => $bps_mscan_report_data_1,
3217
+ 'bps_mscan_report_data_2' => $bps_mscan_report_data_2,
3218
+ 'bps_mscan_report_data_3' => $bps_mscan_report_data_3,
3219
+ 'bps_mscan_report_data_4' => $bps_mscan_report_data_4,
3220
+ 'bps_mscan_report_data_5' => $bps_mscan_report_data_5,
3221
+ 'bps_mscan_report_data_6' => $bps_mscan_report_data_6,
3222
+ 'bps_mscan_report_data_7' => $bps_mscan_report_data_7,
3223
+ 'bps_mscan_report_data_8' => $bps_mscan_report_data_8,
3224
+ 'bps_mscan_report_data_9' => $bps_mscan_report_data_9,
3225
+ 'bps_mscan_report_data_10' => $bps_mscan_report_data_10,
3226
+ 'bps_mscan_report_data_11' => $bps_mscan_report_data_11,
3227
+ 'bps_mscan_report_data_12' => $bps_mscan_report_data_12,
3228
+ 'bps_mscan_report_data_13' => $bps_mscan_report_data_13,
3229
+ 'bps_mscan_report_data_14' => $bps_mscan_report_data_14,
3230
+ 'bps_mscan_report_data_15' => $bps_mscan_report_data_15,
3231
+ 'bps_mscan_report_data_16' => $bps_mscan_report_data_16,
3232
+ 'bps_mscan_report_data_17' => $bps_mscan_report_data_17,
3233
+ 'bps_mscan_report_data_18' => $bps_mscan_report_data_18,
3234
+ 'bps_mscan_report_data_19' => $bps_mscan_report_data_19,
3235
+ 'bps_mscan_report_data_20' => $bps_mscan_report_data_20
3236
+ );
3237
+
3238
+ foreach( $Mscan_Report_Options as $key => $value ) {
3239
+ update_option('bulletproof_security_options_mscan_report', $Mscan_Report_Options);
3240
+ }
3241
+
3242
+ $text_delete = '<strong><font color="green">'.__('Report: ', 'bulletproof-security').$delete_report.__(' has been deleted. Refresh/reload the page to see current MScan Saved Reports Form data.', 'bulletproof-security').'</font></strong><br>';
3243
+ echo $text_delete;
3244
+ }
3245
+ echo '</p></div>';
3246
+ }
3247
+
3248
+ if ( ! empty($view_reports) ) {
3249
+
3250
+ $text_view = '<strong><font color="green">'.__('The MScan Saved Report scan data is displayed below the MScan Saved Reports Form.', 'bulletproof-security').'</font></strong><br>';
3251
+ echo $bps_topDiv;
3252
+ echo $text_view;
3253
+ echo '</p></div>';
3254
+
3255
+ foreach ( $view_reports as $view_report ) {
3256
+
3257
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_1'] ) && $report_options['bps_mscan_report_data_1']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3258
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_1';
3259
+ }
3260
+
3261
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_2'] ) && $report_options['bps_mscan_report_data_2']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3262
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_2';
3263
+ }
3264
+
3265
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_3'] ) && $report_options['bps_mscan_report_data_3']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3266
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_3';
3267
+ }
3268
+
3269
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_4'] ) && $report_options['bps_mscan_report_data_4']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3270
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_4';
3271
+ }
3272
+
3273
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_5'] ) && $report_options['bps_mscan_report_data_5']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3274
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_5';
3275
+ }
3276
+
3277
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_6'] ) && $report_options['bps_mscan_report_data_6']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3278
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_6';
3279
+ }
3280
+
3281
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_7'] ) && $report_options['bps_mscan_report_data_7']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3282
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_7';
3283
+ }
3284
+
3285
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_8'] ) && $report_options['bps_mscan_report_data_8']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3286
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_8';
3287
+ }
3288
+
3289
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_9'] ) && $report_options['bps_mscan_report_data_9']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3290
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_9';
3291
+ }
3292
+
3293
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_10'] ) && $report_options['bps_mscan_report_data_10']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3294
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_10';
3295
+ }
3296
+
3297
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_11'] ) && $report_options['bps_mscan_report_data_11']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3298
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_11';
3299
+ }
3300
+
3301
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_12'] ) && $report_options['bps_mscan_report_data_12']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3302
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_12';
3303
+ }
3304
+
3305
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_13'] ) && $report_options['bps_mscan_report_data_13']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3306
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_13';
3307
+ }
3308
+
3309
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_14'] ) && $report_options['bps_mscan_report_data_14']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3310
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_14';
3311
+ }
3312
+
3313
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_15'] ) && $report_options['bps_mscan_report_data_15']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3314
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_15';
3315
+ }
3316
+
3317
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_16'] ) && $report_options['bps_mscan_report_data_16']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3318
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_16';
3319
+ }
3320
+
3321
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_17'] ) && $report_options['bps_mscan_report_data_17']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3322
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_17';
3323
+ }
3324
+
3325
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_18'] ) && $report_options['bps_mscan_report_data_18']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3326
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_18';
3327
+ }
3328
+
3329
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_19'] ) && $report_options['bps_mscan_report_data_19']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3330
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_19';
3331
+ }
3332
+
3333
+ if ( array_key_exists( 'Scan Report', $report_options['bps_mscan_report_data_20'] ) && $report_options['bps_mscan_report_data_20']['Scan Report'] == '<div class="mscan-report-row-title-large">'.$view_report.'</div>' ) {
3334
+ $bps_mscan_report_data_view = 'bps_mscan_report_data_20';
3335
+ }
3336
+
3337
+ echo $report_options[$bps_mscan_report_data_view]['Scan Report'];
3338
+ echo $report_options[$bps_mscan_report_data_view][0];
3339
+ echo $report_options[$bps_mscan_report_data_view][1];
3340
+ echo $report_options[$bps_mscan_report_data_view][2];
3341
+ echo $report_options[$bps_mscan_report_data_view][3];
3342
+ echo $report_options[$bps_mscan_report_data_view][4];
3343
+ echo $report_options[$bps_mscan_report_data_view][5];
3344
+ $mscan_report_option_settings = '<div class="mscan-report-row-title-large" style="padding-top:5px">'.__('MScan Option Settings: ', 'bulletproof-security') . '</div>';
3345
+ echo $mscan_report_option_settings;
3346
+ echo $report_options[$bps_mscan_report_data_view][6]['MScan Option Settings:'];
3347
+ echo $report_options[$bps_mscan_report_data_view][6][0];
3348
+ echo $report_options[$bps_mscan_report_data_view][6][1];
3349
+ echo $report_options[$bps_mscan_report_data_view][6][2];
3350
+ echo $report_options[$bps_mscan_report_data_view][6][3];
3351
+ echo $report_options[$bps_mscan_report_data_view][6][4];
3352
+ echo $report_options[$bps_mscan_report_data_view][6][5];
3353
+ echo $report_options[$bps_mscan_report_data_view][6][6];
3354
+ echo $report_options[$bps_mscan_report_data_view][6][7];
3355
+ $mscan_report_file_hashes = '<div class="mscan-report-row-title-large" style="border-top:2px solid #999999;padding-top:10px">'.__('WP Core|Plugin|Theme File Hashes: ', 'bulletproof-security') . '</div>';
3356
+ echo $mscan_report_file_hashes;
3357
+ echo $report_options[$bps_mscan_report_data_view][6][8]['WP Core|Plugin|Theme File Hashes:'];
3358
+ $mscan_report_plugin_hash_title = '<div class="mscan-report-row-title" style="padding-top:8px">'.__('Plugin File Hashes: ', 'bulletproof-security').'</div>';
3359
+ echo $mscan_report_plugin_hash_title;
3360
+
3361
+ // Plugins Hashes:
3362
+ foreach ( $report_options[$bps_mscan_report_data_view][6][8][0]['Plugin File Hashes:'] as $key => $value ) {
3363
+ echo $value;
3364
+ }
3365
+
3366
+ $mscan_report_theme_hash_title = '<div class="mscan-report-row-title" style="padding-top:8px">'.__('Theme File Hashes: ', 'bulletproof-security').'</div>';
3367
+ echo $mscan_report_theme_hash_title;
3368
+
3369
+ // Theme Hashes:
3370
+ foreach ( $report_options[$bps_mscan_report_data_view][6][8][0][0]['Theme File Hashes:'] as $key => $value ) {
3371
+ echo $value;
3372
+ }
3373
+
3374
+ $mscan_report_scan_results_title_spacer = '<div class="spacer" style="padding-top:10px"></div>';
3375
+ echo $mscan_report_scan_results_title_spacer;
3376
+
3377
+ $mscan_report_scan_results_title = '<div class="mscan-report-row-title-large" style="border-top:2px solid #999999;padding-top:10px">'.__('Scan Results ', 'bulletproof-security').'</div>';
3378
+ echo $mscan_report_scan_results_title;
3379
+
3380
+ $mscan_report_file_scan_help_text = '<div class="mscan-report-row-small"><strong>'.__('File hash comparison scan results are 100% accurate. WP Core, Plugin and Theme files are scanned using file hash comparison scanning.', 'bulletproof-security').'<br>'.__('Pattern matching scan results are less accurate and will usually detect some false positive matches. All other files that are not WP Core, Plugin and Theme files are scanned using pattern matching scanning.', 'bulletproof-security').'<br>'.__('You can View, Ignore and Delete files detected as suspicious using the View|Ignore|Delete Suspicious Files Form on the MScan 2.0 tab page. Before deleting any files make a backup of those files on your computer not on your hosting account.', 'bulletproof-security').'<br>'.__('And of course check the file contents of suspicious files to see if they contain hacker code or are false positive matches. Use the Ignore File checkbox option to ignore false postive matches.', 'bulletproof-security').'<br>'.__('When you ignore a file it will no longer be scanned in any future scans. When you unignore an ignored file it will be scanned in future scans.', 'bulletproof-security').'</strong></div>';
3381
+ echo $mscan_report_file_scan_help_text;
3382
+
3383
+ echo '<div id="MScanSuspectcheckall" style="">';
3384
+ echo '<table class="widefat" style="margin-bottom:20px;">';
3385
+ echo '<thead>';
3386
+ echo '<tr>';
3387
+ echo '<th scope="col" style="width:10%;"><strong>'.__('Current Status', 'bulletproof-security').'</strong></th>';
3388
+ echo '<th scope="col" style="width:50%;"><strong>'.__('File Path', 'bulletproof-security').'</strong></th>';
3389
+ echo '<th scope="col" style="width:25%;"><strong>'.__('File Hash or Pattern Match', 'bulletproof-security').'</strong></th>';
3390
+ echo '<th scope="col" style="width:15%;"><strong>'.__('Scan Time', 'bulletproof-security').'</strong></th>';
3391
+ echo '</tr>';
3392
+ echo '</thead>';
3393
+ echo '<tbody>';
3394
+ echo '<tr>';
3395
+
3396
+ foreach ( $report_options[$bps_mscan_report_data_view][6][8][0][0][0]['Scan Results:']['File Scan'] as $key => $value ) {
3397
+
3398
+ foreach ( $value as $inner_key => $inner_value ) {
3399
+
3400
+ if ( $inner_key == 0 ) {
3401
+ echo '<th scope="row" style="border-bottom:none;">'.$inner_value.'</th>';
3402
+ }
3403
+
3404
+ if ( $inner_key == 1 ) {
3405
+ echo '<td>'.$inner_value.'</td>';
3406
+ }
3407
+
3408
+ if ( $inner_key == 2 ) {
3409
+ echo '<td style="max-width:200px">'.$inner_value.'</td>';
3410
+ }
3411
+
3412
+ if ( $inner_key == 3 ) {
3413
+ echo '<td>'.$inner_value.'</td>';
3414
+ }
3415
+ }
3416
+
3417
+ echo '</tr>';
3418
+ }
3419
+
3420
+ echo '</tbody>';
3421
+ echo '</table>';
3422
+ echo '</div>';
3423
+
3424
+ $mscan_report_db_scan_help_text = '<div class="mscan-report-row-small"><strong>'.__('Database scanning uses pattern matching scanning.', 'bulletproof-security').'<br>'.__('Pattern matching scan results will usually detect some false positive matches.', 'bulletproof-security').'<br>'.__('You can View, Ignore and Unignore suspicious DB Entries using the View|Ignore Suspicious DB Entries Form on the MScan 2.0 tab page. Before deleting any database data make a backup of your database.', 'bulletproof-security').'<br>'.__('Use phpMyAdmin or a similar tool to check your database Row where the suspicious code was found.', 'bulletproof-security').'<br>'.__('When you ignore a DB Entry it will no longer be scanned in any future scans. When you unignore an ignored DB Entry it will be scanned in future scans.', 'bulletproof-security').'</strong></div>';
3425
+ echo $mscan_report_db_scan_help_text;
3426
+
3427
+ $mscan_report_scan_results_db_scan_array = array();
3428
+
3429
+ echo '<div id="MScanSuspectDBcheckall" style="">';
3430
+ echo '<table class="widefat" style="margin-bottom:10px;">';
3431
+ echo '<thead>';
3432
+ echo '<tr>';
3433
+ echo '<th scope="col" style="width:16%;"><strong>'.__('Current Status', 'bulletproof-security').'</strong></th>';
3434
+ echo '<th scope="col" style="width:16%;"><strong>'.__('DB Table', 'bulletproof-security').'</strong></th>';
3435
+ echo '<th scope="col" style="width:16%;"><strong>'.__('DB Column', 'bulletproof-security').'</strong>'.'</th>';
3436
+ echo '<th scope="col" style="width:16%;"><strong>'.__('DB Row ID', 'bulletproof-security').'</strong>'.'</th>';
3437
+ echo '<th scope="col" style="width:16%;"><strong>'.__('Pattern Match', 'bulletproof-security').'</strong></th>';
3438
+ echo '<th scope="col" style="width:16%;"><strong>'.__('Scan Time', 'bulletproof-security').'</strong></th>';
3439
+ echo '</tr>';
3440
+ echo '</thead>';
3441
+ echo '<tbody>';
3442
+ echo '<tr>';
3443
+
3444
+
3445
+ foreach ( $report_options[$bps_mscan_report_data_view][6][8][0][0][0]['Scan Results:'][0]['DB Scan'] as $key => $value ) {
3446
+
3447
+ foreach ( $value as $inner_key => $inner_value ) {
3448
+
3449
+ if ( $inner_key == 0 ) {
3450
+ echo '<th scope="row" style="border-bottom:none;">'.$inner_value.'</th>';
3451
+ }
3452
+
3453
+ if ( $inner_key == 1 ) {
3454
+ echo '<td>'.$inner_value.'</td>';
3455
+ }
3456
+
3457
+ if ( $inner_key == 2 ) {
3458
+ echo '<td>'.$inner_value.'</td>';
3459
+ }
3460
+
3461
+ if ( $inner_key == 3 ) {
3462
+ echo '<td>'.$inner_value.'</td>';
3463
+ }
3464
+
3465
+ if ( $inner_key == 4 ) {
3466
+ echo '<td style="max-width:200px">'.$inner_value.'</td>';
3467
+ }
3468
+
3469
+ if ( $inner_key == 5 ) {
3470
+ echo '<td>'.$inner_value.'</td>';
3471
+ }
3472
+ }
3473
+ echo '</tr>';
3474
+ }
3475
+
3476
+ echo '</tbody>';
3477
+ echo '</table>';
3478
+ echo '</div>';
3479
+ }
3480
+ }
3481
+ break;
3482
+ }
3483
+ }
3484
+
3485
+ ?>
3486
+
3487
+ <script type="text/javascript">
3488
+ /* <![CDATA[ */
3489
+ jQuery(document).ready(function($){
3490
+ $('.checkallDelete').click(function() {
3491
+ $(this).parents('#ARQcheckall:eq(0)').find('.deletereportALL:checkbox').attr('checked', this.checked);
3492
+ });
3493
+ });
3494
+ /* ]]> */
3495
+ </script>
3496
+
3497
+ </td>
3498
+ </tr>
3499
+ </table>
3500
+
3501
+ </div>
3502
+
3503
+ <div id="bps-tabs-5" class="bps-tab-page">
3504
+
3505
  <table width="100%" border="0" cellspacing="0" cellpadding="0" class="bps-help_faq_table">
3506
  <tr>
3507
  <td class="bps-table_title"><h2><?php _e('Help &amp; FAQ', 'bulletproof-security'); ?></h2></td>
admin/wizard/wizard.php CHANGED
@@ -1814,7 +1814,7 @@ global $wpdb, $blog_id, $bps_topDiv, $bps_bottomDiv;
1814
  foreach ( $BPSPluginOptionRows as $data ) {
1815
 
1816
  // Exclude these BPS option settings
1817
- if ( $data->option_name != 'bulletproof_security_options_apache_modules' && $data->option_name != 'bulletproof_security_options_MScan_status' && $data->option_name != 'bulletproof_security_options_MScan_log' && $data->option_name != 'bulletproof_security_options_DBB_log' && $data->option_name != 'bulletproof_security_options_db_backup' && $data->option_name != 'bulletproof_security_options_mod_security' && $data->option_name != 'bulletproof_security_options_wizard_free' && $data->option_name != 'bulletproof_security_options_rate_free' && $data->option_name != 'bulletproof_security_options_vcheck' && $data->option_name != 'bulletproof_security_options_MU_tools_free' ) {
1818
 
1819
  fwrite( $handle, "$".$data->option_name." = '".$data->option_name."';\n" );
1820
  fwrite( $handle, "$".$data->option_name."_array = array(\n" );
1814
  foreach ( $BPSPluginOptionRows as $data ) {
1815
 
1816
  // Exclude these BPS option settings
1817
+ if ( $data->option_name != 'bulletproof_security_options_apache_modules' && $data->option_name != 'bulletproof_security_options_MScan_status' && $data->option_name != 'bulletproof_security_options_MScan_log' && $data->option_name != 'bulletproof_security_options_DBB_log' && $data->option_name != 'bulletproof_security_options_db_backup' && $data->option_name != 'bulletproof_security_options_mod_security' && $data->option_name != 'bulletproof_security_options_wizard_free' && $data->option_name != 'bulletproof_security_options_rate_free' && $data->option_name != 'bulletproof_security_options_vcheck' && $data->option_name != 'bulletproof_security_options_MU_tools_free' && $data->option_name != 'bulletproof_security_options_mscan_plugin_hash' && $data->option_name != 'bulletproof_security_options_mscan_p_hash_new' && $data->option_name != 'bulletproof_security_options_mscan_theme_hash' && $data->option_name != 'bulletproof_security_options_mscan_t_hash_new' && $data->option_name != 'bulletproof_security_options_mscan_nodownload' && $data->option_name != 'bulletproof_security_options_mscan_zip_upload' ) {
1818
 
1819
  fwrite( $handle, "$".$data->option_name." = '".$data->option_name."';\n" );
1820
  fwrite( $handle, "$".$data->option_name."_array = array(\n" );
bulletproof-security.php CHANGED
@@ -5,12 +5,12 @@ Plugin URI: https://forum.ait-pro.com/read-me-first/
5
  Text Domain: bulletproof-security
6
  Domain Path: /languages/
7
  Description: <strong>Feature Highlights:</strong> Setup Wizard &bull; MScan Malware Scanner &bull; .htaccess Website Security Protection (Firewalls) &bull; Security Logging|HTTP Error Logging &bull; DB Backup &bull; DB Table Prefix Changer &bull; Login Security & Monitoring &bull; JTC-Lite Login Form Bot Lockout Protection &bull; Idle Session Logout (ISL) &bull; Auth Cookie Expiration (ACE) &bull; UI Theme Skin Changer &bull; System Info: Extensive System, Server and Security Status Information &bull; FrontEnd|BackEnd Maintenance Mode &bull; WP Automatic Update Options (BPS MU Tools must-use plugin) &bull; Force Strong Passwords.
8
- Version: 4.7
9
  Author: AITpro Website Security
10
  Author URI: https://forum.ait-pro.com/read-me-first/
11
  */
12
 
13
- /* Copyright (C) 2010-2019 Edward Alexander | AITpro.com
14
 
15
  This program is free software; you can redistribute it and/or modify
16
  it under the terms of the GNU General Public License as published by
@@ -31,11 +31,11 @@ Author URI: https://forum.ait-pro.com/read-me-first/
31
  // 3.4: It is not a mistake or retarded to add the global keyword to global variables outside of functions per PHP.net, but yeah it does appear to be retarded.
32
  // WP_CLI requires that all global variables outside of functions MUST explicitly use the global keyword since WP_CLI loads WP within a function
33
  // and cannot access the global variables within functions in BPS. Luckily this does not break BPS or WordPress in any way and PHP.net states this is technically not an error.
34
- global $bps_last_version, $bps_version, $aitpro_bullet, $bps_topDiv, $bps_bottomDiv, $bpsPro_remote_addr, $bpsPro_http_client_ip, $bpsPro_http_forwarded, $bpsPro_http_x_forwarded_for, $bpsPro_http_x_cluster_client_ip, $bps_wpcontent_dir, $bps_plugin_dir;
35
 
36
- define( 'BULLETPROOF_VERSION', '4.7' );
37
- $bps_last_version = '4.6';
38
- $bps_version = '4.7';
39
  $aitpro_bullet = '<img src="'.plugins_url('/bulletproof-security/admin/images/aitpro-bullet.png').'" style="padding:0px 3px 0px 3px;" />';
40
  // Top div & bottom div
41
  $bps_topDiv = '<div id="message" class="updated" style="background-color:#dfecf2;border:1px solid #999;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><p>';
@@ -89,43 +89,50 @@ function bulletproof_security_load_plugin_textdomain() {
89
  }
90
 
91
  // BPS upgrade functions
92
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/functions.php' );
 
 
 
 
 
 
 
93
  // MScan AJAX functions
94
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/mscan-ajax-functions.php' );
95
  // BPS HUD Dimiss functions - includes AutoFix AutoSetup checks
96
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/hud-autofix-setup.php' );
97
  // BPS HUD Dimiss functions - includes AutoFix AutoWhitelist checks
98
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/hud-autofix-whitelist.php' );
99
  // BPS HUD Dimiss functions - General Error Checks & Misc checks
100
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/hud-dismiss-functions.php' );
101
  // BPS Zip & Email Log File Cron functions
102
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/zip-email-cron-functions.php' );
103
  // General functions
104
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/general-functions.php' );
105
  // BPS Login Security
106
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/login-security.php' );
107
  // BPS Force Strong Passwords
108
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/force-strong-passwords.php' );
109
  // BPS DB Backup
110
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/db-security.php' );
111
  // BPS Hidden Plugin Folders|Files (HPF) Cron
112
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/hidden-plugin-folders-cron.php' );
113
  // Idle Session Logout (ISL)
114
  $BPS_ISL_options = get_option('bulletproof_security_options_idle_session');
115
  if ( isset( $BPS_ISL_options['bps_isl'] ) && $BPS_ISL_options['bps_isl'] == 'On' ) {
116
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/idle-session-logout.php' );
117
  }
118
  // PHP Encryption|Decryption class using openssl_decrypt() and openssl_encrypt()
119
  // Web hosts may see this file as malicious and block or delete it. So a file_exists check needs to be here.
120
  $bpsPro_encrypt_decrypt_class = WP_PLUGIN_DIR . '/bulletproof-security/includes/encrypt-decrypt-class.php';
121
  if ( file_exists ( $bpsPro_encrypt_decrypt_class ) ) {
122
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/includes/encrypt-decrypt-class.php' );
123
  }
124
 
125
  // If in single site Admin Dashboard
126
  if ( is_admin() ) {
127
 
128
- require_once( WP_PLUGIN_DIR . '/bulletproof-security/admin/includes/admin.php' );
129
 
130
  register_activation_hook(__FILE__, 'bulletproof_security_install');
131
  register_deactivation_hook(__FILE__, 'bulletproof_security_deactivation');
5
  Text Domain: bulletproof-security
6
  Domain Path: /languages/
7
  Description: <strong>Feature Highlights:</strong> Setup Wizard &bull; MScan Malware Scanner &bull; .htaccess Website Security Protection (Firewalls) &bull; Security Logging|HTTP Error Logging &bull; DB Backup &bull; DB Table Prefix Changer &bull; Login Security & Monitoring &bull; JTC-Lite Login Form Bot Lockout Protection &bull; Idle Session Logout (ISL) &bull; Auth Cookie Expiration (ACE) &bull; UI Theme Skin Changer &bull; System Info: Extensive System, Server and Security Status Information &bull; FrontEnd|BackEnd Maintenance Mode &bull; WP Automatic Update Options (BPS MU Tools must-use plugin) &bull; Force Strong Passwords.
8
+ Version: 4.8
9
  Author: AITpro Website Security
10
  Author URI: https://forum.ait-pro.com/read-me-first/
11
  */
12
 
13
+ /* Copyright (C) Edward Alexander | AITpro.com
14
 
15
  This program is free software; you can redistribute it and/or modify
16
  it under the terms of the GNU General Public License as published by
31
  // 3.4: It is not a mistake or retarded to add the global keyword to global variables outside of functions per PHP.net, but yeah it does appear to be retarded.
32
  // WP_CLI requires that all global variables outside of functions MUST explicitly use the global keyword since WP_CLI loads WP within a function
33
  // and cannot access the global variables within functions in BPS. Luckily this does not break BPS or WordPress in any way and PHP.net states this is technically not an error.
34
+ global $bps_last_version, $bps_version, $aitpro_bullet, $bps_topDiv, $bps_bottomDiv, $bpsPro_remote_addr, $bpsPro_http_client_ip, $bpsPro_http_forwarded, $bpsPro_http_x_forwarded_for, $bpsPro_http_x_cluster_client_ip, $bps_wpcontent_dir, $bps_plugin_dir, $plugin_hashes, $theme_hashes;
35
 
36
+ define( 'BULLETPROOF_VERSION', '4.8' );
37
+ $bps_last_version = '4.7';
38
+ $bps_version = '4.8';
39
  $aitpro_bullet = '<img src="'.plugins_url('/bulletproof-security/admin/images/aitpro-bullet.png').'" style="padding:0px 3px 0px 3px;" />';
40
  // Top div & bottom div
41
  $bps_topDiv = '<div id="message" class="updated" style="background-color:#dfecf2;border:1px solid #999;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><p>';
89
  }
90
 
91
  // BPS upgrade functions
92
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/functions.php';
93
+ // MScan Plugin and Theme file hash variables - added to global variables above: $plugin_hashes, $theme_hashes
94
+ if ( file_exists( WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php' ) ) {
95
+ require_once WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
96
+ }
97
+ if ( file_exists( WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php' ) ) {
98
+ require_once WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
99
+ }
100
  // MScan AJAX functions
101
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/mscan-ajax-functions.php';
102
  // BPS HUD Dimiss functions - includes AutoFix AutoSetup checks
103
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/hud-autofix-setup.php';
104
  // BPS HUD Dimiss functions - includes AutoFix AutoWhitelist checks
105
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/hud-autofix-whitelist.php';
106
  // BPS HUD Dimiss functions - General Error Checks & Misc checks
107
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/hud-dismiss-functions.php';
108
  // BPS Zip & Email Log File Cron functions
109
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/zip-email-cron-functions.php';
110
  // General functions
111
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/general-functions.php';
112
  // BPS Login Security
113
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/login-security.php';
114
  // BPS Force Strong Passwords
115
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/force-strong-passwords.php';
116
  // BPS DB Backup
117
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/db-security.php';
118
  // BPS Hidden Plugin Folders|Files (HPF) Cron
119
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/hidden-plugin-folders-cron.php';
120
  // Idle Session Logout (ISL)
121
  $BPS_ISL_options = get_option('bulletproof_security_options_idle_session');
122
  if ( isset( $BPS_ISL_options['bps_isl'] ) && $BPS_ISL_options['bps_isl'] == 'On' ) {
123
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/idle-session-logout.php';
124
  }
125
  // PHP Encryption|Decryption class using openssl_decrypt() and openssl_encrypt()
126
  // Web hosts may see this file as malicious and block or delete it. So a file_exists check needs to be here.
127
  $bpsPro_encrypt_decrypt_class = WP_PLUGIN_DIR . '/bulletproof-security/includes/encrypt-decrypt-class.php';
128
  if ( file_exists ( $bpsPro_encrypt_decrypt_class ) ) {
129
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/encrypt-decrypt-class.php';
130
  }
131
 
132
  // If in single site Admin Dashboard
133
  if ( is_admin() ) {
134
 
135
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/admin/includes/admin.php';
136
 
137
  register_activation_hook(__FILE__, 'bulletproof_security_install');
138
  register_deactivation_hook(__FILE__, 'bulletproof_security_deactivation');
includes/functions.php CHANGED
@@ -819,7 +819,7 @@ function bpsProMScanStatus() {
819
  </style>
820
 
821
  <?php
822
- $bps_question_mark_mscan = '<div class="mscan-tooltip"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;right:1px;" /><span>An MScan scan has not been run yet or the MScan Delete Scan Status Tool has been used to delete MScan Status values, which deletes the last MScan scan Timestamp for the last scan that was run.</span></div>';
823
 
824
  if ( ! isset($MScan_status['bps_mscan_status']) || ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ) {
825
  $text = '<div id="bps-status-display" style="float:left;font-weight:600;margin:-2px 0px 0px 0px;">' . $aitpro_bullet . '<a href="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" title="MScan Malware Scanner" style="text-decoration:none;">'.esc_attr__('MSCAN', 'bulletproof-security').'</a>: '.$bps_question_mark_mscan.'</div>';
819
  </style>
820
 
821
  <?php
822
+ $bps_question_mark_mscan = '<div class="mscan-tooltip"><img src="'.plugins_url('/bulletproof-security/admin/images/question-mark.png').'" style="position:relative;top:3px;right:1px;" /><span>An MScan scan has not been run yet.</span></div>';
823
 
824
  if ( ! isset($MScan_status['bps_mscan_status']) || ! isset($MScan_status['bps_mscan_last_scan_timestamp']) ) {
825
  $text = '<div id="bps-status-display" style="float:left;font-weight:600;margin:-2px 0px 0px 0px;">' . $aitpro_bullet . '<a href="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'" title="MScan Malware Scanner" style="text-decoration:none;">'.esc_attr__('MSCAN', 'bulletproof-security').'</a>: '.$bps_question_mark_mscan.'</div>';
includes/general-functions.php CHANGED
@@ -912,14 +912,18 @@ function bpsPro_mu_tools_plugin_copy() {
912
  // This function is run in the BPS upgrade function and in the Setup Wizard ONLY.
913
  function bpsPro_presave_mscan_options() {
914
 
915
- $raw_source = $_SERVER['DOCUMENT_ROOT'];
916
- $source = realpath($raw_source);
917
-
 
 
 
 
 
 
918
  if ( is_dir($source) ) {
919
 
920
- $MScan_options = get_option('bulletproof_security_options_MScan');
921
  $iterator = new DirectoryIterator($source);
922
- $dir_array = array();
923
 
924
  foreach ( $iterator as $files ) {
925
  try {
@@ -930,102 +934,179 @@ function bpsPro_presave_mscan_options() {
930
  }
931
  }
932
  } catch (RuntimeException $e) {
933
- // pending error message or log entry after Beta Testing is completed
934
  }
935
  }
 
 
 
 
936
 
937
- $dir_flip = array_flip($dir_array);
938
-
939
- // replace values in the flipped array, good for bulk replacing all values. ie all dirs found.
940
- $mscan_actual_dirs = array();
 
 
 
 
 
 
 
941
 
942
- foreach ( $dir_flip as $key => $value ) {
943
- $mscan_actual_dirs[$key] = preg_replace( '/\d+/', "1", $value );
944
- }
 
 
 
945
 
946
- $MScan_options = get_option('bulletproof_security_options_MScan');
947
-
948
- // This is not a mistake. See the else condition.
949
- if ( ! empty($MScan_options['bps_mscan_dirs']) ) {
950
-
951
- $mscan_dirs_options_inner_array = array();
952
-
953
- foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
954
- $mscan_dirs_options_inner_array[$key] = $value;
955
  }
956
-
957
- // get new dirs found that do not exist in the bps_mscan_dirs db option. ie a new dir has been created.
958
- $mscan_diff_key_dir = array_diff_key($mscan_actual_dirs, $mscan_dirs_options_inner_array);
959
-
960
- // get old dirs that still exist in the bps_mscan_dirs db option. ie a dir has been deleted.
961
- $mscan_diff_key_options = array_diff_key($mscan_dirs_options_inner_array, $dir_flip);
962
 
963
- if ( ! empty($mscan_diff_key_options) ) {
 
964
 
965
- foreach ( $mscan_diff_key_options as $key => $value ) {
966
- unset($mscan_dirs_options_inner_array[$key]);
967
- }
968
 
969
- // merge any new dirs found
970
- $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
971
- ksort($mscan_array_merge);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
972
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
973
  } else {
974
-
975
- // merge any new dirs found
976
- $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
977
- ksort($mscan_array_merge);
978
  }
979
-
980
- } else {
981
- $mscan_array_merge = $mscan_actual_dirs;
982
- ksort($mscan_array_merge);
983
  }
984
-
985
- $mscan_max_file_size = ! isset($MScan_options['mscan_max_file_size']) ? '400' : $MScan_options['mscan_max_file_size'];
986
- $mscan_max_time_limit = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
987
- $mscan_scan_database = ! isset($MScan_options['mscan_scan_database']) ? 'On' : $MScan_options['mscan_scan_database'];
988
- $mscan_scan_images = ! isset($MScan_options['mscan_scan_images']) ? 'Off' : $MScan_options['mscan_scan_images'];
989
- $mscan_scan_skipped_files = ! isset($MScan_options['mscan_scan_skipped_files']) ? 'Off' : $MScan_options['mscan_scan_skipped_files'];
990
- $mscan_scan_delete_tmp_files = ! isset($MScan_options['mscan_scan_delete_tmp_files']) ? 'Off' : $MScan_options['mscan_scan_delete_tmp_files'];
991
- $mscan_scan_frequency = ! isset($MScan_options['mscan_scan_frequency']) ? 'Off' : $MScan_options['mscan_scan_frequency'];
992
- $mscan_exclude_dirs = ! isset($MScan_options['mscan_exclude_dirs']) ? '' : $MScan_options['mscan_exclude_dirs'];
993
- $mscan_exclude_tmp_files = ! isset($MScan_options['mscan_exclude_tmp_files']) ? '' : $MScan_options['mscan_exclude_tmp_files'];
994
-
995
- $MS_Options = array(
996
- 'bps_mscan_dirs' => $mscan_array_merge,
997
- 'mscan_max_file_size' => $mscan_max_file_size,
998
- 'mscan_max_time_limit' => $mscan_max_time_limit,
999
- 'mscan_scan_database' => $mscan_scan_database,
1000
- 'mscan_scan_images' => $mscan_scan_images,
1001
- 'mscan_scan_skipped_files' => $mscan_scan_skipped_files,
1002
- 'mscan_scan_delete_tmp_files' => $mscan_scan_delete_tmp_files,
1003
- 'mscan_scan_frequency' => $mscan_scan_frequency,
1004
- 'mscan_exclude_dirs' => $mscan_exclude_dirs,
1005
- 'mscan_exclude_tmp_files' => $mscan_exclude_tmp_files
1006
- );
1007
-
1008
- $mscan_successMessage = __(' DB Option created or updated Successfully!', 'bulletproof-security');
1009
- $mscan_dir_successMessage = __(' Hosting Account Root Folder Option setup or updated Successfully!', 'bulletproof-security');
1010
- $successTextBegin = '<font color="green"><strong>';
1011
- $successTextEnd = '</strong></font><br>';
1012
 
1013
- foreach( $MS_Options as $key => $value ) {
1014
- update_option('bulletproof_security_options_MScan', $MS_Options);
1015
-
1016
- if ( esc_html($_SERVER['QUERY_STRING']) == 'page=bulletproof-security/admin/wizard/wizard.php' ) {
1017
- //echo $successTextBegin.$key.$mscan_successMessage.$successTextEnd;
 
 
 
 
 
1018
  }
 
 
 
 
 
 
 
 
 
 
1019
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
1020
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1021
  if ( esc_html($_SERVER['QUERY_STRING']) == 'page=bulletproof-security/admin/wizard/wizard.php' ) {
1022
- $MScan_options = get_option('bulletproof_security_options_MScan');
 
 
 
 
 
 
 
1023
 
1024
- if ( $MScan_options['bps_mscan_dirs'] != '' ) {
1025
-
1026
- foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
1027
- //echo $successTextBegin.$key.$mscan_dir_successMessage.$successTextEnd;
1028
- }
1029
  }
1030
  }
1031
  }
@@ -1182,6 +1263,16 @@ function bpsPro_new_version_db_options_files_autoupdate() {
1182
 
1183
  $user_id = $current_user->ID;
1184
 
 
 
 
 
 
 
 
 
 
 
1185
  // 4.6: New Feature: Force Strong Passwords: Pre-save option settings
1186
  if ( ! get_option('bulletproof_security_options_fsp') ) {
1187
 
@@ -1371,7 +1462,7 @@ function bpsPro_new_version_db_options_files_autoupdate() {
1371
  // 4.3: delete the Dismiss Notice DB option: bps_ignore_autoupdate_notice
1372
  bpsPro_mu_tools_plugin_copy();
1373
  delete_user_meta($user_id, 'bps_ignore_autoupdate_notice');
1374
- // 2.4: Pre-save MScan Options
1375
  bpsPro_presave_mscan_options();
1376
 
1377
  // 2.4: Pre-save MScan Log option
912
  // This function is run in the BPS upgrade function and in the Setup Wizard ONLY.
913
  function bpsPro_presave_mscan_options() {
914
 
915
+ $MScan_options = get_option('bulletproof_security_options_MScan');
916
+ $wp_abspath_forward_slashes = str_replace( '\\', '/', ABSPATH );
917
+ $wp_install_folder = str_replace( array( get_home_path(), '/', ), "", $wp_abspath_forward_slashes );
918
+ $wp_includes_forward_slashes = $wp_abspath_forward_slashes . WPINC;
919
+ $wp_includes_folder = str_replace( $wp_abspath_forward_slashes, "", $wp_includes_forward_slashes );
920
+
921
+ $source = $wp_abspath_forward_slashes;
922
+ $dir_array = array();
923
+
924
  if ( is_dir($source) ) {
925
 
 
926
  $iterator = new DirectoryIterator($source);
 
927
 
928
  foreach ( $iterator as $files ) {
929
  try {
934
  }
935
  }
936
  } catch (RuntimeException $e) {
937
+
938
  }
939
  }
940
+ }
941
+
942
+ $get_home_path = get_home_path();
943
+ $home_dir_array = array();
944
 
945
+ if ( $wp_abspath_forward_slashes != $get_home_path ) {
946
+
947
+ if ( is_dir($get_home_path) ) {
948
+
949
+ $iterator = new DirectoryIterator($get_home_path);
950
+
951
+ foreach ( $iterator as $files ) {
952
+ try {
953
+ if ( $files->isDir() && ! $files->isDot() ) {
954
+
955
+ if ( $wp_install_folder != $files->getFilename() && $bps_wpcontent_dir != $files->getFilename() && $wp_includes_folder != $files->getFilename() && 'wp-admin' != $files->getFilename()) {
956
 
957
+ if ( ! empty( $files ) ) {
958
+ $home_dir_array[] = $files->getFilename();
959
+ }
960
+ }
961
+ }
962
+ } catch (RuntimeException $e) {
963
 
964
+ }
 
 
 
 
 
 
 
 
965
  }
966
+ }
967
+ }
 
 
 
 
968
 
969
+ $dir_array_merge = array_merge($dir_array, $home_dir_array);
970
+ $dir_flip = array_flip($dir_array_merge);
971
 
972
+ // replace values in all dirs found except for other WP site folders.
973
+ $mscan_actual_dirs = array();
974
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
975
 
976
+ foreach ( $dir_flip as $key => $value ) {
977
+
978
+ $wp_index_file = $source . $key . '/index.php';
979
+ $wp_blog_header_file = $source . $key . '/wp-blog-header.php';
980
+ $wp_cron_file = $source . $key . '/wp-cron.php';
981
+ $wp_load_file = $source . $key . '/wp-load.php';
982
+ $wp_login_file = $source . $key . '/wp-login.php';
983
+ $wp_settings_file = $source . $key . '/wp-settings.php';
984
+
985
+ $home_wp_index_file = $get_home_path . $key . '/index.php';
986
+ $home_wp_blog_header_file = $get_home_path . $key . '/wp-blog-header.php';
987
+ $home_wp_cron_file = $get_home_path . $key . '/wp-cron.php';
988
+ $home_wp_load_file = $get_home_path . $key . '/wp-load.php';
989
+ $home_wp_login_file = $get_home_path . $key . '/wp-login.php';
990
+ $home_wp_settings_file = $get_home_path . $key . '/wp-settings.php';
991
+
992
+ if ( file_exists($wp_index_file) ) {
993
+ $check_string = file_get_contents($wp_index_file);
994
+ }
995
+
996
+ if ( file_exists($home_wp_index_file) ) {
997
+ $home_check_string = file_get_contents($home_wp_index_file);
998
+ }
999
+
1000
+ if ( file_exists($wp_index_file) && preg_match( $pattern, $check_string ) && file_exists($wp_blog_header_file) && file_exists($wp_cron_file) && file_exists($wp_load_file) && file_exists($wp_login_file) && file_exists($wp_settings_file) || file_exists($home_wp_index_file) && preg_match( $pattern, $home_check_string ) && file_exists($home_wp_blog_header_file) && file_exists($home_wp_cron_file) && file_exists($home_wp_load_file) && file_exists($home_wp_login_file) && file_exists($home_wp_settings_file) ) {
1001
+ $mscan_actual_dirs[$key] = preg_replace( '/\d+/', "", $value );
1002
+ } else {
1003
+ $mscan_actual_dirs[$key] = preg_replace( '/\d+/', "1", $value );
1004
+ }
1005
+ }
1006
+
1007
+ // This is not a mistake/redundant. See the else condition.
1008
+ if ( ! empty($MScan_options['bps_mscan_dirs']) ) {
1009
 
1010
+ $mscan_dirs_options_inner_array = array();
1011
+
1012
+ foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
1013
+
1014
+ $wp_index_file = $source . $key . '/index.php';
1015
+ $home_wp_index_file = $get_home_path . $key . '/index.php';
1016
+
1017
+ if ( file_exists($wp_index_file) ) {
1018
+ $check_string = file_get_contents($wp_index_file);
1019
+ }
1020
+
1021
+ if ( file_exists($home_wp_index_file) ) {
1022
+ $home_check_string = file_get_contents($home_wp_index_file);
1023
+ }
1024
+
1025
+ if ( file_exists($wp_index_file) && preg_match( $pattern, $check_string ) || file_exists($home_wp_index_file) && preg_match( $pattern, $home_check_string ) ) {
1026
+ $mscan_dirs_options_inner_array[$key] = '';
1027
  } else {
1028
+ $mscan_dirs_options_inner_array[$key] = $value;
 
 
 
1029
  }
 
 
 
 
1030
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1031
 
1032
+ // get new dirs found that do not exist in the bps_mscan_dirs db option. ie a new dir has been created.
1033
+ $mscan_diff_key_dir = array_diff_key($mscan_actual_dirs, $mscan_dirs_options_inner_array);
1034
+
1035
+ // get old dirs that still exist in the bps_mscan_dirs db option. ie a dir has been deleted.
1036
+ $mscan_diff_key_options = array_diff_key($mscan_dirs_options_inner_array, $dir_flip);
1037
+
1038
+ if ( ! empty($mscan_diff_key_options) ) {
1039
+
1040
+ foreach ( $mscan_diff_key_options as $key => $value ) {
1041
+ unset($mscan_dirs_options_inner_array[$key]);
1042
  }
1043
+
1044
+ // merge any new dirs found
1045
+ $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
1046
+ ksort($mscan_array_merge);
1047
+
1048
+ } else {
1049
+
1050
+ // merge any new dirs found
1051
+ $mscan_array_merge = array_merge( $mscan_diff_key_dir, $mscan_dirs_options_inner_array );
1052
+ ksort($mscan_array_merge);
1053
  }
1054
+
1055
+ } else {
1056
+ $mscan_array_merge = $mscan_actual_dirs;
1057
+ ksort($mscan_array_merge);
1058
+ }
1059
+
1060
+ if ( ! isset($MScan_options['mscan_file_size_limit_hidden']) ) {
1061
+ $mscan_max_file_size = '1000';
1062
+ $mscan_file_size_limit_hidden = '14';
1063
+ } else {
1064
+ $mscan_max_file_size = $MScan_options['mscan_max_file_size'];
1065
+ $mscan_file_size_limit_hidden = '14';
1066
+ }
1067
 
1068
+ $mscan_max_time_limit = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
1069
+ $mscan_scan_database = ! isset($MScan_options['mscan_scan_database']) ? 'On' : $MScan_options['mscan_scan_database'];
1070
+ $mscan_scan_skipped_files = ! isset($MScan_options['mscan_scan_skipped_files']) ? 'Off' : $MScan_options['mscan_scan_skipped_files'];
1071
+ $mscan_scan_delete_tmp_files = ! isset($MScan_options['mscan_scan_delete_tmp_files']) ? 'Off' : $MScan_options['mscan_scan_delete_tmp_files'];
1072
+ $mscan_scan_frequency = ! isset($MScan_options['mscan_scan_frequency']) ? 'Off' : $MScan_options['mscan_scan_frequency'];
1073
+ $mscan_exclude_dirs = ! isset($MScan_options['mscan_exclude_dirs']) ? '' : $MScan_options['mscan_exclude_dirs'];
1074
+ $mscan_exclude_tmp_files = ! isset($MScan_options['mscan_exclude_tmp_files']) ? '' : $MScan_options['mscan_exclude_tmp_files'];
1075
+
1076
+ $MS_Options = array(
1077
+ 'bps_mscan_dirs' => $mscan_array_merge,
1078
+ 'mscan_max_file_size' => $mscan_max_file_size,
1079
+ 'mscan_max_time_limit' => $mscan_max_time_limit,
1080
+ 'mscan_scan_database' => $mscan_scan_database,
1081
+ 'mscan_scan_images' => 'Off',
1082
+ 'mscan_scan_skipped_files' => $mscan_scan_skipped_files,
1083
+ 'mscan_scan_delete_tmp_files' => $mscan_scan_delete_tmp_files,
1084
+ 'mscan_scan_frequency' => $mscan_scan_frequency,
1085
+ 'mscan_exclude_dirs' => $mscan_exclude_dirs,
1086
+ 'mscan_exclude_tmp_files' => $mscan_exclude_tmp_files,
1087
+ 'mscan_file_size_limit_hidden' => $mscan_file_size_limit_hidden
1088
+ );
1089
+
1090
+ $mscan_successMessage = __(' DB Option created or updated Successfully!', 'bulletproof-security');
1091
+ $mscan_dir_successMessage = __(' Hosting Account Root Folder Option setup or updated Successfully!', 'bulletproof-security');
1092
+ $successTextBegin = '<font color="green"><strong>';
1093
+ $successTextEnd = '</strong></font><br>';
1094
+
1095
+ foreach( $MS_Options as $key => $value ) {
1096
+ update_option('bulletproof_security_options_MScan', $MS_Options);
1097
+
1098
  if ( esc_html($_SERVER['QUERY_STRING']) == 'page=bulletproof-security/admin/wizard/wizard.php' ) {
1099
+ //echo $successTextBegin.$key.$mscan_successMessage.$successTextEnd;
1100
+ }
1101
+ }
1102
+
1103
+ if ( esc_html($_SERVER['QUERY_STRING']) == 'page=bulletproof-security/admin/wizard/wizard.php' ) {
1104
+ $MScan_options = get_option('bulletproof_security_options_MScan');
1105
+
1106
+ if ( $MScan_options['bps_mscan_dirs'] != '' ) {
1107
 
1108
+ foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
1109
+ //echo $successTextBegin.$key.$mscan_dir_successMessage.$successTextEnd;
 
 
 
1110
  }
1111
  }
1112
  }
1263
 
1264
  $user_id = $current_user->ID;
1265
 
1266
+ // 4.8: MScan new feature Dismiss Notice - only displayed to people who have upgraded BPS. Not new installations of BPS.
1267
+ if ( ! get_option('bulletproof_security_options_new_feature') ) {
1268
+
1269
+ $bps_mscan_rebuild = array( 'bps_mscan_rebuild' => 'upgrade' );
1270
+
1271
+ foreach( $bps_mscan_rebuild as $key => $value ) {
1272
+ update_option('bulletproof_security_options_new_feature', $bps_mscan_rebuild);
1273
+ }
1274
+ }
1275
+
1276
  // 4.6: New Feature: Force Strong Passwords: Pre-save option settings
1277
  if ( ! get_option('bulletproof_security_options_fsp') ) {
1278
 
1462
  // 4.3: delete the Dismiss Notice DB option: bps_ignore_autoupdate_notice
1463
  bpsPro_mu_tools_plugin_copy();
1464
  delete_user_meta($user_id, 'bps_ignore_autoupdate_notice');
1465
+ // 2.4|4.8: Pre-save MScan Options
1466
  bpsPro_presave_mscan_options();
1467
 
1468
  // 2.4: Pre-save MScan Log option
includes/hud-dismiss-functions.php CHANGED
@@ -29,13 +29,14 @@ function bps_HUD_WP_Dashboard() {
29
  bpsPro_BBM_htaccess_check();
30
  bpsPro_hud_speed_boost_cache_code();
31
  //bps_hud_check_autoupdate();
32
- bpsPro_hud_mscan_notice();
33
  bpsPro_hud_jtc_lite_notice();
34
  bpsPro_hud_rate_notice();
35
  //bpsPro_hud_mod_security_check();
36
  bpsPro_hud_gdpr_compliance();
37
  //bps_hud_check_public_username();
38
  bpsPro_mu_wp_automatic_updates_notice();
 
39
  }
40
  }
41
  add_action('admin_notices', 'bps_HUD_WP_Dashboard');
@@ -614,33 +615,6 @@ $user_id = $current_user->ID;
614
  }
615
  }
616
 
617
- // Heads Up Display w/ Dismiss - MScan first run notice
618
- function bpsPro_hud_mscan_notice() {
619
-
620
- if ( esc_html($_SERVER['QUERY_STRING']) == 'page=bulletproof-security/admin/mscan/mscan.php' ) {
621
-
622
- global $current_user;
623
- $user_id = $current_user->ID;
624
-
625
- if ( ! get_user_meta($user_id, 'bps_ignore_mscan_notice') ) {
626
-
627
- $text = '<div style="background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:0px 5px;margin:0px 0px 35px 0px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><font color="blue">'.__('MScan First Run Notice', 'bulletproof-security').'</font><br>'.__('Please take a few minutes to read the "Basic Info|Recommendations|Limitations|Restrictions" help section in the', 'bulletproof-security').' <a href="https://forum.ait-pro.com/forums/topic/mscan-malware-scanner-guide/" target="_blank" title="MScan Malware Scanner Guide">'.__('MScan Malware Scanner Guide', 'bulletproof-security').'</a> '.__('before running a scan.', 'bulletproof-security').'<br>'.__('It is highly recommended that you use the Scan Time Estimate Tool before running an actual scan. The Scan Time Estimate Tool calculates the total estimated time of a scan based on your MScan Option settings without actually running a scan. To Dismiss this Notice click the Dismiss Notice button below. To Reset Dismiss Notices click the Reset|Recheck Dismiss Notices button on the BPS Custom Code page.', 'bulletproof-security').'<br><div style="float:left;margin:3px 0px 3px 0px;padding:2px 6px 2px 6px;background-color:#e8e8e8;border:1px solid gray;"><a href="'.admin_url( 'admin.php?page=bulletproof-security%2Fadmin%2Fmscan%2Fmscan.php&bps_mscan_nag_ignore=0' ).''.'" style="text-decoration:none;font-weight:bold;">'.__('Dismiss Notice', 'bulletproof-security').'</a></div></div>';
628
- echo $text;
629
- }
630
- }
631
- }
632
-
633
- add_action('admin_init', 'bpsPro_mscan_nag_ignore');
634
-
635
- function bpsPro_mscan_nag_ignore() {
636
- global $current_user;
637
- $user_id = $current_user->ID;
638
-
639
- if ( isset($_GET['bps_mscan_nag_ignore']) && '0' == $_GET['bps_mscan_nag_ignore'] ) {
640
- add_user_meta($user_id, 'bps_ignore_mscan_notice', 'true', true);
641
- }
642
- }
643
-
644
  // Heads Up Display w/ Dismiss - JTC-Lite New Feature Dismiss Notice
645
  function bpsPro_hud_jtc_lite_notice() {
646
 
@@ -851,4 +825,49 @@ $user_id = $current_user->ID;
851
  }
852
  }
853
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
854
  ?>
29
  bpsPro_BBM_htaccess_check();
30
  bpsPro_hud_speed_boost_cache_code();
31
  //bps_hud_check_autoupdate();
32
+ //bpsPro_hud_mscan_notice();
33
  bpsPro_hud_jtc_lite_notice();
34
  bpsPro_hud_rate_notice();
35
  //bpsPro_hud_mod_security_check();
36
  bpsPro_hud_gdpr_compliance();
37
  //bps_hud_check_public_username();
38
  bpsPro_mu_wp_automatic_updates_notice();
39
+ bpsPro_hud_new_feature_notice();
40
  }
41
  }
42
  add_action('admin_notices', 'bps_HUD_WP_Dashboard');
615
  }
616
  }
617
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
618
  // Heads Up Display w/ Dismiss - JTC-Lite New Feature Dismiss Notice
619
  function bpsPro_hud_jtc_lite_notice() {
620
 
825
  }
826
  }
827
 
828
+ // Heads Up Display w/ Dismiss - New feature or option Dismiss Notice - Used for very important new features and very rarely.
829
+ function bpsPro_hud_new_feature_notice() {
830
+
831
+ if ( ! get_option('bulletproof_security_options_new_feature') ) {
832
+ return;
833
+ }
834
+
835
+ $new_feature_options = get_option('bulletproof_security_options_new_feature');
836
+
837
+ if ( $new_feature_options['bps_mscan_rebuild'] == 'new' ) {
838
+ return;
839
+ }
840
+
841
+ if ( $new_feature_options['bps_mscan_rebuild'] == 'upgrade' ) {
842
+
843
+ global $current_user;
844
+ $options = get_option('bulletproof_security_options_monitor');
845
+ $user_id = $current_user->ID;
846
+
847
+ if ( ! get_user_meta($user_id, 'bpsPro_hud_new_feature_notice') ) {
848
+
849
+ if ( esc_html($_SERVER['QUERY_STRING']) == '' && basename(esc_html($_SERVER['REQUEST_URI'])) != 'wp-admin' ) {
850
+ $bps_base = basename(esc_html($_SERVER['REQUEST_URI'])) . '?';
851
+ } elseif ( esc_html($_SERVER['QUERY_STRING']) == '' && basename(esc_html($_SERVER['REQUEST_URI'])) == 'wp-admin' ) {
852
+ $bps_base = basename( str_replace( 'wp-admin', 'index.php?', esc_html($_SERVER['REQUEST_URI'])));
853
+ } else {
854
+ $bps_base = str_replace( admin_url(), '', esc_html($_SERVER['REQUEST_URI']) ) . '&';
855
+ }
856
+
857
+ $text = '<div class="update-nag" style="background-color:#dfecf2;border:1px solid #999;font-size:1em;font-weight:600;padding:2px 5px;margin-top:2px;-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;-khtml-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;-khtml-border-top-right-radius:3px;border-top-right-radius:3px;-webkit-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);-moz-box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);box-shadow: 3px 3px 5px -1px rgba(153,153,153,0.7);"><font color="blue">'.__('MScan 2.0 Rebuild Notice', 'bulletproof-security').'</font><br>'.__('MScan has been completely rebuilt. MScan 2.0 is faster, very accurate and user friendly. ', 'bulletproof-security').'<br><a href="'.admin_url( 'admin.php?page=bulletproof-security/admin/mscan/mscan.php' ).'">'.__('Check out MScan 2.0', 'bulletproof-security').'</a>.'.__(' Recommendation: Click the Reset MScan button before running a new scan.', 'bulletproof-security').'<br>'.__('To Dismiss this Notice click the Dismiss Notice button below. To Reset Dismiss Notices click the Reset|Recheck Dismiss Notices button on the BPS Custom Code page.', 'bulletproof-security').'<br><div style="float:left;margin:3px 0px 3px 0px;padding:2px 6px 2px 6px;background-color:#e8e8e8;border:1px solid gray;"><a href="'.$bps_base.'bpsPro_new_feature_nag_ignore=0'.'" style="text-decoration:none;font-weight:bold;">'.__('Dismiss Notice', 'bulletproof-security').'</a></div></div>';
858
+ echo $text;
859
+ }
860
+ }
861
+ }
862
+
863
+ add_action('admin_init', 'bpsPro_new_feature_nag_ignore');
864
+
865
+ function bpsPro_new_feature_nag_ignore() {
866
+ global $current_user;
867
+ $user_id = $current_user->ID;
868
+
869
+ if ( isset($_GET['bpsPro_new_feature_nag_ignore']) && '0' == $_GET['bpsPro_new_feature_nag_ignore'] ) {
870
+ add_user_meta($user_id, 'bpsPro_hud_new_feature_notice', 'true', true);
871
+ }
872
+ }
873
  ?>
includes/mscan-ajax-functions.php CHANGED
@@ -18,7 +18,7 @@ if ( file_exists($filename) ) {
18
  }
19
 
20
  ## MScan manual AJAX scan
21
- ## See malware-scanner.php for extensive notes
22
  function bpsPro_mscan_scan_processing() {
23
 
24
  if ( isset( $_POST['post_var'] ) && $_POST['post_var'] == 'bps_mscan' ) {
@@ -30,11 +30,27 @@ function bpsPro_mscan_scan_processing() {
30
  $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
31
  ini_set('max_execution_time', $mstime);
32
 
 
 
 
 
33
  if ( bpsPro_mscan_calculate_scan_time($mstime) == true ) {
34
  if ( bpsPro_wp_zip_download($mstime) == true ) {
35
  if ( bpsPro_wp_zip_extractor() == true ) {
36
  if ( bpsPro_wp_hash_maker() == true ) {
37
- bpsPro_mscan_file_scan($mstime);
 
 
 
 
 
 
 
 
 
 
 
 
38
  }
39
  }
40
  }
@@ -45,6 +61,7 @@ function bpsPro_mscan_scan_processing() {
45
 
46
  add_action('wp_ajax_bps_mscan_scan_processing', 'bpsPro_mscan_scan_processing');
47
 
 
48
  function bpsPro_mscan_scan_estimate() {
49
 
50
  if ( isset( $_POST['post_var'] ) && $_POST['post_var'] == 'bps_mscan_estimate' ) {
@@ -56,6 +73,7 @@ function bpsPro_mscan_scan_estimate() {
56
  $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
57
  ini_set('max_execution_time', $mstime);
58
 
 
59
  if ( bpsPro_mscan_calculate_scan_time($mstime) == true ) {
60
 
61
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
@@ -68,16 +86,18 @@ function bpsPro_mscan_scan_estimate() {
68
  'bps_mscan_status' => '5',
69
  'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
70
  'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
71
- 'bps_mscan_total_website_files' => $MScan_status['bps_mscan_total_website_files'],
72
  'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
73
  'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
74
- 'bps_mscan_total_image_files' => $MScan_status['bps_mscan_total_image_files'],
75
  'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
76
  'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
77
  'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
78
  'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
79
  'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
80
- 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files']
 
 
81
  );
82
 
83
  foreach( $MScan_status_db as $key => $value ) {
@@ -90,27 +110,37 @@ function bpsPro_mscan_scan_estimate() {
90
 
91
  add_action('wp_ajax_bps_mscan_scan_estimate', 'bpsPro_mscan_scan_estimate');
92
 
 
93
  class BPSMScanRecursiveFilterIterator extends RecursiveFilterIterator {
94
 
95
  public function accept() {
96
  $MScan_options = get_option('bulletproof_security_options_MScan');
97
  $excluded_dirs = array();
 
 
 
98
 
99
  foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
100
  if ( $value == '' ) {
101
  $excluded_dirs[] = $key;
 
102
  }
103
  }
104
- return !in_array( $this->getSubPathName(), $excluded_dirs, true );
 
 
 
105
  }
106
  }
107
 
 
108
  function bpsPro_mscan_calculate_scan_time($mstime) {
109
- global $wp_version, $wpdb;
110
 
111
  $time_start = microtime( true );
112
 
113
  $MScan_options = get_option('bulletproof_security_options_MScan');
 
114
  $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
115
 
116
  set_time_limit($mstime);
@@ -124,6 +154,7 @@ global $wp_version, $wpdb;
124
  $handle = fopen( $mscan_log, 'a' );
125
 
126
  fwrite( $handle, "\r\n[MScan Scan Start: $timestamp]\r\n" );
 
127
  fwrite( $handle, "Scan Time Calculation: Start Count total files to scan.\r\n" );
128
 
129
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
@@ -133,7 +164,16 @@ global $wp_version, $wpdb;
133
  }
134
 
135
  $bps_wpcontent_dir = str_replace( ABSPATH, '', WP_CONTENT_DIR );
136
- $source = $_SERVER['DOCUMENT_ROOT'];
 
 
 
 
 
 
 
 
 
137
 
138
  if ( is_dir($source) ) {
139
 
@@ -141,13 +181,15 @@ global $wp_version, $wpdb;
141
  $filterItr = new BPSMScanRecursiveFilterIterator($dirItr);
142
  $iterator = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
143
 
144
- $image_file_path_array = array();
145
  $file_path_array = array();
146
  $wp_core_file_array = array();
147
- $total_website_files_array = array();
148
  $skipped_image_file_path_array = array();
149
  $skipped_nonimage_file_path_array = array();
150
 
 
 
 
151
  $wp_core_root_file_array = array( 'wp-activate.php', 'wp-blog-header.php', 'wp-comments-post.php', 'wp-config-sample.php', 'wp-cron.php', 'wp-links-opml.php', 'wp-load.php', 'wp-login.php', 'wp-mail.php', 'wp-settings.php', 'wp-signup.php', 'wp-trackback.php' );
152
 
153
  foreach ( $iterator as $files ) {
@@ -162,13 +204,14 @@ global $wp_version, $wpdb;
162
 
163
  } else {
164
 
165
- if ( ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)bps-backup(\/|\\\))(.*)/', $files->getPathname() ) ) {
166
 
167
- $total_website_files_array[] = $files->getPathname();
168
 
169
  if ( $files->getFilename() == 'index.php' ) {
 
170
  $check_string1 = file_get_contents( $files->getPath() . '/index.php' );
171
- $pos1 = strpos( $check_string1, "define('WP_USE_THEMES" );
172
  }
173
 
174
  if ( $files->getFilename() == 'readme.html' ) {
@@ -203,6 +246,10 @@ global $wp_version, $wpdb;
203
  $exclude_dirs_pattern = '/(\/bps-no-dirs\/)/';
204
  }
205
 
 
 
 
 
206
  $core_pattern = '/(.*)((\/|\\\)wp-admin(\/|\\\)|(\/|\\\)wp-includes(\/|\\\))(.*)/';
207
 
208
  if ( preg_match( $core_pattern, $files->getPathname() ) || $files->getFilename() == 'index.php' && $pos1 !== false || $files->getFilename() == 'readme.html' && $pos2 !== false || $files->getFilename() == 'xmlrpc.php' && $pos3 !== false || in_array($files->getFilename(), $wp_core_root_file_array) ) {
@@ -215,27 +262,13 @@ global $wp_version, $wpdb;
215
 
216
  if ( $files->getSize() <= $MScan_options['mscan_max_file_size'] * 1024 ) {
217
 
218
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
219
-
220
- if ( $ext == 'png' || $ext == 'gif' || $ext == 'bmp' || $ext == 'jpg' || $ext == 'jpeg' || $ext == 'tif' || $ext == 'tiff' ) {
221
- $image_file_path_array[] = $files->getPathname();
222
- }
223
- }
224
-
225
- if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' ) {
226
  $file_path_array[] = $files->getPathname();
227
  }
228
 
229
  } else {
230
 
231
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
232
-
233
- if ( $ext == 'png' || $ext == 'gif' || $ext == 'bmp' || $ext == 'jpg' || $ext == 'jpeg' || $ext == 'tif' || $ext == 'tiff' ) {
234
- $skipped_image_file_path_array[] = $files->getPathname();
235
- }
236
- }
237
-
238
- if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' ) {
239
  $skipped_nonimage_file_path_array[] = $files->getPathname();
240
  }
241
  }
@@ -244,14 +277,11 @@ global $wp_version, $wpdb;
244
  }
245
  }
246
  } catch (RuntimeException $e) {
247
- // pending error message or log entry after Beta Testing is completed
248
  }
249
  }
250
 
251
- ## Testing Time Loop: add 20 seconds to force a Time Loop
252
- //sleep(20);
253
-
254
- $skipped_file_path_array = array_merge($skipped_image_file_path_array, $skipped_nonimage_file_path_array);
255
 
256
  $MStable = $wpdb->prefix . "bpspro_mscan";
257
 
@@ -281,9 +311,9 @@ global $wp_version, $wpdb;
281
  foreach ( $file_path_array as $key => $value ) {
282
 
283
  if ( preg_match( '/index\.php/', $value ) ) {
 
284
  $check_string4 = file_get_contents( $value );
285
- $pos4 = strpos( $check_string4, "define('WP_USE_THEMES" );
286
- if ( $pos4 !== false ) {
287
  unset($file_path_array[$key]);
288
  }
289
  }
@@ -309,27 +339,90 @@ global $wp_version, $wpdb;
309
  }
310
  }
311
 
312
- foreach ( $image_file_path_array as $key => $value ) {
313
 
314
  if ( in_array( $value, $mscan_file_ignore_array ) ) {
315
- unset($image_file_path_array[$key]);
316
  }
317
  }
318
 
319
- foreach ( $skipped_file_path_array as $key => $value ) {
 
 
320
 
321
- if ( in_array( $value, $mscan_file_ignore_array ) ) {
322
- unset($skipped_file_path_array[$key]);
323
- }
324
  }
325
 
326
- $file_array_merge = array_merge( $wp_core_file_array, $file_path_array, $image_file_path_array );
327
- $total_file_count = count($total_website_files_array);
328
  $total_wp_core_files = count($wp_core_file_array);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
329
  $total_non_image_files = count($file_path_array);
330
- $total_image_files = count($image_file_path_array);
331
  $total_skipped_files = count($skipped_file_path_array);
332
- $total_scan_files = count($file_array_merge);
333
 
334
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
335
 
@@ -337,28 +430,27 @@ global $wp_version, $wpdb;
337
 
338
  } else {
339
 
340
- fwrite( $handle, "Scan Time Calculation: Total Website Files: ".$total_file_count."\r\n" );
341
  fwrite( $handle, "Scan Time Calculation: Total Skipped Files (larger than ".$MScan_options['mscan_max_file_size']." KB): ".$total_skipped_files."\r\n" );
342
  fwrite( $handle, "Scan Time Calculation: Total WP Core Files to Scan: ".$total_wp_core_files."\r\n" );
343
- fwrite( $handle, "Scan Time Calculation: Total non-Image Files to Scan: ".$total_non_image_files."\r\n" );
344
- fwrite( $handle, "Scan Time Calculation: Total Image Files to Scan: ".$total_image_files."\r\n" );
345
- fwrite( $handle, "Scan Time Calculation: Total Files to Scan (WP Core + non-Image + Image): ".$total_scan_files."\r\n" );
 
346
  }
347
 
348
  if ( $MScan_options['bps_mscan_dirs'] != '' ) {
349
 
350
- $mscan_dirs_array = array();
351
-
352
- foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
353
- if ( $value == '1' ) {
354
- $mscan_dirs_array[] = $key;
355
- }
356
- }
357
-
358
  $mscan_dirs = implode( ', ', $mscan_dirs_array );
359
- fwrite( $handle, "Scan Time Calculation: Hosting Account Root Folders to Scan: ".$mscan_dirs."\r\n" );
360
  }
361
 
 
 
 
 
 
 
 
362
  $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
363
  $wp_hash_time = '0';
364
 
@@ -366,12 +458,97 @@ global $wp_version, $wpdb;
366
  $check_string = file_get_contents($wp_hashes_file);
367
 
368
  if ( ! strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
369
- $wp_hash_time = '30';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  }
371
  }
 
 
 
 
 
 
 
 
 
 
 
372
 
373
- ## Scan Time Estimate Calculations: see notes in malware-scanner.php file.
374
- ## Base Scan Time: Not using this now. PHP native caching - APC, Zend, etc.
 
 
 
 
 
 
 
 
 
 
 
375
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
376
 
377
  $filesize_array = array();
@@ -383,29 +560,38 @@ global $wp_version, $wpdb;
383
  }
384
  }
385
 
386
- $base_scan_time = '20';
387
  $total_filesize_bytes = array_sum($filesize_array);
388
  $mbytes = number_format( $total_filesize_bytes / ( 1024 * 1024 ), 2 );
389
  $skipped_files_time_math = $mbytes * 1.15;
390
  $total_time_estimate = round($skipped_files_time_math);
391
 
392
- //$bps_mscan_time_remaining = time() + $base_scan_time + $wp_hash_time + $skipped_files_time;
393
- $bps_mscan_time_remaining = time() + $wp_hash_time + $total_time_estimate;
394
 
395
- //fwrite( $handle, "Scan Time Calculation: Base Scan Time (PHP Native cache variance): +".$base_scan_time." Seconds\r\n" );
396
  fwrite( $handle, "Scan Time Calculation: Total Size of all Skipped Files: ".$mbytes." MB\r\n" );
397
- fwrite( $handle, "Scan Time Calculation: WP Hash Time Estimate: +".$wp_hash_time." Seconds\r\n" );
 
 
398
  fwrite( $handle, "Scan Time Calculation: Skipped Files Time Estimate: ".$total_time_estimate." Seconds\r\n" );
399
 
400
  } else {
401
 
402
- $base_scan_time = '20';
403
  $wp_core_files_time_math = $total_wp_core_files / 400;
404
  $wp_core_files_time = round($wp_core_files_time_math);
405
- $non_image_files_time_math = $total_non_image_files / 27;
406
- $non_image_files_time = round($non_image_files_time_math);
407
- $image_files_time_math = $total_image_files / 34;
408
- $image_files_time = round($image_files_time_math);
 
 
 
 
 
 
 
 
 
 
 
409
 
410
  $rows = '';
411
  $size = 0;
@@ -419,21 +605,47 @@ global $wp_version, $wpdb;
419
  $db_size_time_math = $kbytes / 4000;
420
  $db_size_time = round($db_size_time_math);
421
 
422
- //$bps_mscan_time_remaining = time() + $base_scan_time + $wp_hash_time + $wp_core_files_time + $non_image_files_time + $image_files_time + $db_size_time;
423
- $bps_mscan_time_remaining = time() + $wp_hash_time + $wp_core_files_time + $non_image_files_time + $image_files_time + $db_size_time;
424
- $total_time_estimate = $wp_hash_time + $wp_core_files_time + $non_image_files_time + $image_files_time + $db_size_time;
425
-
426
- //fwrite( $handle, "Scan Time Calculation: Base Scan Time (PHP Native cache variance): +".$base_scan_time." Seconds\r\n" );
427
- fwrite( $handle, "Scan Time Calculation: WP Hash Time Estimate: +".$wp_hash_time." Seconds\r\n" );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
428
  fwrite( $handle, "Scan Time Calculation: WP Core Files Time Estimate: +".$wp_core_files_time." Seconds\r\n" );
429
- fwrite( $handle, "Scan Time Calculation: non-Image Files Time Estimate: +".$non_image_files_time." Seconds\r\n" );
430
- fwrite( $handle, "Scan Time Calculation: Image Files Time Estimate: +".$image_files_time." Seconds\r\n" );
 
431
  fwrite( $handle, "Scan Time Calculation: DB Size Time Estimate: +".$db_size_time." Seconds\r\n" );
 
432
  fwrite( $handle, "Scan Time Calculation: Scan Time Estimate: ".$total_time_estimate." Seconds\r\n" );
433
  }
434
 
435
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
436
-
437
  $MScan_status_db = array(
438
  'bps_mscan_time_start' => time(),
439
  'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
@@ -442,16 +654,18 @@ global $wp_version, $wpdb;
442
  'bps_mscan_status' => '2',
443
  'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
444
  'bps_mscan_total_time' => $total_time_estimate,
445
- 'bps_mscan_total_website_files' => $total_file_count,
446
  'bps_mscan_total_wp_core_files' => $total_wp_core_files,
447
  'bps_mscan_total_non_image_files' => $total_non_image_files,
448
- 'bps_mscan_total_image_files' => $total_image_files,
449
  'bps_mscan_total_all_scannable_files' => $total_scan_files,
450
  'bps_mscan_total_skipped_files' => $total_skipped_files,
451
  'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
452
  'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
453
  'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
454
- 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files']
 
 
455
  );
456
 
457
  foreach( $MScan_status_db as $key => $value ) {
@@ -470,369 +684,155 @@ global $wp_version, $wpdb;
470
  $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
471
 
472
  $file_count_log = 'Scan Time Calculation Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
 
473
 
 
474
  fwrite( $handle, "$file_count_log\r\n" );
475
  fclose($handle);
 
476
  return true;
477
  }
478
 
479
- // Download the WordPress zip file version based on the current WP version installed.
480
- // Ensure that the WP zip file is not downloaded repeatedly due to an error, issue or problem.
481
- ## 3.3: Removed cURL GET code and replaced with simple fopen code. It is unnecessary to use the WP HTTP API for something as simple as a zip file download.
482
- ## 3.4: changed fopen code to download_url() function due to problems with allow_url_fopen being turned off.
483
- function bpsPro_wp_zip_download($mstime) {
484
- global $wp_version;
 
485
 
486
  $time_start = microtime( true );
487
 
488
- set_time_limit($mstime);
489
- $timeNow = time();
490
- $gmt_offset = get_option( 'gmt_offset' ) * 3600;
491
- $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
492
- $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
493
-
494
- $handle = fopen( $mscan_log, 'a' );
495
-
496
- $wp_hashes_dir = WP_CONTENT_DIR . '/bps-backup/wp-hashes';
497
-
498
- if ( ! is_dir( $wp_hashes_dir ) ) {
499
-
500
- fwrite( $handle, "WP Zip File Download Error: The $wp_hashes_dir folder does not exist.\r\n" );
501
- fwrite( $handle, "Troubleshooting: Check that the Ownership or folder permissions for the /bps-backup/ folder. The /bps-backup/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/ folder should be the same Owner as all of your other website folders.\r\n" );
502
- fclose($handle);
503
- return false;
504
- }
505
-
506
- $wp_zip_file = 'wordpress-'. $wp_version . '.zip';
507
- $local_zip_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/' . $wp_zip_file;
508
-
509
- if ( file_exists($local_zip_file) ) {
510
- fwrite( $handle, "WP Zip File Download: The $wp_zip_file already exists and was not downloaded again.\r\n" );
511
- fclose($handle);
512
- return true;
513
- }
514
-
515
- $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
516
-
517
- if ( file_exists($wp_hashes_file) ) {
518
- $check_string = file_get_contents($wp_hashes_file);
519
-
520
- if ( strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
521
- fwrite( $handle, "WP Zip File Download: The wp-hashes.php file already exists for WordPress $wp_version. The $wp_zip_file was not downloaded again.\r\n" );
522
- fclose($handle);
523
- return true;
524
- }
525
- }
526
-
527
- fwrite( $handle, "WP Zip File Download: Start $wp_zip_file zip file download.\r\n" );
528
-
529
- $url = 'https://wordpress.org/latest.zip';
530
- $tmp_file = download_url( $url, $timeout = 300 );
531
-
532
- if ( ! copy( $tmp_file, $local_zip_file ) ) {
533
- fwrite( $handle, "WP Zip File Download Error: Unable to download the WordPress zip file from $url\r\n" );
534
- fwrite( $handle, "Manual Solution: You will need to manually download the WordPress zip file to your computer, unzip it and then use FTP and upload the unzipped /wordpress/ folder to this BPS folder: $wp_hashes_dir\r\n" );
535
- }
536
 
537
- unlink( $tmp_file );
538
-
539
- $time_end = microtime( true );
540
- $download_time = $time_end - $time_start;
541
-
542
- $hours = (int)($download_time / 60 / 60);
543
- $minutes = (int)($download_time / 60) - $hours * 60;
544
- $seconds = (int)$download_time - $hours * 60 * 60 - $minutes * 60;
545
- $hours_format = $hours == 0 ? "00" : $hours;
546
- $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
547
- $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
548
-
549
- $download_time_log = 'WP Zip File Download Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
550
-
551
- fwrite( $handle, "$download_time_log\r\n" );
552
- fclose($handle);
553
- return true;
554
- }
555
-
556
- // Extract the downloaded WordPress zip file.
557
- // The extracted WordPress folder name is: /wordpress/
558
- function bpsPro_wp_zip_extractor() {
559
- global $wp_version;
560
 
561
- $time_start = microtime( true );
562
-
563
  $timeNow = time();
564
  $gmt_offset = get_option( 'gmt_offset' ) * 3600;
565
  $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
566
  $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
 
 
567
 
568
  $handle = fopen( $mscan_log, 'a' );
569
 
570
- $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
571
-
572
- if ( file_exists($wp_hashes_file) ) {
573
- $check_string = file_get_contents($wp_hashes_file);
574
-
575
- if ( strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
576
- fwrite( $handle, "WP Zip File Extraction: The wp-hashes.php file already exists for WordPress $wp_version. The wordpress-$wp_version.zip file does not need to be extracted.\r\n" );
577
- fclose($handle);
578
- return true;
579
- }
580
- }
581
-
582
- $wp_folder = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress';
583
- $wp_hashes_dir = WP_CONTENT_DIR . '/bps-backup/wp-hashes';
584
- $wp_zip_file = 'wordpress-'. $wp_version . '.zip';
585
- $local_zip_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/' . $wp_zip_file;
586
-
587
- if ( class_exists('ZipArchive') ) {
588
-
589
- fwrite( $handle, "WP Zip File Extraction: Start ZipArchive zip file extraction.\r\n" );
590
-
591
- $WPZip = new ZipArchive;
592
 
593
- if ( $WPZip->open( $local_zip_file ) === true ) {
594
-
595
- $WPZip->extractTo( WP_CONTENT_DIR . '/bps-backup/wp-hashes/' );
596
- $WPZip->close();
597
 
598
- $time_end = microtime( true );
599
- $zip_extract_time = $time_end - $time_start;
600
-
601
- $hours = (int)($zip_extract_time / 60 / 60);
602
- $minutes = (int)($zip_extract_time / 60) - $hours * 60;
603
- $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
604
- $hours_format = $hours == 0 ? "00" : $hours;
605
- $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
606
- $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
607
-
608
- $zip_extract_time_log = 'WP Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
609
-
610
- fwrite( $handle, "$zip_extract_time_log\r\n" );
611
- fclose($handle);
612
- return true;
613
 
614
- } else {
 
615
 
616
- if ( ! is_dir($wp_folder) ) {
617
 
618
- fwrite( $handle, "WP Zip File Extraction ZipArchive Error: Unable to unzip the WordPress zip file: $local_zip_file.\r\n" );
619
- fwrite( $handle, "Manual Solution: You will need to manually download the WordPress zip file to your computer, unzip it and then use FTP and upload the unzipped /wordpress/ folder to this BPS folder: $wp_hashes_dir.\r\n" );
620
- fclose($handle);
621
- return false;
622
  }
623
  }
624
-
625
- } else {
626
-
627
- fwrite( $handle, "WP Zip File Extraction: Start PclZip zip file extraction.\r\n" );
628
-
629
- define( 'PCLZIP_TEMPORARY_DIR', WP_CONTENT_DIR . '/bps-backup/wp-hashes/' );
630
- require_once( ABSPATH . 'wp-admin/includes/class-pclzip.php');
631
-
632
- if ( ini_get( 'mbstring.func_overload' ) && function_exists( 'mb_internal_encoding' ) ) {
633
- $previous_encoding = mb_internal_encoding();
634
- mb_internal_encoding( 'ISO-8859-1' );
635
- }
636
-
637
- $archive = new PclZip( $local_zip_file );
638
-
639
- if ( $archive->extract( PCLZIP_OPT_PATH, WP_CONTENT_DIR . '/bps-backup/wp-hashes', PCLZIP_OPT_REMOVE_PATH, WP_CONTENT_DIR . '/bps-backup/wp-hashes' ) ) {
640
-
641
- $time_end = microtime( true );
642
- $zip_extract_time = $time_end - $time_start;
643
-
644
- $hours = (int)($zip_extract_time / 60 / 60);
645
- $minutes = (int)($zip_extract_time / 60) - $hours * 60;
646
- $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
647
- $hours_format = $hours == 0 ? "00" : $hours;
648
- $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
649
- $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
650
 
651
- $zip_extract_time_log = 'WP Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
652
 
653
- fwrite( $handle, "$zip_extract_time_log\r\n" );
654
- fclose($handle);
655
- return true;
656
 
657
- } else {
 
658
 
659
- if ( ! is_dir($wp_folder) ) {
660
 
661
- fwrite( $handle, "WP Zip File Extraction PclZip Error: Unable to unzip the WordPress zip file: $local_zip_file.\r\n" );
662
- fwrite( $handle, "Manual Solution: You will need to manually download the WordPress zip file to your computer, unzip it and then use FTP and upload the unzipped /wordpress/ folder to this BPS folder: $wp_hashes_dir.\r\n" );
663
- fclose($handle);
664
- return false;
665
- }
666
- }
667
- }
668
- }
669
-
670
- // Create the wp-hashes.php file array, which contains all MD5 file hashes for all current WP Core files.
671
- // Cleanup: Deletes the wp zip file and the extracted /wordpress/ folder.
672
- function bpsPro_wp_hash_maker() {
673
- global $wp_version;
674
-
675
- $time_start = microtime( true );
676
-
677
- $timeNow = time();
678
- $gmt_offset = get_option( 'gmt_offset' ) * 3600;
679
- $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
680
- $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
681
-
682
- $handle = fopen( $mscan_log, 'a' );
683
-
684
- if ( ! is_array( spl_classes() ) ) {
685
- fwrite( $handle, "WP MD5 File Hash Maker Error: The Standard PHP Library (SPL) is Not available/installed. Unable to create WP MD5 file hashes.\r\n" );
686
- fwrite( $handle, "Solution: Contact your web host and ask them to install the Standard PHP Library (SPL) on your server.\r\n" );
687
- fclose($handle);
688
- return false;
689
- }
690
-
691
- $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
692
-
693
- if ( ! file_exists( $wp_hashes_file ) ) {
694
- fwrite( $handle, "WP MD5 File Hash Maker Error: The $wp_hashes_file file does not exist.\r\n" );
695
- fwrite( $handle, "Troubleshooting: Check the Ownership or folder permissions for the /bps-backup/wp-hashes/ folder. The /bps-backup/wp-hashes/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/wp-hashes/ folder should be the same Owner as all of your other website folders.\r\n" );
696
- fclose($handle);
697
- return false;
698
  }
699
 
700
- if ( file_exists($wp_hashes_file) ) {
701
- $check_string = file_get_contents($wp_hashes_file);
 
 
 
 
702
 
703
- if ( strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
704
- fwrite( $handle, "WP MD5 File Hash Maker: The wp-hashes.php file already exists for WordPress $wp_version. The wp-hashes.php file was not created again.\r\n" );
705
- fclose($handle);
706
- return true;
707
- }
708
- }
709
-
710
- $str1 = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress/';
711
- $str2 = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress\\';
712
- $str3 = WP_CONTENT_DIR . '\bps-backup\wp-hashes\wordpress\\';
713
-
714
- $path = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress';
715
 
716
- if ( ! is_dir($path) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
717
 
718
- fwrite( $handle, "WP MD5 File Hash Maker Error: The $path folder does not exist.\r\n" );
719
- fwrite( $handle, "Troubleshooting: Check the Ownership or folder permissions for the /bps-backup/wp-hashes/ folder. The /bps-backup/wp-hashes/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/wp-hashes/ folder should be the same Owner as all of your other website folders.\r\n" );
720
  fclose($handle);
721
- return false;
722
- }
723
-
724
- fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: Start creating the wp-hashes.php file.\r\n" );
725
-
726
- $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
727
- $filePath = array();
728
-
729
- foreach ( $objects as $files ) {
730
- if ( $files->isFile() ) {
731
- $filePath[] = str_replace( array( $str1, $str2, $str3 ), "", $files->getPathname() ). '\' => \'' . md5_file($files->getPathname());
732
- }
733
- }
734
-
735
- $handleH = fopen( $wp_hashes_file, 'wb' );
736
- fwrite( $handleH, "<?php\n" );
737
- fwrite( $handleH, "// WordPress $wp_version Hashes\n" );
738
- fwrite( $handleH, "\$wp_hashes = array(\n" );
739
-
740
- foreach ( $filePath as $key => $value ) {
741
- fwrite( $handleH, "'" . $value . "', " . "\n" );
742
- }
743
-
744
- fwrite( $handleH, ");\n" );
745
- fwrite( $handleH, "?>" );
746
- fclose( $handleH );
747
-
748
- fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: wp-hashes.php file created.\r\n" );
749
- fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: Start /bps-backup/wp-hashes/ folder cleanup.\r\n" );
750
-
751
- // Cleanup
752
- $wp_zip_file = 'wordpress-'. $wp_version . '.zip';
753
- $local_zip_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/' . $wp_zip_file;
754
-
755
- if ( is_dir($path) ) {
756
-
757
- if ( file_exists($local_zip_file) ) {
758
- unlink($local_zip_file);
759
- }
760
-
761
- $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
762
 
763
- foreach ( $iterator as $file ) {
764
-
765
- if ( $file->isDir() ) {
766
- @rmdir( $file->getRealPath() );
767
-
768
- } else {
769
-
770
- if ( $file->isFile() ) {
771
- unlink( $file->getRealPath() );
772
- }
773
- }
774
- }
775
- rmdir($path);
776
- }
777
-
778
- $time_end = microtime( true );
779
- $hash_maker_time = $time_end - $time_start;
780
-
781
- $hours = (int)($hash_maker_time / 60 / 60);
782
- $minutes = (int)($hash_maker_time / 60) - $hours * 60;
783
- $seconds = (int)$hash_maker_time - $hours * 60 * 60 - $minutes * 60;
784
- $hours_format = $hours == 0 ? "00" : $hours;
785
- $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
786
- $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
787
-
788
- $hash_maker_time_log = 'WP MD5 File Hash Maker & Cleanup Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
789
-
790
- fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: WP $wp_zip_file file deleted.\r\n" );
791
- fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: Extracted /bps-backup/wp-hashes/wordpress/ folder deleted.\r\n" );
792
- fwrite( $handle, "$hash_maker_time_log\r\n" );
793
- fclose($handle);
794
-
795
- return true;
796
- }
797
-
798
- // MScan: File & Database Scanner
799
- function bpsPro_mscan_file_scan($mstime) {
800
- global $wp_version, $wpdb;
801
 
802
- $time_start = microtime( true );
803
 
804
- $MScan_options = get_option('bulletproof_security_options_MScan');
805
- $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
806
 
807
- set_time_limit($mstime);
808
- ini_set('max_execution_time', $mstime);
809
- $timeNow = time();
810
- $gmt_offset = get_option( 'gmt_offset' ) * 3600;
811
- $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
812
- $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
813
- $MScanStop = WP_CONTENT_DIR . '/bps-backup/master-backups/mscan-stop.txt';
814
  $bps_wpcontent_dir = str_replace( ABSPATH, '', WP_CONTENT_DIR );
815
- $send_email = '';
 
 
 
 
 
 
 
 
 
816
 
817
- $handle = fopen( $mscan_log, 'a' );
818
-
819
- fwrite( $handle, "Scanning Files: Start scanning files.\r\n" );
820
-
821
- $source = $_SERVER['DOCUMENT_ROOT'];
822
-
823
  if ( is_dir($source) ) {
824
 
825
  $dirItr = new RecursiveDirectoryIterator($source);
826
  $filterItr = new BPSMScanRecursiveFilterIterator($dirItr);
827
  $iterator = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
828
 
829
- $image_file_path_array = array();
830
  $file_path_array = array();
831
  $wp_core_file_array = array();
832
- $total_website_files_array = array();
833
  $skipped_image_file_path_array = array();
834
  $skipped_nonimage_file_path_array = array();
835
 
 
 
 
836
  $wp_core_root_file_array = array( 'wp-activate.php', 'wp-blog-header.php', 'wp-comments-post.php', 'wp-config-sample.php', 'wp-cron.php', 'wp-links-opml.php', 'wp-load.php', 'wp-login.php', 'wp-mail.php', 'wp-settings.php', 'wp-signup.php', 'wp-trackback.php' );
837
 
838
  foreach ( $iterator as $files ) {
@@ -847,15 +847,16 @@ global $wp_version, $wpdb;
847
 
848
  } else {
849
 
850
- if ( ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)bps-backup(\/|\\\))(.*)/', $files->getPathname() ) ) {
851
 
852
- $total_website_files_array[] = $files->getPathname();
853
 
854
  if ( $files->getFilename() == 'index.php' ) {
 
855
  $check_string1 = file_get_contents( $files->getPath() . '/index.php' );
856
- $pos1 = strpos( $check_string1, "define('WP_USE_THEMES" );
857
  }
858
-
859
  if ( $files->getFilename() == 'readme.html' ) {
860
  $check_string2 = file_get_contents( $files->getPath() . '/readme.html' );
861
  $pos2 = strpos( $check_string2, "https://wordpress.org/" );
@@ -865,7 +866,7 @@ global $wp_version, $wpdb;
865
  $check_string3 = file_get_contents( $files->getPath() . '/xmlrpc.php' );
866
  $pos3 = strpos( $check_string3, "XML-RPC protocol support for WordPress" );
867
  }
868
-
869
  if ( $MScan_options['mscan_exclude_dirs'] != '' ) {
870
 
871
  $mscan_exclude_dirs = str_replace('\\\\', '\\', $MScan_options['mscan_exclude_dirs']);
@@ -882,12 +883,16 @@ global $wp_version, $wpdb;
882
 
883
  $glue = implode("", $mscan_exclude_dirs_regex_array);
884
  $mscan_exclude_dir_regex = preg_replace( '/\|$/', '', $glue);
885
- $exclude_dirs_pattern = '/('.$mscan_exclude_dir_regex.')/';
886
 
887
  } else {
888
  $exclude_dirs_pattern = '/(\/bps-no-dirs\/)/';
889
  }
890
 
 
 
 
 
891
  $core_pattern = '/(.*)((\/|\\\)wp-admin(\/|\\\)|(\/|\\\)wp-includes(\/|\\\))(.*)/';
892
 
893
  if ( preg_match( $core_pattern, $files->getPathname() ) || $files->getFilename() == 'index.php' && $pos1 !== false || $files->getFilename() == 'readme.html' && $pos2 !== false || $files->getFilename() == 'xmlrpc.php' && $pos3 !== false || in_array($files->getFilename(), $wp_core_root_file_array) ) {
@@ -900,27 +905,13 @@ global $wp_version, $wpdb;
900
 
901
  if ( $files->getSize() <= $MScan_options['mscan_max_file_size'] * 1024 ) {
902
 
903
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
904
-
905
- if ( $ext == 'png' || $ext == 'gif' || $ext == 'bmp' || $ext == 'jpg' || $ext == 'jpeg' || $ext == 'tif' || $ext == 'tiff' ) {
906
- $image_file_path_array[] = $files->getPathname();
907
- }
908
- }
909
-
910
- if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' ) {
911
  $file_path_array[] = $files->getPathname();
912
  }
913
 
914
  } else {
915
 
916
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
917
-
918
- if ( $ext == 'png' || $ext == 'gif' || $ext == 'bmp' || $ext == 'jpg' || $ext == 'jpeg' || $ext == 'tif' || $ext == 'tiff' ) {
919
- $skipped_image_file_path_array[] = $files->getPathname();
920
- }
921
- }
922
-
923
- if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' ) {
924
  $skipped_nonimage_file_path_array[] = $files->getPathname();
925
  }
926
  }
@@ -928,11 +919,73 @@ global $wp_version, $wpdb;
928
  }
929
  }
930
  }
931
- } catch (RuntimeException $e) {
932
- // pending error message or log entry after Beta Testing is completed
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
933
  }
934
  }
 
 
 
 
 
 
 
 
935
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
936
  $skipped_file_path_array = array_merge($skipped_image_file_path_array, $skipped_nonimage_file_path_array);
937
 
938
  $MStable = $wpdb->prefix . "bpspro_mscan";
@@ -954,9 +1007,8 @@ global $wp_version, $wpdb;
954
  }
955
  }
956
 
957
- $safe_plugins = '/(.*)(\/|\\\)(bulletproof-security|theme-check|cforms|all-in-one-seo-pack|adminer|akismet|jetpack|wp-super-cache|bbpress|buddypress|wordpress-seo|contact-form-7|woocommerce|tinymce-advanced|limit-login-attempts|mailchimp-for-wp|wordpress-importer|google-sitemap-generator|google-analytics-for-wordpress|google-analytics-dashboard-for-wp|duplicate-post|w3-total-cache|updraftplus|really-simple-captcha|nextgen-gallery|duplicator|ml-slider|wp-smushit|googleanalytics|broken-link-checker|managewp|sucuri-scanner|gotmls|better-wp-security|all-in-one-wp-security-and-firewall|wordfence)(\/|\\\)(.*)/';
958
-
959
- ## 4.6: MScan pattern matching code is now saved in the DB
960
  $mscan_db_pattern_match_options = get_option('bulletproof_security_options_mscan_patterns');
961
 
962
  foreach ( $mscan_db_pattern_match_options['mscan_pattern_match_files'] as $key => $value ) {
@@ -972,9 +1024,6 @@ global $wp_version, $wpdb;
972
  if ( $inner_key == 'php_patterns' ) {
973
  $php_pattern = $inner_value;
974
  }
975
- if ( $inner_key == 'image_patterns' ) {
976
- $image_pattern = $inner_value;
977
- }
978
  }
979
  }
980
 
@@ -1023,11 +1072,14 @@ global $wp_version, $wpdb;
1023
  }
1024
  }
1025
  }
1026
-
1027
  $js_code_match = 0;
1028
  $htaccess_code_match = 0;
1029
  $php_code_match = 0;
1030
 
 
 
 
1031
  if ( $MScan_options['mscan_scan_skipped_files'] == 'Off' ) {
1032
 
1033
  $skipped_rows = 'skipped';
@@ -1063,22 +1115,12 @@ global $wp_version, $wpdb;
1063
  }
1064
  }
1065
 
1066
- if ( $ext == 'htm' || $ext == 'html' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' ) {
1067
 
1068
  if ( ! in_array($value, $mscan_file_skipped_path_array) ) {
1069
  $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => '', 'mscan_type' => 'php|html|other', 'mscan_path' => $value, 'mscan_pattern' => '', 'mscan_skipped' => 'skipped', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) );
1070
  }
1071
  }
1072
-
1073
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
1074
-
1075
- if ( $ext == 'png' || $ext == 'gif' || $ext == 'bmp' || $ext == 'jpg' || $ext == 'jpeg' || $ext == 'tif' || $ext == 'tiff' ) {
1076
-
1077
- if ( ! in_array($value, $mscan_file_skipped_path_array) ) {
1078
- $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => '', 'mscan_type' => 'image', 'mscan_path' => $value, 'mscan_pattern' => '', 'mscan_skipped' => 'skipped', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) );
1079
- }
1080
- }
1081
- }
1082
  }
1083
  }
1084
 
@@ -1093,16 +1135,44 @@ global $wp_version, $wpdb;
1093
  }
1094
  }
1095
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1096
  foreach ( $file_path_array as $key => $value ) {
1097
 
1098
  if ( preg_match( '/index\.php/', $value ) ) {
 
1099
  $check_string4 = file_get_contents( $value );
1100
- $pos4 = strpos( $check_string4, "define('WP_USE_THEMES" );
1101
- if ( $pos4 !== false ) {
1102
  unset($file_path_array[$key]);
1103
  }
1104
  }
1105
-
1106
  if ( preg_match( '/readme\.html/', $value ) ) {
1107
  $check_string5 = file_get_contents( $value );
1108
  $pos5 = strpos( $check_string5, "https://wordpress.org/" );
@@ -1124,16 +1194,10 @@ global $wp_version, $wpdb;
1124
  }
1125
  }
1126
 
1127
- foreach ( $image_file_path_array as $key => $value ) {
1128
-
1129
- if ( in_array( $value, $mscan_file_ignore_array ) ) {
1130
- unset($image_file_path_array[$key]);
1131
- }
1132
- }
1133
-
1134
- $blank_rows = '';
1135
  $MScanFileRows = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $MStable WHERE mscan_path != %s AND mscan_skipped != %s", $blank_rows, $skipped_rows ) );
1136
 
 
1137
  $mscan_file_path_array = array();
1138
 
1139
  if ( $wpdb->num_rows != 0 ) {
@@ -1157,7 +1221,7 @@ global $wp_version, $wpdb;
1157
  }
1158
 
1159
  fwrite( $handle, "Scanning Files: Start WP Core file scan.\r\n" );
1160
- fwrite( $handle, "Scanning Files: Suspicious|Modified|Unknown WP Core files:\r\n" );
1161
 
1162
  $core_dir_flip = array_flip($wp_core_file_array);
1163
 
@@ -1167,7 +1231,7 @@ global $wp_version, $wpdb;
1167
  $core_md5_array[$key] = md5_file($key);
1168
  }
1169
 
1170
- require_once( WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php' );
1171
 
1172
  $core_diff_array = array_diff($core_md5_array, $wp_hashes);
1173
 
@@ -1189,7 +1253,8 @@ global $wp_version, $wpdb;
1189
  // Not redundant - needs to be here
1190
  if ( ! preg_match( '/(.*)(\/|\\\)wp-admin(\/|\\\).htaccess/', $key ) ) {
1191
 
1192
- fwrite( $handle, "Scanning Files WP Core: File: $key\r\n" );
 
1193
 
1194
  if ( ! in_array($key, $mscan_file_path_array) ) {
1195
 
@@ -1206,7 +1271,223 @@ global $wp_version, $wpdb;
1206
  }
1207
 
1208
  fwrite( $handle, "Scanning Files: WP Core file scan completed.\r\n" );
1209
- fwrite( $handle, "Scanning Files: Start non-Image file (php, js, etc) scan.\r\n" );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1210
  fwrite( $handle, "Scanning Files: Suspicious code pattern matches:\r\n" );
1211
 
1212
  foreach ( $file_path_array as $key => $value ) {
@@ -1223,15 +1504,24 @@ global $wp_version, $wpdb;
1223
 
1224
  if ( $ext == 'js' ) {
1225
 
1226
- if ( ! preg_match( $safe_plugins, $value ) && preg_match( $js_pattern, $file_contents, $matches ) ) {
1227
-
1228
  $js_code_match = 1;
 
 
 
 
 
 
 
 
 
1229
  fwrite( $handle, "Scanning Files .js: File: $value\r\n" );
1230
- fwrite( $handle, "Scanning Files .js: Code Pattern Match: $matches[0]\r\n" );
1231
 
1232
  if ( ! in_array($value, $mscan_file_path_array) ) {
1233
 
1234
- if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'js', 'mscan_path' => $value, 'mscan_pattern' => $matches[0], 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1235
 
1236
  $send_email = 'send';
1237
  }
@@ -1241,32 +1531,50 @@ global $wp_version, $wpdb;
1241
 
1242
  if ( $ext == 'htaccess' ) {
1243
 
1244
- if ( ! preg_match( $safe_plugins, $value ) && preg_match( $htaccess_pattern, $file_contents, $matches ) ) {
1245
 
1246
  $htaccess_code_match = 1;
 
 
 
 
 
 
 
 
 
1247
  fwrite( $handle, "Scanning Files .htaccess: File: $value\r\n" );
1248
- fwrite( $handle, "Scanning Files .htaccess: Code Pattern Match: $matches[0]\r\n" );
1249
 
1250
  if ( ! in_array($value, $mscan_file_path_array) ) {
1251
 
1252
- if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'htaccess', 'mscan_path' => $value, 'mscan_pattern' => $matches[0], 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1253
  $send_email = 'send';
1254
  }
1255
  }
1256
  }
1257
  }
1258
 
1259
- if ( $ext == 'htm' || $ext == 'html' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' ) {
1260
 
1261
- if ( ! preg_match( $safe_plugins, $value ) && preg_match( $php_pattern, $file_contents, $matches ) ) {
1262
 
1263
  $php_code_match = 1;
1264
- fwrite( $handle, "Scanning Files (php, html, etc): File: $value\r\n" );
1265
- fwrite( $handle, "Scanning Files (php, html, etc): Code Pattern Match: $matches[0]\r\n" );
1266
 
1267
- if ( ! in_array($value, $mscan_file_path_array) ) {
 
 
 
 
1268
 
1269
- if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'php|html|other', 'mscan_path' => $value, 'mscan_pattern' => $matches[0], 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
 
 
 
 
 
1270
  $send_email = 'send';
1271
  }
1272
  }
@@ -1284,54 +1592,10 @@ global $wp_version, $wpdb;
1284
  }
1285
 
1286
  if ( $php_code_match == 0 ) {
1287
- fwrite( $handle, "Scanning Files (php, html, etc): No Suspicious (php, html, etc) code pattern matches were found.\r\n" );
1288
  }
1289
 
1290
- fwrite( $handle, "Scanning Files: non-Image file (php, js, etc) scan completed.\r\n" );
1291
-
1292
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
1293
-
1294
- $image_code_match = 0;
1295
- fwrite( $handle, "Scanning Files: Start Image file scan.\r\n" );
1296
- fwrite( $handle, "Scanning Files: Suspicious code (Stegosploit|Exif Hack) matches:\r\n" );
1297
-
1298
- foreach ( $image_file_path_array as $keyI => $valueI ) {
1299
-
1300
- if ( file_get_contents($MScanStop) != 'run' ) {
1301
- fwrite( $handle, "Scanning Files: MScan Scanning was Stopped\r\n" );
1302
- fclose($handle);
1303
- exit();
1304
-
1305
- } else {
1306
-
1307
- $image_contents = file_get_contents($valueI);
1308
-
1309
- try {
1310
- if ( ! preg_match( $safe_plugins, $valueI ) && preg_match( $image_pattern, $image_contents, $matches ) ) {
1311
-
1312
- $image_code_match = 1;
1313
- fwrite( $handle, "Scanning Files (png, jpg, etc): File: $valueI\r\n" );
1314
- fwrite( $handle, "Scanning Files (png, jpg, etc): Code Pattern Match: $matches[0]\r\n" );
1315
-
1316
- if ( ! in_array($valueI, $mscan_file_path_array) ) {
1317
-
1318
- if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'image', 'mscan_path' => $valueI, 'mscan_pattern' => $matches[0], 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1319
- $send_email = 'send';
1320
- }
1321
- }
1322
- }
1323
- } catch (RuntimeException $e) {
1324
- fwrite( $handle, "Scanning Files (png, jpg, etc): RuntimeException Error\r\n" );
1325
- }
1326
- }
1327
- }
1328
-
1329
- if ( $image_code_match == 0 ) {
1330
- fwrite( $handle, "Scanning Files (png, jpg, etc): No Suspicious code (Stegosploit|Exif Hack) was found in any image files.\r\n" );
1331
- }
1332
- fwrite( $handle, "Scanning Files: Image file scan completed.\r\n" );
1333
- }
1334
-
1335
  fwrite( $handle, "Scanning Files: Scanning files completed.\r\n" );
1336
 
1337
  if ( $MScan_options['mscan_scan_database'] == 'On' ) {
@@ -1343,8 +1607,8 @@ global $wp_version, $wpdb;
1343
  $DBTables = '';
1344
  $getDBTables = $wpdb->get_results( $wpdb->prepare( "SHOW TABLE STATUS WHERE Name != %s", $DBTables ) );
1345
 
1346
- ## 4.6: MScan Database Scan search patterns for DB Query below are now saved in the DB as of 4.6
1347
-
1348
  foreach ( $getDBTables as $Table ) {
1349
 
1350
  if ( $Table->Name != $wpdb->prefix . "bpspro_mscan" ) {
@@ -1366,7 +1630,9 @@ global $wp_version, $wpdb;
1366
 
1367
  } else {
1368
 
1369
- if ( ! preg_match( '/_transient_feed_(.*)/', $results->option_name ) ) {
 
 
1370
 
1371
  $getKey = $wpdb->get_results( "SHOW KEYS FROM $Table->Name WHERE Key_name = 'PRIMARY'" );
1372
 
@@ -1379,6 +1645,8 @@ global $wp_version, $wpdb;
1379
  $replace = array ( '&lt;', '&gt;' );
1380
  $json_array_converted = preg_replace( $patterns, $replace, $json_array );
1381
 
 
 
1382
  if ( in_array( $json_array_converted[$PKey->Column_name], $mscan_db_ignore_array ) ) {
1383
  unset($json_array[$column->Field]);
1384
  }
@@ -1540,89 +1808,58 @@ global $wp_version, $wpdb;
1540
 
1541
  } else {
1542
 
1543
- if ( ! preg_match( $safe_plugins, $row->mscan_path ) ) {
1544
-
1545
- $file_contents = file_get_contents($row->mscan_path);
1546
 
1547
- if ( $row->mscan_type == 'js' ) {
1548
-
1549
- if ( preg_match( $js_pattern, $file_contents, $matches ) ) {
1550
-
1551
- $js_code_match = 1;
1552
- fwrite( $handle, "Scanning Skipped Files .js: File: $row->mscan_path\r\n" );
1553
- fwrite( $handle, "Scanning Skipped Files .js: Code Pattern Match: $matches[0]\r\n" );
1554
-
1555
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1556
-
1557
- $send_email = 'send';
1558
-
1559
- } else {
1560
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1561
- }
1562
- }
1563
-
1564
- if ( $row->mscan_type == 'htaccess' ) {
1565
 
1566
- if ( preg_match( $htaccess_pattern, $file_contents, $matches ) ) {
1567
-
1568
- $htaccess_code_match = 1;
1569
- fwrite( $handle, "Scanning Skipped Files .htaccess: File: $row->mscan_path\r\n" );
1570
- fwrite( $handle, "Scanning Skipped Files .htaccess: Code Pattern Match: $matches[0]\r\n" );
1571
-
1572
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1573
-
1574
- $send_email = 'send';
1575
 
1576
- } else {
1577
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1578
- }
1579
  }
1580
-
1581
- if ( $row->mscan_type == 'php|html|other' ) {
1582
 
1583
- if ( preg_match( $php_pattern, $file_contents, $matches ) ) {
1584
-
1585
- $php_code_match = 1;
1586
- fwrite( $handle, "Scanning Skipped Files (php, html, etc): File: $row->mscan_path\r\n" );
1587
- fwrite( $handle, "Scanning Skipped Files (php, html, etc): Code Pattern Match: $matches[0]\r\n" );
1588
-
1589
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1590
-
1591
- $send_email = 'send';
1592
-
1593
- } else {
1594
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1595
- }
1596
- }
1597
 
1598
- if ( $MScan_options['mscan_scan_images'] == 'On' ) {
1599
 
1600
- try {
1601
- if ( $row->mscan_type == 'image' ) {
1602
-
1603
- if ( preg_match( $image_pattern, $file_contents, $matches ) ) {
1604
-
1605
- $image_code_match = 1;
1606
- fwrite( $handle, "Scanning Skipped Files (png, jpg, etc): File: $row->mscan_path\r\n" );
1607
- fwrite( $handle, "Scanning Skipped Files (png, jpg, etc): Code Pattern Match: $matches[0]\r\n" );
1608
-
1609
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1610
-
1611
- $send_email = 'send';
1612
-
1613
- } else {
1614
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1615
- }
1616
- }
1617
- } catch (RuntimeException $e) {
1618
- fwrite( $handle, "Scanning Skipped Files (png, jpg, etc): RuntimeException Error\r\n" );
1619
- }
 
1620
  }
1621
  }
1622
- }
1623
-
1624
- if ( preg_match( $safe_plugins, $row->mscan_path ) ) {
1625
- $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'safe', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1626
  }
1627
  }
1628
 
@@ -1635,13 +1872,9 @@ global $wp_version, $wpdb;
1635
  }
1636
 
1637
  if ( $php_code_match == 0 ) {
1638
- fwrite( $handle, "Scanning Skipped Files (php, html, etc): No Suspicious (php, html, etc) code pattern matches were found.\r\n" );
1639
  }
1640
 
1641
- if ( $MScan_options['mscan_scan_images'] == 'On' && $image_code_match == 0 ) {
1642
- fwrite( $handle, "Scanning Skipped Files (png, jpg, etc): No Suspicious code (Stegosploit|Exif Hack) was found in any image files.\r\n" );
1643
- }
1644
-
1645
  fwrite( $handle, "Scanning Skipped Files: Skipped file scan completed.\r\n" );
1646
 
1647
  } else {
@@ -1693,7 +1926,6 @@ global $wp_version, $wpdb;
1693
  $total_suspect_file_count = count($mscan_suspect_files_total_array);
1694
  $total_suspect_skipped_files_file_count = count($mscan_suspect_skipped_files_total_array);
1695
  $total_suspect_db_count = count($mscan_suspect_db_total_array);
1696
-
1697
  $bps_mscan_total_time = time() - $MScan_status['bps_mscan_time_start'];
1698
 
1699
  $MScan_status_db = array(
@@ -1704,16 +1936,18 @@ global $wp_version, $wpdb;
1704
  'bps_mscan_status' => '3',
1705
  'bps_mscan_last_scan_timestamp' => $timestamp,
1706
  'bps_mscan_total_time' => $bps_mscan_total_time,
1707
- 'bps_mscan_total_website_files' => $MScan_status['bps_mscan_total_website_files'],
1708
  'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
1709
  'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
1710
- 'bps_mscan_total_image_files' => $MScan_status['bps_mscan_total_image_files'],
1711
  'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
1712
  'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
1713
  'bps_mscan_total_suspect_files' => $total_suspect_file_count,
1714
  'bps_mscan_suspect_skipped_files' => $total_suspect_skipped_files_file_count,
1715
  'bps_mscan_total_suspect_db' => $total_suspect_db_count,
1716
- 'bps_mscan_total_ignored_files' => $total_ignored_file_db_count
 
 
1717
  );
1718
 
1719
  foreach( $MScan_status_db as $key => $value ) {
@@ -1731,18 +1965,31 @@ global $wp_version, $wpdb;
1731
  $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
1732
  $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
1733
 
 
 
 
 
 
 
 
1734
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
1735
  $file_scan_log = 'Scanning Skipped Files Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
 
1736
 
1737
  } else {
1738
 
1739
  if ( $MScan_options['mscan_scan_database'] == 'On' ) {
1740
  $file_scan_log = 'Scanning Files & Database Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
 
1741
  } else{
1742
  $file_scan_log = 'Scanning Files Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
 
1743
  }
1744
  }
1745
 
 
 
 
1746
  fwrite( $handle, "$file_scan_log\r\n" );
1747
 
1748
  if ( $MScan_options['mscan_scan_delete_tmp_files'] == 'On' ) {
@@ -1750,11 +1997,13 @@ global $wp_version, $wpdb;
1750
  fwrite( $handle, "Delete /tmp Files: tmp files have been deleted.\r\n" );
1751
  }
1752
 
 
 
1753
  fclose($handle);
1754
 
1755
  // Send email alert
1756
  if ( $send_email != '' ) {
1757
- bps_smonitor_mscan_email();
1758
  }
1759
  }
1760
 
@@ -1813,5 +2062,4 @@ function bpsPro_delete_temp_files() {
1813
  }
1814
  }
1815
  }
1816
-
1817
  ?>
18
  }
19
 
20
  ## MScan manual AJAX scan
21
+ ## See DW malware-scanner.php for extensive notes
22
  function bpsPro_mscan_scan_processing() {
23
 
24
  if ( isset( $_POST['post_var'] ) && $_POST['post_var'] == 'bps_mscan' ) {
30
  $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
31
  ini_set('max_execution_time', $mstime);
32
 
33
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/mscan-wp-core-hash-maker.php';
34
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/mscan-plugin-hash-maker.php';
35
+ require_once WP_PLUGIN_DIR . '/bulletproof-security/includes/mscan-theme-hash-maker.php';
36
+
37
  if ( bpsPro_mscan_calculate_scan_time($mstime) == true ) {
38
  if ( bpsPro_wp_zip_download($mstime) == true ) {
39
  if ( bpsPro_wp_zip_extractor() == true ) {
40
  if ( bpsPro_wp_hash_maker() == true ) {
41
+ if ( bpsPro_plugin_zip_download($mstime) == true ) {
42
+ if ( bpsPro_plugin_zip_extractor() == true ) {
43
+ if ( bpsPro_plugin_hash_maker() == true ) {
44
+ if ( bpsPro_theme_zip_download($mstime) == true ) {
45
+ if ( bpsPro_theme_zip_extractor() == true ) {
46
+ if ( bpsPro_theme_hash_maker() == true ) {
47
+ bpsPro_mscan_file_scan($mstime);
48
+ }
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
  }
55
  }
56
  }
61
 
62
  add_action('wp_ajax_bps_mscan_scan_processing', 'bpsPro_mscan_scan_processing');
63
 
64
+ // 15.4: This is no longer necessary. Leaving this here for now. Pending removal.
65
  function bpsPro_mscan_scan_estimate() {
66
 
67
  if ( isset( $_POST['post_var'] ) && $_POST['post_var'] == 'bps_mscan_estimate' ) {
73
  $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
74
  ini_set('max_execution_time', $mstime);
75
 
76
+ // ONLY the scan time estimate function is executed.
77
  if ( bpsPro_mscan_calculate_scan_time($mstime) == true ) {
78
 
79
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
86
  'bps_mscan_status' => '5',
87
  'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
88
  'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
89
+ 'bps_mscan_total_website_files' => '',
90
  'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
91
  'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
92
+ 'bps_mscan_total_image_files' => '',
93
  'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
94
  'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
95
  'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
96
  'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
97
  'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
98
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
99
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
100
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
101
  );
102
 
103
  foreach( $MScan_status_db as $key => $value ) {
110
 
111
  add_action('wp_ajax_bps_mscan_scan_estimate', 'bpsPro_mscan_scan_estimate');
112
 
113
+ // Note: On Windows XAMPP ONLY backslashes \ are used in getSubPathName paths. On Linux ONLY forward slashes / are used in paths.
114
  class BPSMScanRecursiveFilterIterator extends RecursiveFilterIterator {
115
 
116
  public function accept() {
117
  $MScan_options = get_option('bulletproof_security_options_MScan');
118
  $excluded_dirs = array();
119
+ $excluded_dirs_gwiod = array();
120
+ $wp_abspath_forward_slashes = str_replace( '\\', '/', ABSPATH );
121
+ $wp_install_folder = str_replace( array( get_home_path(), '/', ), "", $wp_abspath_forward_slashes );
122
 
123
  foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
124
  if ( $value == '' ) {
125
  $excluded_dirs[] = $key;
126
+ $excluded_dirs_gwiod[] = $wp_install_folder . DIRECTORY_SEPARATOR . $key;
127
  }
128
  }
129
+
130
+ $dir_filter_array_merge = array_unique(array_merge($excluded_dirs, $excluded_dirs_gwiod));
131
+
132
+ return !in_array( $this->getSubPathName(), $dir_filter_array_merge, true );
133
  }
134
  }
135
 
136
+
137
  function bpsPro_mscan_calculate_scan_time($mstime) {
138
+ global $wp_version, $wpdb, $plugin_hashes, $theme_hashes;
139
 
140
  $time_start = microtime( true );
141
 
142
  $MScan_options = get_option('bulletproof_security_options_MScan');
143
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
144
  $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
145
 
146
  set_time_limit($mstime);
154
  $handle = fopen( $mscan_log, 'a' );
155
 
156
  fwrite( $handle, "\r\n[MScan Scan Start: $timestamp]\r\n" );
157
+ fwrite( $handle, "MScan Status: ".$MScan_status['bps_mscan_status']."\r\n" );
158
  fwrite( $handle, "Scan Time Calculation: Start Count total files to scan.\r\n" );
159
 
160
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
164
  }
165
 
166
  $bps_wpcontent_dir = str_replace( ABSPATH, '', WP_CONTENT_DIR );
167
+ $bps_plugin_dir = str_replace( WP_CONTENT_DIR, '', WP_PLUGIN_DIR );
168
+ $bps_themes_dir = str_replace( WP_CONTENT_DIR, '', get_theme_root() );
169
+ $bps_plugin_dir_no_slash = str_replace( array( '\\', '/'), '', $bps_plugin_dir );
170
+ $bps_themes_dir_no_slash = str_replace( array( '\\', '/'), '', $bps_themes_dir );
171
+
172
+ // get_home_path() and ABSPATH are different paths for GWIOD site types. Home = Parent folder. ABSPATH = WP Core folders and files.
173
+ // They are the same for all other WP site types. Not sure about Network subdomain/Domain Mapping site types.
174
+ // Note: The FilterIterator excludes any dir checkboxes that are not checked in the MScan Website Folders & Files To Scan option.
175
+ // Other WordPress installation folders are excluded in the FilterIterator
176
+ $source = get_home_path();
177
 
178
  if ( is_dir($source) ) {
179
 
181
  $filterItr = new BPSMScanRecursiveFilterIterator($dirItr);
182
  $iterator = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
183
 
 
184
  $file_path_array = array();
185
  $wp_core_file_array = array();
186
+ //$total_website_files_array = array();
187
  $skipped_image_file_path_array = array();
188
  $skipped_nonimage_file_path_array = array();
189
 
190
+ // WP Core files hashes are created for root WP Core files.
191
+ // Note: If a hacker copies the WP Core index.php file to another folder somewhere and adds additional hacker code in the index.php file
192
+ // the scan result will be: Altered or unknown WP Core file instead of a pattern match result.
193
  $wp_core_root_file_array = array( 'wp-activate.php', 'wp-blog-header.php', 'wp-comments-post.php', 'wp-config-sample.php', 'wp-cron.php', 'wp-links-opml.php', 'wp-load.php', 'wp-login.php', 'wp-mail.php', 'wp-settings.php', 'wp-signup.php', 'wp-trackback.php' );
194
 
195
  foreach ( $iterator as $files ) {
204
 
205
  } else {
206
 
207
+ if ( ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)bps-backup(\/|\\\))(.*)/', $files->getPathname() ) && ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)'.$bps_plugin_dir_no_slash.'(\/|\\\))(.*)/', $files->getPathname() ) && ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)'.$bps_themes_dir_no_slash.'(\/|\\\))(.*)/', $files->getPathname() ) && ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)index\.php)/', $files->getPathname() ) ) {
208
 
209
+ //$total_website_files_array[] = $files->getPathname();
210
 
211
  if ( $files->getFilename() == 'index.php' ) {
212
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
213
  $check_string1 = file_get_contents( $files->getPath() . '/index.php' );
214
+ $pos1 = preg_match( $pattern, $check_string1 );
215
  }
216
 
217
  if ( $files->getFilename() == 'readme.html' ) {
246
  $exclude_dirs_pattern = '/(\/bps-no-dirs\/)/';
247
  }
248
 
249
+ // Note: Other WordPress site folders and files are filtered out in the FilterIterator.
250
+ // Plugin and Theme folders are not included in this Iteration and are done separately in their own Iterations.
251
+ // I've seen wp-admin and wp-includes folder names used in Plugin's and Theme's folder names.
252
+ // No need to use: DIRECTORY_SEPARATOR here. Use simple RegEx instead.
253
  $core_pattern = '/(.*)((\/|\\\)wp-admin(\/|\\\)|(\/|\\\)wp-includes(\/|\\\))(.*)/';
254
 
255
  if ( preg_match( $core_pattern, $files->getPathname() ) || $files->getFilename() == 'index.php' && $pos1 !== false || $files->getFilename() == 'readme.html' && $pos2 !== false || $files->getFilename() == 'xmlrpc.php' && $pos3 !== false || in_array($files->getFilename(), $wp_core_root_file_array) ) {
262
 
263
  if ( $files->getSize() <= $MScan_options['mscan_max_file_size'] * 1024 ) {
264
 
265
+ if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' || $ext == 'ico' || $ext == 'bak' ) {
 
 
 
 
 
 
 
266
  $file_path_array[] = $files->getPathname();
267
  }
268
 
269
  } else {
270
 
271
+ if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' || $ext == 'ico' || $ext == 'bak' ) {
 
 
 
 
 
 
 
272
  $skipped_nonimage_file_path_array[] = $files->getPathname();
273
  }
274
  }
277
  }
278
  }
279
  } catch (RuntimeException $e) {
280
+
281
  }
282
  }
283
 
284
+ $skipped_file_path_array = $skipped_nonimage_file_path_array;
 
 
 
285
 
286
  $MStable = $wpdb->prefix . "bpspro_mscan";
287
 
311
  foreach ( $file_path_array as $key => $value ) {
312
 
313
  if ( preg_match( '/index\.php/', $value ) ) {
314
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
315
  $check_string4 = file_get_contents( $value );
316
+ if ( preg_match( $pattern, $check_string4 ) ) {
 
317
  unset($file_path_array[$key]);
318
  }
319
  }
339
  }
340
  }
341
 
342
+ foreach ( $skipped_file_path_array as $key => $value ) {
343
 
344
  if ( in_array( $value, $mscan_file_ignore_array ) ) {
345
+ unset($skipped_file_path_array[$key]);
346
  }
347
  }
348
 
349
+ $mscan_dirs_array = array();
350
+
351
+ foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
352
 
353
+ if ( $value == '1' ) {
354
+ $mscan_dirs_array[] = $key;
355
+ }
356
  }
357
 
 
 
358
  $total_wp_core_files = count($wp_core_file_array);
359
+
360
+ $plugins_dir = WP_PLUGIN_DIR;
361
+
362
+ $plugin_file_path_array = array();
363
+
364
+ if ( in_array( $bps_wpcontent_dir, $mscan_dirs_array ) ) {
365
+
366
+ if ( is_dir($plugins_dir) ) {
367
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($plugins_dir), RecursiveIteratorIterator::SELF_FIRST);
368
+
369
+ foreach ( $iterator as $files ) {
370
+
371
+ if ( $files->isFile() ) {
372
+
373
+ if ( $files->getPathname() != WP_PLUGIN_DIR . '/.htaccess' && $files->getPathname() != WP_PLUGIN_DIR . '\.htaccess' && $files->getPathname() != WP_PLUGIN_DIR . '\index.php' && $files->getPathname() != WP_PLUGIN_DIR . '/index.php' ) {
374
+
375
+ $plugin_file_path_array[] = $files->getPathname();
376
+ }
377
+ }
378
+ }
379
+ }
380
+ }
381
+
382
+ // 15.4: Get array of theme files.
383
+ $themes_dir = get_theme_root();
384
+
385
+ $theme_file_path_array = array();
386
+
387
+ if ( in_array( $bps_wpcontent_dir, $mscan_dirs_array ) ) {
388
+
389
+ if ( is_dir($themes_dir) ) {
390
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($themes_dir), RecursiveIteratorIterator::SELF_FIRST);
391
+
392
+ foreach ( $iterator as $files ) {
393
+
394
+ if ( $files->isFile() ) {
395
+
396
+ if ( $files->getPathname() != get_theme_root() . '\index.php' && $files->getPathname() != get_theme_root() . '/index.php' ) {
397
+
398
+ $theme_file_path_array[] = $files->getPathname();
399
+ }
400
+ }
401
+ }
402
+ }
403
+ }
404
+
405
+ if ( ! in_array( $bps_wpcontent_dir, $mscan_dirs_array ) ) {
406
+ $total_plugin_files = 0;
407
+ $total_theme_files = 0;
408
+ } else {
409
+
410
+ if ( ! empty($plugin_hashes) ) {
411
+ $total_plugin_files = count($plugin_hashes); // accurate
412
+ } else {
413
+ $total_plugin_files = count($plugin_file_path_array); // not accurate. will most likely be excessive estimated scan time.
414
+ }
415
+
416
+ if ( ! empty($theme_hashes) ) {
417
+ $total_theme_files = count($theme_hashes); // accurate
418
+ } else {
419
+ $total_theme_files = count($theme_file_path_array); // not accurate. will most likely be excessive estimated scan time.
420
+ }
421
+ }
422
+
423
  $total_non_image_files = count($file_path_array);
 
424
  $total_skipped_files = count($skipped_file_path_array);
425
+ $total_scan_files = $total_wp_core_files + $total_plugin_files + $total_theme_files + $total_non_image_files;
426
 
427
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
428
 
430
 
431
  } else {
432
 
 
433
  fwrite( $handle, "Scan Time Calculation: Total Skipped Files (larger than ".$MScan_options['mscan_max_file_size']." KB): ".$total_skipped_files."\r\n" );
434
  fwrite( $handle, "Scan Time Calculation: Total WP Core Files to Scan: ".$total_wp_core_files."\r\n" );
435
+ fwrite( $handle, "Scan Time Calculation: Total Plugin Files to Scan: ".$total_plugin_files."\r\n" );
436
+ fwrite( $handle, "Scan Time Calculation: Total Theme Files to Scan: ".$total_theme_files."\r\n" );
437
+ fwrite( $handle, "Scan Time Calculation: Total non-WP php, html, etc Files to Scan: ".$total_non_image_files."\r\n" );
438
+ fwrite( $handle, "Scan Time Calculation: Total Files to Scan: ".$total_scan_files."\r\n" );
439
  }
440
 
441
  if ( $MScan_options['bps_mscan_dirs'] != '' ) {
442
 
 
 
 
 
 
 
 
 
443
  $mscan_dirs = implode( ', ', $mscan_dirs_array );
444
+ fwrite( $handle, "Scan Time Calculation: Website Folders & Files To Scan: ".$mscan_dirs."\r\n" );
445
  }
446
 
447
+ if ( $MScan_options['mscan_exclude_dirs'] != '' ) {
448
+
449
+ $mscan_exclude_dirs = implode( '', explode( "\n", $MScan_options['mscan_exclude_dirs'] ) );
450
+ fwrite( $handle, "Scan Time Calculation: Excluded Folders: \r\n".$mscan_exclude_dirs."\r\n" );
451
+ }
452
+
453
+ // Core, Plugins and Themes file hash calculations (download, extraction, hash and cleanup)
454
  $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
455
  $wp_hash_time = '0';
456
 
458
  $check_string = file_get_contents($wp_hashes_file);
459
 
460
  if ( ! strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
461
+ $wp_hash_time = '45';
462
+ }
463
+ }
464
+
465
+ // Plugin Hash Time: Gets the total number of new plugins available for download, unzip and file hash.
466
+ // Note: $value['TextDomain'] is not reliable. Use $key instead.
467
+ $all_plugins = get_plugins();
468
+
469
+ $plugins_array = array();
470
+ $hello_dolly_plugin_array = array();
471
+
472
+ foreach ( $all_plugins as $key => $value ) {
473
+
474
+ if ( ! empty($key) ) {
475
+
476
+ $pos = strpos($key, '/');
477
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
478
+
479
+ if ( $pos !== false ) {
480
+
481
+ $plugin_name = strstr($key, '/', true);
482
+ $plugins_array[$plugin_name] = $value['Version'];
483
+
484
+ } else {
485
+
486
+ if ( $dolly_pos !== false ) {
487
+ $hello_dolly_plugin_array['hello-dolly'] = $value['Version'];
488
+ }
489
+ }
490
+ }
491
+ }
492
+
493
+ $plugins_array_merged = array_merge($plugins_array, $hello_dolly_plugin_array);
494
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
495
+
496
+ // First MScan run: Not going to bother doing a check for zip files that are not downloadable. ie premium, paid, custom or no zip file version #.
497
+ // Better to over time than under time on the first run.
498
+ if ( ! isset( $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'] ) ) {
499
+
500
+ $plugin_array_count = count($plugins_array_merged);
501
+ $plugin_hash_time = $plugin_array_count * 5;
502
+
503
+ } else {
504
+
505
+ $plugin_array_diff = isset( $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'] ) ? array_diff( $plugins_array_merged, $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'] ) : array();
506
+ $plugin_array_count = count($plugin_array_diff);
507
+
508
+ // The base processing time of the zip download function is around 12 seconds on Windows XAMPP if 0 plugins are downloaded.
509
+ // The base processing time of the zip download function is between 5-10 seconds on Linux Live hosted sites if 0 plugins are downloaded.
510
+ if ( $plugin_array_count <= 4 ) {
511
+ $plugin_hash_time = 8;
512
+ } else {
513
+ $plugin_hash_time = $plugin_array_count * 5;
514
+ }
515
+ }
516
+
517
+ // Theme Hash Time: Gets the total number of new themes available for download, unzip and file hash.
518
+ $all_themes = wp_get_themes();
519
+ $all_themes_array = array();
520
+
521
+ foreach ( $all_themes as $key => $value ) {
522
+
523
+ if ( ! empty($key) ) {
524
+ $all_themes_array[$key] = $value['Version'];
525
  }
526
  }
527
+
528
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
529
+
530
+ // First MScan run: Not going to bother doing a check for zip files that are not downloadable. ie premium, paid, custom or no zip file version #.
531
+ // Better to over time than under time on the first run.
532
+ if ( ! isset( $mscan_theme_hash['bps_mscan_theme_hash_version_check'] ) ) {
533
+
534
+ $theme_array_count = count($all_themes_array);
535
+ $theme_hash_time = $theme_array_count * 5;
536
+
537
+ } else {
538
 
539
+ $theme_array_diff = isset( $mscan_theme_hash['bps_mscan_theme_hash_version_check'] ) ? array_diff( $all_themes_array, $mscan_theme_hash['bps_mscan_theme_hash_version_check'] ) : array();
540
+ $theme_array_count = count($theme_array_diff);
541
+
542
+ // The base processing time of the zip download function is around 12 seconds on Windows XAMPP if 0 themes are downloaded.
543
+ // The base processing time of the zip download function is less than 1 second on Linux Live hosted sites if 0 themes are downloaded.
544
+ if ( $theme_array_count <= 3 ) {
545
+ $theme_hash_time = 0;
546
+ } else {
547
+ $theme_hash_time = $theme_array_count * 5;
548
+ }
549
+ }
550
+
551
+ ## Scan Time Estimate Calculations: see notes in DW malware-scanner.php file.
552
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
553
 
554
  $filesize_array = array();
560
  }
561
  }
562
 
 
563
  $total_filesize_bytes = array_sum($filesize_array);
564
  $mbytes = number_format( $total_filesize_bytes / ( 1024 * 1024 ), 2 );
565
  $skipped_files_time_math = $mbytes * 1.15;
566
  $total_time_estimate = round($skipped_files_time_math);
567
 
568
+ $bps_mscan_time_remaining = time() + $wp_hash_time + $plugin_hash_time + $theme_hash_time + $total_time_estimate;
 
569
 
 
570
  fwrite( $handle, "Scan Time Calculation: Total Size of all Skipped Files: ".$mbytes." MB\r\n" );
571
+ fwrite( $handle, "Scan Time Calculation: WP Core Hash Time Estimate: +".$wp_hash_time." Seconds\r\n" );
572
+ fwrite( $handle, "Scan Time Calculation: Plugins Hash Time Estimate: +".$plugin_hash_time." Seconds\r\n" );
573
+ fwrite( $handle, "Scan Time Calculation: Themes Hash Time Estimate: +".$theme_hash_time." Seconds\r\n" );
574
  fwrite( $handle, "Scan Time Calculation: Skipped Files Time Estimate: ".$total_time_estimate." Seconds\r\n" );
575
 
576
  } else {
577
 
 
578
  $wp_core_files_time_math = $total_wp_core_files / 400;
579
  $wp_core_files_time = round($wp_core_files_time_math);
580
+ $plugin_files_time_math = $total_plugin_files / 850;
581
+ $plugin_files_time = round($plugin_files_time_math);
582
+ $theme_files_time_math = $total_theme_files / 850;
583
+ $theme_files_time = round($theme_files_time_math);
584
+
585
+ if ( version_compare( PHP_VERSION, '7.0.0' ) >= 0 ) {
586
+
587
+ $non_image_files_time_math = $total_non_image_files / 150;
588
+ $non_image_files_time = round($non_image_files_time_math);
589
+
590
+ } else {
591
+
592
+ $non_image_files_time_math = $total_non_image_files / 100;
593
+ $non_image_files_time = round($non_image_files_time_math);
594
+ }
595
 
596
  $rows = '';
597
  $size = 0;
605
  $db_size_time_math = $kbytes / 4000;
606
  $db_size_time = round($db_size_time_math);
607
 
608
+ /* Testing: Simulating a scan estimate time that is less than the actual scan time: -40 seconds.
609
+ $simulation_test = time() - 40;
610
+
611
+ $bps_mscan_time_remaining = $simulation_test + $wp_hash_time + $plugin_hash_time + $theme_hash_time + $wp_core_files_time + $plugin_files_time +
612
+ $theme_files_time + $non_image_files_time + $db_size_time;
613
+ */
614
+
615
+ // Linux Live Host Test Results: I calibrated several other things so a base time adjustment is not needed.
616
+ // future if needed: create sapi conditions if needed.
617
+ $linux_base_time = 0;
618
+
619
+ $bps_mscan_time_remaining = time() + $wp_hash_time + $plugin_hash_time + $theme_hash_time + $wp_core_files_time + $plugin_files_time +
620
+ $theme_files_time + $non_image_files_time + $db_size_time + $linux_base_time;
621
+
622
+ // Note: On first daily scan the script execution time (actual scan time) will be around 30 seconds longer. ie caching/Zend, etc. mechanisms for future scans.
623
+ // Pending: Live hosted site testing. The longer daily scan on first run may only occur on Windows XAMPP, etc.
624
+ // A typical/average scan in the normal/average file scan range will have a scan time estimate of +10 to +15 seconds vs the actual scan time.
625
+ // It is better for the scan estimate to be over actual scan time vs under actual scan time.
626
+ // So if someone has a very low number of non-WP files then the estimated and actual scan times will be within 15 seconds.
627
+ // The greater the number of non-WP files to scan the greater the estimated time will be vs the actual scan time.
628
+ // So the estimated scan time for a very large number of non-WP files will increase vs the actual scan time. Should still be within 30 seconds max.
629
+ // Tested scanning 16K non-WP files + WP files = 20K files. Scan completes in 1:20 minutes on first daily scan and 50 seconds on next scans.
630
+ // The typical/average number of files scanned should be between 3,000 - 8,000 files.
631
+ // Normal total file number scan range: Over 1,000 - less than 12,000. Anything below or above this range is handled in my js code.
632
+ $total_time_estimate = $wp_hash_time + $plugin_hash_time + $theme_hash_time + $wp_core_files_time + $plugin_files_time + $theme_files_time +
633
+ $non_image_files_time + $db_size_time + $linux_base_time;
634
+
635
+ fwrite( $handle, "Scan Time Calculation: WP Core Hash Time Estimate: +".$wp_hash_time." Seconds\r\n" );
636
+ fwrite( $handle, "Scan Time Calculation: Plugins Hash Time Estimate: +".$plugin_hash_time." Seconds\r\n" );
637
+ fwrite( $handle, "Scan Time Calculation: Themes Hash Time Estimate: +".$theme_hash_time." Seconds\r\n" );
638
  fwrite( $handle, "Scan Time Calculation: WP Core Files Time Estimate: +".$wp_core_files_time." Seconds\r\n" );
639
+ fwrite( $handle, "Scan Time Calculation: Plugin Files Time Estimate: +".$plugin_files_time." Seconds\r\n" );
640
+ fwrite( $handle, "Scan Time Calculation: Theme Files Time Estimate: +".$theme_files_time." Seconds\r\n" );
641
+ fwrite( $handle, "Scan Time Calculation: non-WP php, html, etc Files Time Estimate: +".$non_image_files_time." Seconds\r\n" );
642
  fwrite( $handle, "Scan Time Calculation: DB Size Time Estimate: +".$db_size_time." Seconds\r\n" );
643
+ fwrite( $handle, "Scan Time Calculation: SAPI Variance Time Estimate: +".$linux_base_time." Seconds\r\n" );
644
  fwrite( $handle, "Scan Time Calculation: Scan Time Estimate: ".$total_time_estimate." Seconds\r\n" );
645
  }
646
 
647
  $MScan_status = get_option('bulletproof_security_options_MScan_status');
648
+
649
  $MScan_status_db = array(
650
  'bps_mscan_time_start' => time(),
651
  'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
654
  'bps_mscan_status' => '2',
655
  'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
656
  'bps_mscan_total_time' => $total_time_estimate,
657
+ 'bps_mscan_total_website_files' => '',
658
  'bps_mscan_total_wp_core_files' => $total_wp_core_files,
659
  'bps_mscan_total_non_image_files' => $total_non_image_files,
660
+ 'bps_mscan_total_image_files' => '',
661
  'bps_mscan_total_all_scannable_files' => $total_scan_files,
662
  'bps_mscan_total_skipped_files' => $total_skipped_files,
663
  'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
664
  'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
665
  'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
666
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
667
+ 'bps_mscan_total_plugin_files' => $total_plugin_files,
668
+ 'bps_mscan_total_theme_files' => $total_theme_files
669
  );
670
 
671
  foreach( $MScan_status_db as $key => $value ) {
684
  $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
685
 
686
  $file_count_log = 'Scan Time Calculation Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
687
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
688
 
689
+ fwrite( $handle, "MScan Status: ".$MScan_status['bps_mscan_status']."\r\n" );
690
  fwrite( $handle, "$file_count_log\r\n" );
691
  fclose($handle);
692
+
693
  return true;
694
  }
695
 
696
+ // MScan 2.0: File & Database Scanner
697
+ // Faster, more accurate and most importantly no longer buggy.
698
+ // Notes:
699
+ // MScan Status 2 is set at the end of the scan time estimate function and means that other functions (zip download, file hash and file scanning) are still being processed.
700
+ // MScan Status 3 is set at the end of this file scanning function and means that all functions (zip download, file hash and file scanning) have completed.
701
+ function bpsPro_mscan_file_scan($mstime) {
702
+ global $wp_version, $wpdb, $plugin_hashes, $theme_hashes;
703
 
704
  $time_start = microtime( true );
705
 
706
+ // Simulating a scan that exceeds the scan estimate time significantly.
707
+ // Note: My js mscan status 2 condition for this scenario works fine except when doing the first scan on a new day.
708
+ // Example: Added new folders to scan. The js mscan status 2 condition briefly flashed and the scan status results were displayed (mscan status: 4)
709
+ // but the scan results were for the previous scan. After the scan actually completed and refreshing the mscan page the scan results displayed the correct scan results.
710
+ // This issue may only happen on Windows XAMPP. This has to be some sort of caching issue. DB cache, Browser cache, Zend???
711
+ //sleep(80);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
712
 
713
+ $MScan_options = get_option('bulletproof_security_options_MScan');
714
+ $mstime = ! isset($MScan_options['mscan_max_time_limit']) ? '300' : $MScan_options['mscan_max_time_limit'];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
715
 
716
+ set_time_limit($mstime);
717
+ ini_set('max_execution_time', $mstime);
718
  $timeNow = time();
719
  $gmt_offset = get_option( 'gmt_offset' ) * 3600;
720
  $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
721
  $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
722
+ $MScanStop = WP_CONTENT_DIR . '/bps-backup/master-backups/mscan-stop.txt';
723
+ $send_email = '';
724
 
725
  $handle = fopen( $mscan_log, 'a' );
726
 
727
+ $mscan_plugin_hash_new_array_keys = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
728
 
729
+ if ( get_option( 'bulletproof_security_options_mscan_p_hash_new' ) ) {
 
 
 
730
 
731
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
732
+ $mscan_plugin_hash_new_array_keys = array();
 
 
 
 
 
 
 
 
 
 
 
 
 
733
 
734
+ // Get the new hash array keys that have a value otherwise return an empty array of array keys.
735
+ foreach ( $mscan_plugin_hash_new['bps_mscan_plugin_hash_paths_new'] as $key => $value ) {
736
 
737
+ foreach ( $value as $inner_key => $inner_value ) {
738
 
739
+ if ( ! empty($inner_value) ) {
740
+ $mscan_plugin_hash_new_array_keys[] = $key;
741
+ }
 
742
  }
743
  }
744
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
745
 
746
+ if ( get_option( 'bulletproof_security_options_mscan_t_hash_new' ) ) {
747
 
748
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
749
+ $mscan_theme_hash_new_array_keys = array();
 
750
 
751
+ // Get the new hash array keys that have a value otherwise return an empty array of array keys.
752
+ foreach ( $mscan_theme_hash_new['bps_mscan_theme_hash_paths_new'] as $key => $value ) {
753
 
754
+ foreach ( $value as $inner_key => $inner_value ) {
755
 
756
+ if ( ! empty($inner_value) ) {
757
+ $mscan_theme_hash_new_array_keys[] = $key;
758
+ }
759
+ }
760
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
761
  }
762
 
763
+ // First time MScan scan or if someone uses the Delete File Hashes Tool or if plugins or themes are installed/updated/uploaded.
764
+ // This is a quick and simple way to deal with people who are plugin and theme hoarders to ensure things don't go off the rails.
765
+ // Also want to make sure the plugin and theme hash files are already created before running a scan.
766
+ // Note: The plugin and theme hash maker functions will only create new hash files based on these conditions.
767
+ // Use MScan Status: 3 and let the iframe js script update the status to 4 in case the estimated scan time is excessive.
768
+ if ( ! get_option('bulletproof_security_options_mscan_theme_hash') || ! get_option('bulletproof_security_options_mscan_plugin_hash') || ! empty($mscan_plugin_hash_new_array_keys ) || ! empty($mscan_theme_hash_new_array_keys ) ) {
769
 
770
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
 
 
 
 
 
 
 
 
 
 
 
771
 
772
+ $MScan_status_db = array(
773
+ 'bps_mscan_time_start' => $MScan_status['bps_mscan_time_start'],
774
+ 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
775
+ 'bps_mscan_time_end' => $MScan_status['bps_mscan_time_end'],
776
+ 'bps_mscan_time_remaining' => $MScan_status['bps_mscan_time_remaining'],
777
+ 'bps_mscan_status' => '3',
778
+ 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
779
+ 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
780
+ 'bps_mscan_total_website_files' => '',
781
+ 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
782
+ 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
783
+ 'bps_mscan_total_image_files' => '',
784
+ 'bps_mscan_total_all_scannable_files' => 'New Hash Files Created: Run A New Scan',
785
+ 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
786
+ 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
787
+ 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
788
+ 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
789
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
790
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
791
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
792
+ );
793
+
794
+ foreach( $MScan_status_db as $key => $value ) {
795
+ update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
796
+ }
797
 
798
+ fwrite( $handle, "Scanning Files: Files not scanned: First time scan, the Delete File Hashes Tool was used or plugins/themes installed/updated.\r\n" );
 
799
  fclose($handle);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
800
 
801
+ return;
802
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
 
804
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
805
 
806
+ fwrite( $handle, "Scanning Files: Start scanning files.\r\n" );
807
+ fwrite( $handle, "MScan Status: ".$MScan_status['bps_mscan_status']."\r\n" );
808
 
 
 
 
 
 
 
 
809
  $bps_wpcontent_dir = str_replace( ABSPATH, '', WP_CONTENT_DIR );
810
+ $bps_plugin_dir = str_replace( WP_CONTENT_DIR, '', WP_PLUGIN_DIR );
811
+ $bps_themes_dir = str_replace( WP_CONTENT_DIR, '', get_theme_root() );
812
+ $bps_plugin_dir_no_slash = str_replace( array( '\\', '/'), '', $bps_plugin_dir );
813
+ $bps_themes_dir_no_slash = str_replace( array( '\\', '/'), '', $bps_themes_dir );
814
+
815
+ // get_home_path() and ABSPATH are different paths for GWIOD site types. Home = Parent folder. ABSPATH = WP Core folders and files.
816
+ // They are the same for all other WP site types. Not sure about Network subdomain/Domain Mapping site types.
817
+ // Note: The FilterIterator excludes any dir checkboxes that are not checked in the MScan Website Folders & Files To Scan option.
818
+ // Other WordPress installation folders are excluded in the FilterIterator
819
+ $source = get_home_path();
820
 
 
 
 
 
 
 
821
  if ( is_dir($source) ) {
822
 
823
  $dirItr = new RecursiveDirectoryIterator($source);
824
  $filterItr = new BPSMScanRecursiveFilterIterator($dirItr);
825
  $iterator = new RecursiveIteratorIterator($filterItr, RecursiveIteratorIterator::SELF_FIRST);
826
 
 
827
  $file_path_array = array();
828
  $wp_core_file_array = array();
829
+ //$total_website_files_array = array();
830
  $skipped_image_file_path_array = array();
831
  $skipped_nonimage_file_path_array = array();
832
 
833
+ // WP Core files hashes are created for root WP Core files.
834
+ // Note: If a hacker copies the WP Core index.php file to another folder somewhere and adds additional hacker code in the index.php file
835
+ // the scan result will be: Altered or unknown WP Core file instead of a pattern match result.
836
  $wp_core_root_file_array = array( 'wp-activate.php', 'wp-blog-header.php', 'wp-comments-post.php', 'wp-config-sample.php', 'wp-cron.php', 'wp-links-opml.php', 'wp-load.php', 'wp-login.php', 'wp-mail.php', 'wp-settings.php', 'wp-signup.php', 'wp-trackback.php' );
837
 
838
  foreach ( $iterator as $files ) {
847
 
848
  } else {
849
 
850
+ if ( ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)bps-backup(\/|\\\))(.*)/', $files->getPathname() ) && ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)'.$bps_plugin_dir_no_slash.'(\/|\\\))(.*)/', $files->getPathname() ) && ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)'.$bps_themes_dir_no_slash.'(\/|\\\))(.*)/', $files->getPathname() ) && ! preg_match( '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)index\.php)/', $files->getPathname() ) ) {
851
 
852
+ //$total_website_files_array[] = $files->getPathname();
853
 
854
  if ( $files->getFilename() == 'index.php' ) {
855
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
856
  $check_string1 = file_get_contents( $files->getPath() . '/index.php' );
857
+ $pos1 = preg_match( $pattern, $check_string1 );
858
  }
859
+
860
  if ( $files->getFilename() == 'readme.html' ) {
861
  $check_string2 = file_get_contents( $files->getPath() . '/readme.html' );
862
  $pos2 = strpos( $check_string2, "https://wordpress.org/" );
866
  $check_string3 = file_get_contents( $files->getPath() . '/xmlrpc.php' );
867
  $pos3 = strpos( $check_string3, "XML-RPC protocol support for WordPress" );
868
  }
869
+
870
  if ( $MScan_options['mscan_exclude_dirs'] != '' ) {
871
 
872
  $mscan_exclude_dirs = str_replace('\\\\', '\\', $MScan_options['mscan_exclude_dirs']);
883
 
884
  $glue = implode("", $mscan_exclude_dirs_regex_array);
885
  $mscan_exclude_dir_regex = preg_replace( '/\|$/', '', $glue);
886
+ $exclude_dirs_pattern = '/('.$mscan_exclude_dir_regex.')/'; // file_path_array preg_match condition.
887
 
888
  } else {
889
  $exclude_dirs_pattern = '/(\/bps-no-dirs\/)/';
890
  }
891
 
892
+ // Note: Other WordPress site folders and files are filtered out in the FilterIterator.
893
+ // Plugin and Theme folders are not included in this Iteration and are done separately in their own Iterations.
894
+ // I've seen wp-admin and wp-includes folder names used in Plugin's and Theme's folder names.
895
+ // No need to use: DIRECTORY_SEPARATOR here. Use simple RegEx instead.
896
  $core_pattern = '/(.*)((\/|\\\)wp-admin(\/|\\\)|(\/|\\\)wp-includes(\/|\\\))(.*)/';
897
 
898
  if ( preg_match( $core_pattern, $files->getPathname() ) || $files->getFilename() == 'index.php' && $pos1 !== false || $files->getFilename() == 'readme.html' && $pos2 !== false || $files->getFilename() == 'xmlrpc.php' && $pos3 !== false || in_array($files->getFilename(), $wp_core_root_file_array) ) {
905
 
906
  if ( $files->getSize() <= $MScan_options['mscan_max_file_size'] * 1024 ) {
907
 
908
+ if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' || $ext == 'ico' || $ext == 'bak' ) {
 
 
 
 
 
 
 
909
  $file_path_array[] = $files->getPathname();
910
  }
911
 
912
  } else {
913
 
914
+ if ( $ext == 'htm' || $ext == 'html' || $ext == 'htaccess' || $ext == 'js' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' || $ext == 'ico' || $ext == 'bak' ) {
 
 
 
 
 
 
 
915
  $skipped_nonimage_file_path_array[] = $files->getPathname();
916
  }
917
  }
919
  }
920
  }
921
  }
922
+ } catch (RuntimeException $e) {
923
+
924
+ }
925
+ }
926
+
927
+ // 15.4: Get array of plugin files if the wp-content host folder checkbox is checked else empty array.
928
+ $mscan_dirs_array = array();
929
+
930
+ foreach ( $MScan_options['bps_mscan_dirs'] as $key => $value ) {
931
+
932
+ if ( $value == '1' ) {
933
+ $mscan_dirs_array[] = $key;
934
+ }
935
+ }
936
+
937
+ // Whitelist BPS & other plugin's dynamic files - plugin files that are automatically edited/changed after plugin update or installation.
938
+ // Maybe create a new MScan option to turn this On|Off? ie Whitelist Known Dynamic Plugin Files > On|Off
939
+ $bps_plugin_files_whitelist = '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)'.$bps_plugin_dir_no_slash.'(\/|\\\)bulletproof-security(.*)(\.htaccess|\.zip|plugins-htaccess-master\.txt|class\.php|plugins-allow-from\.txt|sec-log-master\.txt|bps-maintenance-values\.php))/';
940
+
941
+ $other_plugins_files_whitelist = '/(.*)((\/|\\\)'.$bps_wpcontent_dir.'(\/|\\\)'.$bps_plugin_dir_no_slash.'(\/|\\\)(tinymce-advanced(.*)tinymce-advanced\.php|google-sitemap-generator(.*)sitemap\.php))/';
942
+
943
+ $plugins_dir = WP_PLUGIN_DIR;
944
+
945
+ $plugin_file_path_array = array();
946
+
947
+ if ( in_array( $bps_wpcontent_dir, $mscan_dirs_array ) ) {
948
+
949
+ if ( is_dir($plugins_dir) ) {
950
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($plugins_dir), RecursiveIteratorIterator::SELF_FIRST);
951
+
952
+ foreach ( $iterator as $files ) {
953
+
954
+ if ( $files->isFile() ) {
955
+
956
+ if ( $files->getPathname() != WP_PLUGIN_DIR . '/.htaccess' && $files->getPathname() != WP_PLUGIN_DIR . '\.htaccess' && $files->getPathname() != WP_PLUGIN_DIR . '\index.php' && $files->getPathname() != WP_PLUGIN_DIR . '/index.php' && ! preg_match( $bps_plugin_files_whitelist, $files->getPathname() ) && ! preg_match( $other_plugins_files_whitelist, $files->getPathname() ) ) {
957
+
958
+ $plugin_file_path_array[] = $files->getPathname();
959
+ }
960
+ }
961
+ }
962
  }
963
  }
964
+
965
+ // 15.4: Get array of theme files.
966
+ // Note: For GWIOD site types Plugin and Theme files will always be scanned and cannot be excluded.
967
+ $themes_dir = get_theme_root();
968
+
969
+ $theme_file_path_array = array();
970
+
971
+ if ( in_array( $bps_wpcontent_dir, $mscan_dirs_array ) ) {
972
 
973
+ if ( is_dir($themes_dir) ) {
974
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($themes_dir), RecursiveIteratorIterator::SELF_FIRST);
975
+
976
+ foreach ( $iterator as $files ) {
977
+
978
+ if ( $files->isFile() ) {
979
+
980
+ if ( $files->getPathname() != get_theme_root() . '\index.php' && $files->getPathname() != get_theme_root() . '/index.php' ) {
981
+
982
+ $theme_file_path_array[] = $files->getPathname();
983
+ }
984
+ }
985
+ }
986
+ }
987
+ }
988
+
989
  $skipped_file_path_array = array_merge($skipped_image_file_path_array, $skipped_nonimage_file_path_array);
990
 
991
  $MStable = $wpdb->prefix . "bpspro_mscan";
1007
  }
1008
  }
1009
 
1010
+ ## 15.3: MScan pattern matching code is now saved in the DB
1011
+ ## 15.4: The "image patterns" DB option is no longer used.
 
1012
  $mscan_db_pattern_match_options = get_option('bulletproof_security_options_mscan_patterns');
1013
 
1014
  foreach ( $mscan_db_pattern_match_options['mscan_pattern_match_files'] as $key => $value ) {
1024
  if ( $inner_key == 'php_patterns' ) {
1025
  $php_pattern = $inner_value;
1026
  }
 
 
 
1027
  }
1028
  }
1029
 
1072
  }
1073
  }
1074
  }
1075
+
1076
  $js_code_match = 0;
1077
  $htaccess_code_match = 0;
1078
  $php_code_match = 0;
1079
 
1080
+ // Skipped Files Off: All files under the Max File Size Limit setting are scanned in other words. MScan skipped file scanning On means ONLY scan skipped files.
1081
+ // Skipped files are files that are larger than the Max File Size Limit to Scan option setting. The default is 400KB
1082
+ // This section of code directly below adds new skipped files based on the $skipped_file_path_array array.
1083
  if ( $MScan_options['mscan_scan_skipped_files'] == 'Off' ) {
1084
 
1085
  $skipped_rows = 'skipped';
1115
  }
1116
  }
1117
 
1118
+ if ( $ext == 'htm' || $ext == 'html' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' || $ext == 'ico' || $ext == 'bak' ) {
1119
 
1120
  if ( ! in_array($value, $mscan_file_skipped_path_array) ) {
1121
  $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => '', 'mscan_type' => 'php|html|other', 'mscan_path' => $value, 'mscan_pattern' => '', 'mscan_skipped' => 'skipped', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) );
1122
  }
1123
  }
 
 
 
 
 
 
 
 
 
 
1124
  }
1125
  }
1126
 
1135
  }
1136
  }
1137
 
1138
+ if ( ! empty( $plugin_file_path_array ) ) {
1139
+
1140
+ foreach ( $plugin_file_path_array as $key => $value ) {
1141
+
1142
+ if ( preg_match( $exclude_dirs_pattern, $value ) ) {
1143
+ unset($plugin_file_path_array[$key]);
1144
+ }
1145
+
1146
+ if ( in_array( $value, $mscan_file_ignore_array ) ) {
1147
+ unset($plugin_file_path_array[$key]);
1148
+ }
1149
+ }
1150
+ }
1151
+
1152
+ if ( ! empty( $theme_file_path_array ) ) {
1153
+
1154
+ foreach ( $theme_file_path_array as $key => $value ) {
1155
+
1156
+ if ( preg_match( $exclude_dirs_pattern, $value ) ) {
1157
+ unset($theme_file_path_array[$key]);
1158
+ }
1159
+
1160
+ if ( in_array( $value, $mscan_file_ignore_array ) ) {
1161
+ unset($theme_file_path_array[$key]);
1162
+ }
1163
+ }
1164
+ }
1165
+
1166
  foreach ( $file_path_array as $key => $value ) {
1167
 
1168
  if ( preg_match( '/index\.php/', $value ) ) {
1169
+ $pattern = '/define\((\s|)\'WP_USE_THEMES/';
1170
  $check_string4 = file_get_contents( $value );
1171
+ if ( preg_match( $pattern, $check_string4 ) ) {
 
1172
  unset($file_path_array[$key]);
1173
  }
1174
  }
1175
+
1176
  if ( preg_match( '/readme\.html/', $value ) ) {
1177
  $check_string5 = file_get_contents( $value );
1178
  $pos5 = strpos( $check_string5, "https://wordpress.org/" );
1194
  }
1195
  }
1196
 
1197
+ $blank_rows = ''; // $skipped_rows variable is higher up in this function.
 
 
 
 
 
 
 
1198
  $MScanFileRows = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $MStable WHERE mscan_path != %s AND mscan_skipped != %s", $blank_rows, $skipped_rows ) );
1199
 
1200
+ // Prevents duplicate DB row inserts
1201
  $mscan_file_path_array = array();
1202
 
1203
  if ( $wpdb->num_rows != 0 ) {
1221
  }
1222
 
1223
  fwrite( $handle, "Scanning Files: Start WP Core file scan.\r\n" );
1224
+ //fwrite( $handle, "Scanning Files: Suspicious|Modified|Unknown WP Core files:\r\n" );
1225
 
1226
  $core_dir_flip = array_flip($wp_core_file_array);
1227
 
1231
  $core_md5_array[$key] = md5_file($key);
1232
  }
1233
 
1234
+ require_once WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
1235
 
1236
  $core_diff_array = array_diff($core_md5_array, $wp_hashes);
1237
 
1253
  // Not redundant - needs to be here
1254
  if ( ! preg_match( '/(.*)(\/|\\\)wp-admin(\/|\\\).htaccess/', $key ) ) {
1255
 
1256
+ //fwrite( $handle, "Scanning Files WP Core: File: $key\r\n" );
1257
+ fwrite( $handle, "Scanning Files WP Core: Suspicious|Modified|Unknown WP Core file: $key\r\n" );
1258
 
1259
  if ( ! in_array($key, $mscan_file_path_array) ) {
1260
 
1271
  }
1272
 
1273
  fwrite( $handle, "Scanning Files: WP Core file scan completed.\r\n" );
1274
+
1275
+ ## 15.4: Plugin file hash comparison scanner
1276
+ // Notes: require_once for hash files is called in the Master AJAX function and in the Scheduled Scan Cron function.
1277
+ // The $plugin_hashes variable is the plugin file hash array.
1278
+ if ( ! empty( $plugin_file_path_array ) ) {
1279
+
1280
+ $plugins_hash_match = 0;
1281
+
1282
+ fwrite( $handle, "Scanning Files: Start Plugins file scan.\r\n" );
1283
+ //fwrite( $handle, "Scanning Files: Suspicious|Modified|Unknown Plugin files:\r\n" );
1284
+
1285
+ if ( empty($plugin_hashes) || $plugin_hashes == null ) {
1286
+
1287
+ fwrite( $handle, "Scanning Files: Plugins: The plugin-hashes.php array is empty or null. Plugin files will not be scanned.\r\n" );
1288
+
1289
+ } else {
1290
+
1291
+ $plugin_files_flip = array_flip($plugin_file_path_array);
1292
+
1293
+ $plugin_md5_array = array();
1294
+
1295
+ foreach ( $plugin_files_flip as $key => $value ) {
1296
+ $plugin_md5_array[$key] = md5_file($key);
1297
+ }
1298
+
1299
+ $plugin_diff_array = array_diff($plugin_md5_array, $plugin_hashes);
1300
+
1301
+ $mscan_nodownload = get_option('bulletproof_security_options_mscan_nodownload');
1302
+
1303
+ $plugin_hashes_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
1304
+
1305
+ if ( file_exists( $plugin_hashes_file ) ) {
1306
+ $plugin_hashes_file_contents = file_get_contents($plugin_hashes_file);
1307
+ }
1308
+
1309
+ $plugin_diff_array_clean = array();
1310
+
1311
+ // Unset premium/paid, custom plugins or plugins without a zip version # that do not exist in the Plugin Repo
1312
+ // unless the plugin exists in the plugin hashes array.
1313
+ foreach ( $plugin_diff_array as $key1 => $value1 ) {
1314
+
1315
+ foreach ( $mscan_nodownload['bps_plugin_nodownload'] as $key2 => $value2 ) {
1316
+
1317
+ if ( preg_match( '/(.*)'.$value2.'(.*)/', $key1, $matches ) && ! preg_match( '/##\sBEGIN\s'.$value2.'\s##/', $plugin_hashes_file_contents ) ) {
1318
+
1319
+ unset($key1);
1320
+ $key1 = ! isset($key1) ? '' : $key1; // PHP8 weirdness
1321
+ }
1322
+ }
1323
+
1324
+ if ( ! empty($key1) && ! preg_match( '/(.*)readme\.txt/', $key1 ) ) {
1325
+
1326
+ $plugin_diff_array_clean[] = $key1;
1327
+ }
1328
+ }
1329
+
1330
+ foreach ( $plugin_diff_array_clean as $key => $value ) {
1331
+
1332
+ if ( file_get_contents($MScanStop) != 'run' ) {
1333
+ fwrite( $handle, "Scanning Files: MScan Scanning was Stopped\r\n" );
1334
+ fclose($handle);
1335
+ exit();
1336
+
1337
+ } else {
1338
+
1339
+ if ( ! empty($plugin_diff_array_clean) ) {
1340
+
1341
+ $plugins_hash_match = 1;
1342
+
1343
+ fwrite( $handle, "Scanning Files: Plugins: Suspicious|Modified|Unknown Plugin file: $value\r\n" );
1344
+
1345
+ if ( ! in_array($value, $mscan_file_path_array) ) {
1346
+
1347
+ if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'plugins', 'mscan_path' => $value, 'mscan_pattern' => 'Altered or unknown Plugin file', 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1348
+ $send_email = 'send';
1349
+ }
1350
+ }
1351
+ }
1352
+ }
1353
+ }
1354
+
1355
+ if ( $plugins_hash_match == 0 ) {
1356
+ fwrite( $handle, "Scanning Files: Plugins: No Suspicious|Modified|Unknown Plugin files were found.\r\n" );
1357
+ }
1358
+ }
1359
+ fwrite( $handle, "Scanning Files: Plugins file scan completed.\r\n" );
1360
+ }
1361
+
1362
+
1363
+ ## 15.4: Theme file hash comparison scanner
1364
+ // Notes: require_once for hash files is called in the Master AJAX function and in the Scheduled Scan Cron function.
1365
+ // The $theme_hashes variable is the plugin file hash array.
1366
+ if ( ! empty( $theme_file_path_array ) ) {
1367
+
1368
+ $themes_hash_match = 0;
1369
+
1370
+ fwrite( $handle, "Scanning Files: Start Themes file scan.\r\n" );
1371
+ //fwrite( $handle, "Scanning Files: Suspicious|Modified|Unknown Theme files:\r\n" );
1372
+
1373
+ if ( empty($theme_hashes) || $theme_hashes == null ) {
1374
+
1375
+ fwrite( $handle, "Scanning Files: Plugins: The theme-hashes.php array is empty or null. Theme files will not be scanned.\r\n" );
1376
+
1377
+ } else {
1378
+
1379
+ $theme_files_flip = array_flip($theme_file_path_array);
1380
+
1381
+ $theme_md5_array = array();
1382
+
1383
+ foreach ( $theme_files_flip as $key => $value ) {
1384
+ $theme_md5_array[$key] = md5_file($key);
1385
+ }
1386
+
1387
+ $theme_diff_array = array_diff($theme_md5_array, $theme_hashes);
1388
+
1389
+ $mscan_nodownload = get_option('bulletproof_security_options_mscan_nodownload');
1390
+
1391
+ $theme_hashes_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
1392
+
1393
+ if ( file_exists( $theme_hashes_file ) ) {
1394
+ $theme_hashes_file_contents = file_get_contents($theme_hashes_file);
1395
+ }
1396
+
1397
+ $theme_diff_array_clean = array();
1398
+
1399
+ // Unset premium/paid, custom themes or themes without a zip version # that do not exist in the WP Theme Repo
1400
+ // unless the theme exists in the theme hashes array.
1401
+ foreach ( $theme_diff_array as $key1 => $value1 ) {
1402
+
1403
+ foreach ( $mscan_nodownload['bps_theme_nodownload'] as $key2 => $value2 ) {
1404
+
1405
+ if ( preg_match( '/(.*)'.$value2.'(.*)/', $key1, $matches ) && ! preg_match( '/##\sBEGIN\s'.$value2.'\s##/', $theme_hashes_file_contents ) ) {
1406
+
1407
+ unset($key1);
1408
+ $key1 = ! isset($key1) ? '' : $key1; // PHP8 weirdness
1409
+ }
1410
+ }
1411
+
1412
+ if ( ! empty($key1) ) {
1413
+
1414
+ $theme_diff_array_clean[] = $key1;
1415
+ }
1416
+ }
1417
+
1418
+ foreach ( $theme_diff_array_clean as $key => $value ) {
1419
+
1420
+ if ( file_get_contents($MScanStop) != 'run' ) {
1421
+ fwrite( $handle, "Scanning Files: MScan Scanning was Stopped\r\n" );
1422
+ fclose($handle);
1423
+ exit();
1424
+
1425
+ } else {
1426
+
1427
+ if ( ! empty($theme_diff_array_clean) ) {
1428
+
1429
+ $themes_hash_match = 1;
1430
+
1431
+ fwrite( $handle, "Scanning Files: Themes: Suspicious|Modified|Unknown Theme file: $value\r\n" );
1432
+
1433
+ if ( ! in_array($value, $mscan_file_path_array) ) {
1434
+
1435
+ if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'themes', 'mscan_path' => $value, 'mscan_pattern' => 'Altered or unknown Theme file', 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1436
+ $send_email = 'send';
1437
+ }
1438
+ }
1439
+ }
1440
+ }
1441
+ }
1442
+
1443
+ if ( $themes_hash_match == 0 ) {
1444
+ fwrite( $handle, "Scanning Files: Themes: No Suspicious|Modified|Unknown Theme files were found.\r\n" );
1445
+ }
1446
+ }
1447
+ fwrite( $handle, "Scanning Files: Themes file scan completed.\r\n" );
1448
+ }
1449
+
1450
+ ## 15.4: wp-content, plugins and themes folders root index.php files comparison scan
1451
+ fwrite( $handle, "Scanning Files: Start wp-content, plugins and themes root index.php files scan.\r\n" );
1452
+
1453
+ $index_file_hash_match = 0;
1454
+ $wp_content_index_file = WP_CONTENT_DIR . '/index.php';
1455
+ $plugins_index_file = WP_PLUGIN_DIR . '/index.php';
1456
+ $themes_index_file = get_theme_root() . '/index.php';
1457
+
1458
+ $index_files_array = array( $wp_content_index_file, $plugins_index_file, $themes_index_file );
1459
+
1460
+ foreach ( $index_files_array as $key => $value ) {
1461
+
1462
+ if ( file_exists($value) ) {
1463
+
1464
+ if ( md5_file($value) != '67442c5615eba73d105c0715c6620850' ) {
1465
+
1466
+ $index_file_hash_match = 1;
1467
+
1468
+ fwrite( $handle, "Scanning Files: Suspicious|Modified|Unknown root index.php file detected: $value\r\n" );
1469
+
1470
+ if ( ! in_array($value, $mscan_file_path_array) ) {
1471
+
1472
+ if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'index.php files', 'mscan_path' => $value, 'mscan_pattern' => 'Altered or unknown index.php file', 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1473
+ $send_email = 'send';
1474
+ }
1475
+ }
1476
+ }
1477
+
1478
+ } else {
1479
+ fwrite( $handle, "Scanning Files: index.php files: Missing File (file does not exist): $value\r\n" );
1480
+ }
1481
+ }
1482
+
1483
+ if ( $index_file_hash_match == 0 ) {
1484
+ fwrite( $handle, "Scanning Files: Themes: No Suspicious|Modified|Unknown root index.php files were found.\r\n" );
1485
+ }
1486
+
1487
+ fwrite( $handle, "Scanning Files: wp-content, plugins and themes index.php files scan completed.\r\n" );
1488
+
1489
+ ## non-WP file scanning using pattern matching
1490
+ fwrite( $handle, "Scanning Files: Start php, js, etc file scanning.\r\n" );
1491
  fwrite( $handle, "Scanning Files: Suspicious code pattern matches:\r\n" );
1492
 
1493
  foreach ( $file_path_array as $key => $value ) {
1504
 
1505
  if ( $ext == 'js' ) {
1506
 
1507
+ if ( preg_match( $js_pattern, $file_contents, $matches ) ) {
1508
+
1509
  $js_code_match = 1;
1510
+
1511
+ $string_length = strlen($matches[0]);
1512
+
1513
+ if ( $string_length > 30 ) {
1514
+ $mscan_pattern = substr($matches[0], 0, 30);
1515
+ } else {
1516
+ $mscan_pattern = $matches[0];
1517
+ }
1518
+
1519
  fwrite( $handle, "Scanning Files .js: File: $value\r\n" );
1520
+ fwrite( $handle, "Scanning Files .js: Code Pattern Match: $mscan_pattern\r\n" );
1521
 
1522
  if ( ! in_array($value, $mscan_file_path_array) ) {
1523
 
1524
+ if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'js', 'mscan_path' => $value, 'mscan_pattern' => $mscan_pattern, 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1525
 
1526
  $send_email = 'send';
1527
  }
1531
 
1532
  if ( $ext == 'htaccess' ) {
1533
 
1534
+ if ( preg_match( $htaccess_pattern, $file_contents, $matches ) ) {
1535
 
1536
  $htaccess_code_match = 1;
1537
+
1538
+ $string_length = strlen($matches[0]);
1539
+
1540
+ if ( $string_length > 30 ) {
1541
+ $mscan_pattern = substr($matches[0], 0, 30);
1542
+ } else {
1543
+ $mscan_pattern = $matches[0];
1544
+ }
1545
+
1546
  fwrite( $handle, "Scanning Files .htaccess: File: $value\r\n" );
1547
+ fwrite( $handle, "Scanning Files .htaccess: Code Pattern Match: $mscan_pattern\r\n" );
1548
 
1549
  if ( ! in_array($value, $mscan_file_path_array) ) {
1550
 
1551
+ if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'htaccess', 'mscan_path' => $value, 'mscan_pattern' => $mscan_pattern, 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1552
  $send_email = 'send';
1553
  }
1554
  }
1555
  }
1556
  }
1557
 
1558
+ if ( $ext == 'htm' || $ext == 'html' || $ext == 'php' || $ext == 'phps' || $ext == 'php5' || $ext == 'php4' || $ext == 'php3' || $ext == 'phtml' || $ext == 'phpt' || $ext == 'shtm' || $ext == 'shtml' || $ext == 'xhtml' || $ext == 'ico' || $ext == 'bak' ) {
1559
 
1560
+ if ( preg_match( $php_pattern, $file_contents, $matches ) ) {
1561
 
1562
  $php_code_match = 1;
1563
+
1564
+ $string_length = strlen($matches[0]);
1565
 
1566
+ if ( $string_length > 30 ) {
1567
+ $mscan_pattern = substr($matches[0], 0, 30);
1568
+ } else {
1569
+ $mscan_pattern = $matches[0];
1570
+ }
1571
 
1572
+ fwrite( $handle, "Scanning Files php, html, etc: File: $value\r\n" );
1573
+ fwrite( $handle, "Scanning Files php, html, etc: Code Pattern Match: $mscan_pattern\r\n" );
1574
+
1575
+ if ( ! in_array($value, $mscan_file_path_array) ) {
1576
+
1577
+ if ( $insert_rows = $wpdb->insert( $MStable, array( 'mscan_status' => 'suspect', 'mscan_type' => 'php|html|other', 'mscan_path' => $value, 'mscan_pattern' => $mscan_pattern, 'mscan_skipped' => '', 'mscan_ignored' => '', 'mscan_db_table' => '', 'mscan_db_column' => '', 'mscan_db_pkid' => '', 'mscan_time' => current_time('mysql') ) ) ) {
1578
  $send_email = 'send';
1579
  }
1580
  }
1592
  }
1593
 
1594
  if ( $php_code_match == 0 ) {
1595
+ fwrite( $handle, "Scanning Files php, html, etc: No Suspicious php, html, etc code pattern matches were found.\r\n" );
1596
  }
1597
 
1598
+ fwrite( $handle, "Scanning Files: php, js, etc file scanning completed.\r\n" );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1599
  fwrite( $handle, "Scanning Files: Scanning files completed.\r\n" );
1600
 
1601
  if ( $MScan_options['mscan_scan_database'] == 'On' ) {
1607
  $DBTables = '';
1608
  $getDBTables = $wpdb->get_results( $wpdb->prepare( "SHOW TABLE STATUS WHERE Name != %s", $DBTables ) );
1609
 
1610
+ ## 13.4.1: MScan Database Scan search patterns for DB Query below are now saved in the DB as of 15.3
1611
+
1612
  foreach ( $getDBTables as $Table ) {
1613
 
1614
  if ( $Table->Name != $wpdb->prefix . "bpspro_mscan" ) {
1630
 
1631
  } else {
1632
 
1633
+ // Figure this error out L8R: PHP Warning: Undefined property: stdClass::$option_name in mscan-ajax-functions.php on line 1489
1634
+ // Probably happening since I have nested foreach loops. May need to create arrays instead.
1635
+ if ( @! preg_match( '/_transient_feed_(.*)/', $results->option_name ) && @! preg_match( '/bulletproof_security_options_mscan_(.*)/', $results->option_name ) ) {
1636
 
1637
  $getKey = $wpdb->get_results( "SHOW KEYS FROM $Table->Name WHERE Key_name = 'PRIMARY'" );
1638
 
1645
  $replace = array ( '&lt;', '&gt;' );
1646
  $json_array_converted = preg_replace( $patterns, $replace, $json_array );
1647
 
1648
+
1649
+
1650
  if ( in_array( $json_array_converted[$PKey->Column_name], $mscan_db_ignore_array ) ) {
1651
  unset($json_array[$column->Field]);
1652
  }
1808
 
1809
  } else {
1810
 
1811
+ $file_contents = file_get_contents($row->mscan_path);
 
 
1812
 
1813
+ if ( $row->mscan_type == 'js' ) {
1814
+
1815
+ if ( preg_match( $js_pattern, $file_contents, $matches ) ) {
1816
+
1817
+ $js_code_match = 1;
1818
+ fwrite( $handle, "Scanning Skipped Files .js: File: $row->mscan_path\r\n" );
1819
+ fwrite( $handle, "Scanning Skipped Files .js: Code Pattern Match: $matches[0]\r\n" );
 
 
 
 
 
 
 
 
 
 
 
1820
 
1821
+ $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1822
+
1823
+ $send_email = 'send';
 
 
 
 
 
 
1824
 
1825
+ } else {
1826
+ $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
 
1827
  }
1828
+ }
 
1829
 
1830
+ if ( $row->mscan_type == 'htaccess' ) {
1831
+
1832
+ if ( preg_match( $htaccess_pattern, $file_contents, $matches ) ) {
1833
+
1834
+ $htaccess_code_match = 1;
1835
+ fwrite( $handle, "Scanning Skipped Files .htaccess: File: $row->mscan_path\r\n" );
1836
+ fwrite( $handle, "Scanning Skipped Files .htaccess: Code Pattern Match: $matches[0]\r\n" );
 
 
 
 
 
 
 
1837
 
1838
+ $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1839
 
1840
+ $send_email = 'send';
1841
+
1842
+ } else {
1843
+ $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1844
+ }
1845
+ }
1846
+
1847
+ if ( $row->mscan_type == 'php|html|other' ) {
1848
+
1849
+ if ( preg_match( $php_pattern, $file_contents, $matches ) ) {
1850
+
1851
+ $php_code_match = 1;
1852
+ fwrite( $handle, "Scanning Skipped Files php, html, etc: File: $row->mscan_path\r\n" );
1853
+ fwrite( $handle, "Scanning Skipped Files php, html, etc: Code Pattern Match: $matches[0]\r\n" );
1854
+
1855
+ $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'suspect', 'mscan_pattern' => $matches[0], 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1856
+
1857
+ $send_email = 'send';
1858
+
1859
+ } else {
1860
+ $update_rows = $wpdb->update( $MStable, array( 'mscan_status' => 'clean', 'mscan_time' => current_time('mysql') ), array( 'mscan_path' => $row->mscan_path ) );
1861
  }
1862
  }
 
 
 
 
1863
  }
1864
  }
1865
 
1872
  }
1873
 
1874
  if ( $php_code_match == 0 ) {
1875
+ fwrite( $handle, "Scanning Skipped Files: php, html, etc: No Suspicious php, html, etc code pattern matches were found.\r\n" );
1876
  }
1877
 
 
 
 
 
1878
  fwrite( $handle, "Scanning Skipped Files: Skipped file scan completed.\r\n" );
1879
 
1880
  } else {
1926
  $total_suspect_file_count = count($mscan_suspect_files_total_array);
1927
  $total_suspect_skipped_files_file_count = count($mscan_suspect_skipped_files_total_array);
1928
  $total_suspect_db_count = count($mscan_suspect_db_total_array);
 
1929
  $bps_mscan_total_time = time() - $MScan_status['bps_mscan_time_start'];
1930
 
1931
  $MScan_status_db = array(
1936
  'bps_mscan_status' => '3',
1937
  'bps_mscan_last_scan_timestamp' => $timestamp,
1938
  'bps_mscan_total_time' => $bps_mscan_total_time,
1939
+ 'bps_mscan_total_website_files' => '',
1940
  'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
1941
  'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
1942
+ 'bps_mscan_total_image_files' => '',
1943
  'bps_mscan_total_all_scannable_files' => $MScan_status['bps_mscan_total_all_scannable_files'],
1944
  'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
1945
  'bps_mscan_total_suspect_files' => $total_suspect_file_count,
1946
  'bps_mscan_suspect_skipped_files' => $total_suspect_skipped_files_file_count,
1947
  'bps_mscan_total_suspect_db' => $total_suspect_db_count,
1948
+ 'bps_mscan_total_ignored_files' => $total_ignored_file_db_count,
1949
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
1950
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
1951
  );
1952
 
1953
  foreach( $MScan_status_db as $key => $value ) {
1965
  $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
1966
  $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
1967
 
1968
+ $hours2 = (int)($bps_mscan_total_time / 60 / 60);
1969
+ $minutes2 = (int)($bps_mscan_total_time / 60) - $hours2 * 60;
1970
+ $seconds2 = (int)$bps_mscan_total_time - $hours2 * 60 * 60 - $minutes2 * 60;
1971
+ $hours_format2 = $hours2 == 0 ? "00" : $hours2;
1972
+ $minutes_format2 = $minutes2 == 0 ? "00" : ($minutes2 < 10 ? "0".$minutes2 : $minutes2);
1973
+ $seconds_format2 = $seconds2 == 0 ? "00" : ($seconds2 < 10 ? "0".$seconds2 : $seconds2);
1974
+
1975
  if ( $MScan_options['mscan_scan_skipped_files'] == 'On' ) {
1976
  $file_scan_log = 'Scanning Skipped Files Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
1977
+ $file_scan_log_total_time = 'Total Scan Time: '. $hours_format2 . ':'. $minutes_format2 . ':' . $seconds_format2;
1978
 
1979
  } else {
1980
 
1981
  if ( $MScan_options['mscan_scan_database'] == 'On' ) {
1982
  $file_scan_log = 'Scanning Files & Database Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
1983
+ $file_scan_log_total_time = 'Total Scan Time: '. $hours_format2 . ':'. $minutes_format2 . ':' . $seconds_format2;
1984
  } else{
1985
  $file_scan_log = 'Scanning Files Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
1986
+ $file_scan_log_total_time = 'Total Scan Time: '. $hours_format2 . ':'. $minutes_format2 . ':' . $seconds_format2;
1987
  }
1988
  }
1989
 
1990
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
1991
+
1992
+ fwrite( $handle, "MScan Status: ".$MScan_status['bps_mscan_status']."\r\n" );
1993
  fwrite( $handle, "$file_scan_log\r\n" );
1994
 
1995
  if ( $MScan_options['mscan_scan_delete_tmp_files'] == 'On' ) {
1997
  fwrite( $handle, "Delete /tmp Files: tmp files have been deleted.\r\n" );
1998
  }
1999
 
2000
+ fwrite( $handle, "$file_scan_log_total_time\r\n" );
2001
+
2002
  fclose($handle);
2003
 
2004
  // Send email alert
2005
  if ( $send_email != '' ) {
2006
+ bps_smonitor_mscan_email(); // Note: This function is only used in Pro with scheduled scans. Comment it out in BPS free.
2007
  }
2008
  }
2009
 
2062
  }
2063
  }
2064
  }
 
2065
  ?>
includes/mscan-plugin-hash-maker.php ADDED
@@ -0,0 +1,783 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Download the Plugin zip file version based on the current Plugin version installed.
3
+ // Ensure that the Plugin zip file is not downloaded repeatedly due to an error, issue or problem.
4
+ function bpsPro_plugin_zip_download($mstime) {
5
+ global $wp_version;
6
+
7
+ $time_start = microtime( true );
8
+
9
+ set_time_limit($mstime);
10
+ $timeNow = time();
11
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
12
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
13
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
14
+
15
+ $handle = fopen( $mscan_log, 'a' );
16
+
17
+ if ( ! is_dir( WP_CONTENT_DIR . '/bps-backup/plugin-hashes' ) ) {
18
+ @mkdir( WP_CONTENT_DIR . '/bps-backup/plugin-hashes', 0755, true );
19
+ @chmod( WP_CONTENT_DIR . '/bps-backup/plugin-hashes/', 0755 );
20
+ }
21
+
22
+ $plugin_hashes_dir = WP_CONTENT_DIR . '/bps-backup/plugin-hashes';
23
+
24
+ if ( ! is_dir( $plugin_hashes_dir ) ) {
25
+
26
+ fwrite( $handle, "Plugin Zip File Download Error: The $plugin_hashes_dir folder does not exist.\r\n" );
27
+ fwrite( $handle, "Troubleshooting: Check that the Ownership or folder permissions for the /bps-backup/ folder. The /bps-backup/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/ folder should be the same Owner as all of your other website folders.\r\n" );
28
+ fclose($handle);
29
+ return false;
30
+ }
31
+
32
+ $plugin_hash_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
33
+ $blank_hash_file = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/wp-hashes.php';
34
+
35
+ if ( ! file_exists($plugin_hash_file) ) {
36
+
37
+ if ( ! copy($blank_hash_file, $plugin_hash_file) ) {
38
+ fwrite( $handle, "Plugin Zip File Download Error: Unable to create the Plugin hash file: $plugin_hash_file\r\n" );
39
+ }
40
+ }
41
+
42
+ fwrite( $handle, "Plugin Zip File Download: Start Plugin zip file downloads.\r\n" );
43
+
44
+ // Note: $value['TextDomain'] is not reliable. Use $key instead.
45
+ $all_plugins = get_plugins();
46
+
47
+ $active_plugins_array = array();
48
+ $inactive_plugins_array = array();
49
+ $hello_dolly_plugin_array = array();
50
+
51
+ foreach ( $all_plugins as $key => $value ) {
52
+
53
+ if ( ! empty($key) ) {
54
+
55
+ $active_plugins = in_array( $key, apply_filters('active_plugins', get_option('active_plugins')));
56
+
57
+ if ( 1 == $active_plugins || is_plugin_active_for_network( $key ) ) {
58
+
59
+ $pos = strpos($key, '/');
60
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
61
+
62
+ if ( $pos !== false ) {
63
+
64
+ $plugin_name = strstr($key, '/', true);
65
+ $active_plugins_array[] = $plugin_name.'.'.$value['Version'];
66
+
67
+ } else {
68
+
69
+ if ( $dolly_pos !== false ) {
70
+
71
+ $hello_dolly_plugin_array[] = 'hello-dolly'.'.'.$value['Version'];
72
+ }
73
+ }
74
+
75
+ } else {
76
+
77
+ $pos = strpos($key, '/');
78
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
79
+
80
+ if ( $pos !== false ) {
81
+
82
+ $plugin_name = strstr($key, '/', true);
83
+ $inactive_plugins_array[] = $plugin_name.'.'.$value['Version'];
84
+
85
+ } else {
86
+
87
+ if ( $dolly_pos !== false ) {
88
+
89
+ $hello_dolly_plugin_array[] = 'hello-dolly'.'.'.$value['Version'];
90
+ }
91
+ }
92
+ }
93
+ }
94
+ }
95
+
96
+ $plugins_array_merged = array_merge($active_plugins_array, $inactive_plugins_array, $hello_dolly_plugin_array);
97
+
98
+ $bps_mscan_plugin_hash_version_check_array = array();
99
+ $bps_mscan_plugin_hash_paths_array = array();
100
+ $bps_mscan_plugin_hash_zip_file_array = array();
101
+
102
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
103
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
104
+ $tmp_file = '';
105
+ $plugin_no_zip_array = array();
106
+
107
+ foreach ( $plugins_array_merged as $key => $value ) {
108
+
109
+ // Plugins: https://downloads.wordpress.org/plugin/plugin-name.1.0.zip
110
+ $plugin_zip_file = $value . '.zip';
111
+ $local_zip_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/' . $plugin_zip_file;
112
+
113
+ $plugin_name = strstr($value, '.', true); // plugin-name
114
+ $plugin_version = strstr($value, '.'); // .1.0
115
+ $plugin_version_nodot = substr($plugin_version, 1); // 1.0
116
+
117
+ $bps_mscan_plugin_hash_version_check_array[$plugin_name] = $plugin_version_nodot;
118
+ $bps_mscan_plugin_hash_paths_array[$plugin_name][] = '';
119
+
120
+ // Check the WP Plugin Repo for plugins that do not exist in the Repo. ie premium/paid and custom plugins.
121
+ // Note: some plugins do not include the version # in the zip file name. Those plugins will not be downloaded.
122
+ $plugin_zip_file_url = 'https://downloads.wordpress.org/plugin/' . $plugin_zip_file;
123
+
124
+ $response = wp_remote_get( $plugin_zip_file_url );
125
+
126
+ if ( is_array( $response ) && ! is_wp_error( $response ) ) {
127
+
128
+ if ( $response['response']['code'] == '404' ) {
129
+
130
+ $value = preg_replace( '/\.\d(.*)/', "", $value );
131
+ $plugin_no_zip_array[] = $value;
132
+ }
133
+ }
134
+
135
+ @$bps_mscan_plugin_hash_version_check = isset($mscan_plugin_hash['bps_mscan_plugin_hash_version_check']) ? $mscan_plugin_hash['bps_mscan_plugin_hash_version_check']["$plugin_name"] : '';
136
+
137
+ // If the BPS DB option plugin version matches then don't download another zip file and just log a log entry.
138
+ // Note: Any plugins not in the WP Plugin Repository will be listed in the array for later use.
139
+ if ( $bps_mscan_plugin_hash_version_check == $plugin_version_nodot ) {
140
+
141
+ //fwrite( $handle, "Plugin Zip File Download: No new Plugin Zip files were downloaded.\r\n" );
142
+
143
+ } else {
144
+
145
+ // Extra Precaution: Don't download another zip file if it already exists.
146
+ if ( ! file_exists($local_zip_file) ) {
147
+
148
+ if ( file_exists($plugin_hash_file) ) {
149
+
150
+ $url = 'https://downloads.wordpress.org/plugin/' . $plugin_zip_file;
151
+ $tmp_file = download_url( $url, $timeout = 300 );
152
+
153
+ // Important: Do not use a return in this condition or all valid downloads will fail.
154
+ // This condition prevents a fatal error on WP_ERROR in PHP 8, which halts processing.
155
+ if ( is_wp_error( $tmp_file ) ) {
156
+
157
+ fwrite( $handle, "Plugin Zip File Download: WP_Error: Unable to download Plugin zip file: $plugin_zip_file from WordPress.org.\r\n" );
158
+
159
+ } else {
160
+
161
+ if ( ! copy( $tmp_file, $local_zip_file ) ) {
162
+ fwrite( $handle, "Plugin Zip File Download: Unable to download this Plugin zip file: $plugin_zip_file\r\n" );
163
+ } else {
164
+ fwrite( $handle, "Plugin Zip File Download: Zip file download successful: $plugin_zip_file\r\n" );
165
+ }
166
+
167
+ unlink( $tmp_file );
168
+ }
169
+ }
170
+ }
171
+ }
172
+
173
+ if ( file_exists( $local_zip_file ) ) {
174
+ $zip_file = 'yes';
175
+ } else {
176
+ $zip_file = 'no';
177
+ }
178
+
179
+ $bps_mscan_plugin_hash_zip_file_array[$plugin_name] = $zip_file;
180
+ }
181
+
182
+ // Update the non-downloadable plugin DB option on each scan run.
183
+ // display this db option in a the new report that will be created. ie these plugins are not downloadable from WP. premium/paid and custom plugins.
184
+ // Add this help info: use the plugin upload zip form to upload premium/paid or custom plugin zip files
185
+ // Any plugins that are uploaded using the plugin zip upload form will be automatically extracted, added to the plugin hash array and deleted on next MScan run.
186
+ $mscan_nodownload = get_option('bulletproof_security_options_mscan_nodownload');
187
+ $bps_theme_nodownload = isset( $mscan_nodownload['bps_theme_nodownload']) ? $mscan_nodownload['bps_theme_nodownload'] : '';
188
+
189
+ $mscan_nodownload_options = array(
190
+ 'bps_plugin_nodownload' => $plugin_no_zip_array,
191
+ 'bps_theme_nodownload' => $bps_theme_nodownload
192
+ );
193
+
194
+ foreach( $mscan_nodownload_options as $key => $value ) {
195
+ update_option('bulletproof_security_options_mscan_nodownload', $mscan_nodownload_options);
196
+ }
197
+
198
+ $mscan_plugin_hash_options_db = 'bulletproof_security_options_mscan_plugin_hash';
199
+
200
+ // I'm really only interested in preserving the Plugin hash paths and updating the plugin versions, everything else is an afterthought for future scaleability.
201
+ // On first run plugin hash paths are saved as an empty 2D array, plugin version numbers are saved and zip file yes or no value is saved.
202
+ // Plugin hash paths and hashes are created in the Plugin hash maker function.
203
+ if ( ! get_option( $mscan_plugin_hash_options_db ) ) {
204
+
205
+ $mscan_plugin_hash_options = array(
206
+ 'bps_mscan_plugin_hash_version_check' => $bps_mscan_plugin_hash_version_check_array,
207
+ 'bps_mscan_plugin_hash_paths' => $bps_mscan_plugin_hash_paths_array,
208
+ 'bps_mscan_plugin_hash_zip_file' => $bps_mscan_plugin_hash_zip_file_array
209
+ );
210
+
211
+ foreach( $mscan_plugin_hash_options as $key => $value ) {
212
+ update_option('bulletproof_security_options_mscan_plugin_hash', $mscan_plugin_hash_options);
213
+ }
214
+
215
+ } else {
216
+
217
+ // All future runs create new DB arrays used in the Plugin hash maker function to add or remove array values from the first run DB option.
218
+ delete_option('bulletproof_security_options_mscan_p_hash_new');
219
+
220
+ $mscan_plugin_hash_options_new = array(
221
+ 'bps_mscan_plugin_hash_version_check_new' => $bps_mscan_plugin_hash_version_check_array,
222
+ 'bps_mscan_plugin_hash_paths_new' => $bps_mscan_plugin_hash_paths_array,
223
+ 'bps_mscan_plugin_hash_zip_file_new' => $bps_mscan_plugin_hash_zip_file_array
224
+ );
225
+
226
+ foreach( $mscan_plugin_hash_options_new as $key => $value ) {
227
+ update_option('bulletproof_security_options_mscan_p_hash_new', $mscan_plugin_hash_options_new);
228
+ }
229
+
230
+ // Update any new Plugin versions in the first run db option
231
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
232
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
233
+
234
+ $plugin_hash_version_check_update_array = array();
235
+
236
+ foreach ( $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'] as $key => $value ) {
237
+
238
+ foreach ( $mscan_plugin_hash_new['bps_mscan_plugin_hash_version_check_new'] as $key_new => $value_new ) {
239
+
240
+ if ( $key == $key_new ) {
241
+
242
+ $plugin_hash_version_check_update_array[$key] = $value_new;
243
+ }
244
+ }
245
+ }
246
+
247
+ // Update any new Plugin versions & add/merge any new Plugins by into the first run db option
248
+ $array_diff_key_plugin_hash_version = array_diff_key($mscan_plugin_hash_new['bps_mscan_plugin_hash_version_check_new'], $mscan_plugin_hash['bps_mscan_plugin_hash_version_check']);
249
+ $array_merge_new_plugin_hash_version = array_merge($plugin_hash_version_check_update_array, $array_diff_key_plugin_hash_version);
250
+
251
+ $mscan_plugin_hash_options = array(
252
+ 'bps_mscan_plugin_hash_version_check' => $array_merge_new_plugin_hash_version,
253
+ 'bps_mscan_plugin_hash_paths' => $mscan_plugin_hash['bps_mscan_plugin_hash_paths'],
254
+ 'bps_mscan_plugin_hash_zip_file' => $mscan_plugin_hash['bps_mscan_plugin_hash_zip_file']
255
+ );
256
+
257
+ foreach( $mscan_plugin_hash_options as $key => $value ) {
258
+ update_option('bulletproof_security_options_mscan_plugin_hash', $mscan_plugin_hash_options);
259
+ }
260
+ }
261
+
262
+ $time_end = microtime( true );
263
+ $download_time = $time_end - $time_start;
264
+
265
+ $hours = (int)($download_time / 60 / 60);
266
+ $minutes = (int)($download_time / 60) - $hours * 60;
267
+ $seconds = (int)$download_time - $hours * 60 * 60 - $minutes * 60;
268
+ $hours_format = $hours == 0 ? "00" : $hours;
269
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
270
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
271
+
272
+ $download_time_log = 'Plugin Zip File Download Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
273
+
274
+ fwrite( $handle, "$download_time_log\r\n" );
275
+ fclose($handle);
276
+
277
+ return true;
278
+ }
279
+
280
+ // Extract the Plugin zip files.
281
+ // Note: The extracted plugin folders do not have a version number: /plugin-name/
282
+ // Both ZipArchive and PclZip have been tested.
283
+ function bpsPro_plugin_zip_extractor() {
284
+ global $wp_version;
285
+
286
+ $time_start = microtime( true );
287
+
288
+ $timeNow = time();
289
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
290
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
291
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
292
+
293
+ $handle = fopen( $mscan_log, 'a' );
294
+
295
+ $plugin_hash_folder = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/';
296
+ $zip_files = preg_grep('~\.(zip)$~', scandir($plugin_hash_folder));
297
+
298
+ if ( class_exists('ZipArchive') ) {
299
+
300
+ fwrite( $handle, "Plugin Zip File Extraction: Start ZipArchive zip file extraction.\r\n" );
301
+
302
+ foreach ( $zip_files as $zip_file ) {
303
+
304
+ $zip_file_path = $plugin_hash_folder . $zip_file;
305
+
306
+ $PluginZip = new ZipArchive;
307
+ $res = $PluginZip->open( $zip_file_path );
308
+
309
+ if ( $res === TRUE ) {
310
+
311
+ $PluginZip->extractTo( WP_CONTENT_DIR . '/bps-backup/plugin-hashes/' );
312
+ $PluginZip->close();
313
+
314
+ fwrite( $handle, "Plugin Zip File Extraction ZipArchive: Zip file extraction successful: $zip_file.\r\n" );
315
+ } else {
316
+ fwrite( $handle, "Plugin Zip File Extraction ZipArchive Error: Unable to extract this Plugin zip file: $zip_file.\r\n" );
317
+ }
318
+ }
319
+
320
+ $time_end = microtime( true );
321
+ $zip_extract_time = $time_end - $time_start;
322
+
323
+ $hours = (int)($zip_extract_time / 60 / 60);
324
+ $minutes = (int)($zip_extract_time / 60) - $hours * 60;
325
+ $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
326
+ $hours_format = $hours == 0 ? "00" : $hours;
327
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
328
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
329
+
330
+ $zip_extract_time_log = 'Plugin Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
331
+
332
+ fwrite( $handle, "$zip_extract_time_log\r\n" );
333
+ fclose($handle);
334
+
335
+ return true;
336
+
337
+ } else {
338
+
339
+ fwrite( $handle, "Plugin Zip File Extraction: Start PclZip zip file extraction.\r\n" );
340
+
341
+ define( 'PCLZIP_TEMPORARY_DIR', WP_CONTENT_DIR . '/bps-backup/plugin-hashes/' );
342
+ require_once( ABSPATH . 'wp-admin/includes/class-pclzip.php');
343
+
344
+ if ( ini_get( 'mbstring.func_overload' ) && function_exists( 'mb_internal_encoding' ) ) {
345
+ $previous_encoding = mb_internal_encoding();
346
+ mb_internal_encoding( 'ISO-8859-1' );
347
+ }
348
+
349
+ foreach ( $zip_files as $zip_file ) {
350
+
351
+ $zip_file_path = $plugin_hash_folder . $zip_file;
352
+
353
+ $archive = new PclZip( $zip_file_path );
354
+
355
+ if ( $archive->extract( PCLZIP_OPT_PATH, WP_CONTENT_DIR . '/bps-backup/plugin-hashes', PCLZIP_OPT_REMOVE_PATH, WP_CONTENT_DIR . '/bps-backup/plugin-hashes' ) ) {
356
+ fwrite( $handle, "Plugin Zip File Extraction PclZip: Zip file extracted successfully: $zip_file.\r\n" );
357
+ } else {
358
+ fwrite( $handle, "Plugin Zip File Extraction PclZip Error: Unable to unzip this Plugin zip file: $zip_file.\r\n" );
359
+ }
360
+ }
361
+
362
+ $time_end = microtime( true );
363
+ $zip_extract_time = $time_end - $time_start;
364
+
365
+ $hours = (int)($zip_extract_time / 60 / 60);
366
+ $minutes = (int)($zip_extract_time / 60) - $hours * 60;
367
+ $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
368
+ $hours_format = $hours == 0 ? "00" : $hours;
369
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
370
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
371
+
372
+ $zip_extract_time_log = 'Plugin Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
373
+
374
+ fwrite( $handle, "$zip_extract_time_log\r\n" );
375
+ fclose($handle);
376
+
377
+ return true;
378
+ }
379
+ }
380
+
381
+ // Creates an MD5 plugin file hash array.
382
+ // Cleanup: Deletes the plugin zip files and the extracted plugin folders.
383
+ function bpsPro_plugin_hash_maker() {
384
+ global $wp_version;
385
+
386
+ $time_start = microtime( true );
387
+
388
+ $timeNow = time();
389
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
390
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
391
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
392
+
393
+ $handle = fopen( $mscan_log, 'a' );
394
+
395
+ if ( ! is_array( spl_classes() ) ) {
396
+ fwrite( $handle, "Plugin MD5 File Hash Maker Error: The Standard PHP Library (SPL) is Not available/installed. Unable to create Plugin MD5 hash files.\r\n" );
397
+ fwrite( $handle, "Solution: Contact your web host and ask them to install the Standard PHP Library (SPL) on your server.\r\n" );
398
+ fclose($handle);
399
+
400
+ return false;
401
+ }
402
+
403
+ $plugin_hash_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
404
+
405
+ if ( ! file_exists( $plugin_hash_file ) ) {
406
+ fwrite( $handle, "Plugin MD5 File Hash Maker Error: The $plugin_hash_file file does not exist.\r\n" );
407
+ fwrite( $handle, "Troubleshooting: Check the Ownership or folder permissions for the /bps-backup/plugin-hashes/ folder. The /bps-backup/plugin-hashes/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/plugin-hashes/ folder should be the same Owner as all of your other website folders.\r\n" );
408
+ fclose($handle);
409
+
410
+ return false;
411
+ }
412
+
413
+ fwrite( $handle, "Plugin MD5 File Hash Maker: Start creating the plugin-hashes.php file.\r\n" );
414
+
415
+ $source = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/';
416
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
417
+
418
+ $plugin_dir_path_array = array();
419
+ $plugin_folder_name_array = array();
420
+
421
+ if ( is_dir($source) ) {
422
+ $iterator = new DirectoryIterator($source);
423
+
424
+ foreach ( $iterator as $files ) {
425
+ if ( $files->isDir() && ! $files->isDot() ) {
426
+
427
+ $plugin_dir_path_array[] = $files->getPathname();
428
+ }
429
+ }
430
+ }
431
+
432
+ // If the $plugin_dir_path_array array is empty there are no new plugin folders to process
433
+ if ( ! empty($plugin_dir_path_array) ) {
434
+
435
+ $str1 = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/';
436
+ $str2 = WP_CONTENT_DIR . '/bps-backup/plugin-hashes\\';
437
+ $str3 = WP_CONTENT_DIR . '\bps-backup\plugin-hashes\\';
438
+
439
+ $filePath = array();
440
+
441
+ foreach ( $plugin_dir_path_array as $plugin_dir_path ) {
442
+
443
+ $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($plugin_dir_path), RecursiveIteratorIterator::SELF_FIRST);
444
+
445
+ foreach ( $objects as $files ) {
446
+
447
+ if ( $files->isFile() ) {
448
+
449
+ $filePath[] = str_replace( array( $str1, $str2, $str3 ), "", $files->getPathname() ). '\' => \'' . md5_file($files->getPathname());
450
+ }
451
+ }
452
+ }
453
+
454
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
455
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
456
+
457
+ $plugin_name_key_array = array();
458
+
459
+ foreach ( $filePath as $key => $value ) {
460
+
461
+ $key_value = preg_replace( '/(\\\\.*|\/.*)/', "", $value);
462
+
463
+ // These must be below the $key_value variable above.
464
+ if ( preg_match( '/hello-dolly(.*)readme\.txt/', $value ) ) {
465
+ unset($value);
466
+ $value = ! isset($value) ? '' : $value; // PHP8 weirdness
467
+ }
468
+
469
+ if ( preg_match( '/hello-dolly(.*)hello\.php/', $value ) ) {
470
+ $value = preg_replace( '/.*hello\.php/', "hello.php", $value);
471
+ }
472
+
473
+ if ( ! empty($value) ) {
474
+ $plugin_name_key_array[$key_value][] = $value;
475
+ }
476
+ }
477
+ }
478
+
479
+ // Error Check: If any .php files exist in the plugin-hashes folder that are not the plugin-hashes.php file then the plugin zip file
480
+ // did not extract the plugin files into a plugin folder and instead extracted the files into the root plugin-hashes folder.
481
+ // Could be caused by an incorrect archive or if someone manually copies a plugin zip that does not extract into a plugin folder in the plugin-hashes folder.
482
+
483
+ // Important Note: The plugin zip file must extract the plugin zip file into a plugin folder: /plugin-name/
484
+ // in order for someone to manually copy premium and custom plugins into the /plugin-hashes/ folder to be iterated and added to the hash array.
485
+ // HALT script execution if any files exist in the /plugin-hashes/ folder that are not the plugin-hashes.php file.
486
+ // Update the MScan option setting to: 3 to get out of a looping situation with status 2.
487
+ // Use MScan Status: 3 and let the iframe js script update the status to 4 in case the estimated scan time is excessive.
488
+
489
+ $plugin_hash_folder = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/';
490
+ $plugin_files = preg_grep('~\.(php)$~', scandir($plugin_hash_folder));
491
+
492
+ foreach ( $plugin_files as $plugin_file ) {
493
+
494
+ if ( $plugin_file != 'plugin-hashes.php' ) {
495
+
496
+ fwrite( $handle, "Plugin MD5 File Hash Maker Error: Files exist in the $plugin_hash_folder that should not be there. If you copied plugin files into this folder then delete them. Only Plugin Zip files or extracted Plugin folders should be in this folder.\r\n" );
497
+
498
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
499
+
500
+ $MScan_status_db = array(
501
+ 'bps_mscan_time_start' => $MScan_status['bps_mscan_time_start'],
502
+ 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
503
+ 'bps_mscan_time_end' => $MScan_status['bps_mscan_time_end'],
504
+ 'bps_mscan_time_remaining' => $MScan_status['bps_mscan_time_remaining'],
505
+ 'bps_mscan_status' => '3',
506
+ 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
507
+ 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
508
+ 'bps_mscan_total_website_files' => '',
509
+ 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
510
+ 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
511
+ 'bps_mscan_total_image_files' => '',
512
+ 'bps_mscan_total_all_scannable_files' => 'Error: Files found in the plugin-hashes folder',
513
+ 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
514
+ 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
515
+ 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
516
+ 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
517
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
518
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
519
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
520
+ );
521
+
522
+ foreach( $MScan_status_db as $key => $value ) {
523
+ update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
524
+ }
525
+
526
+ return false;
527
+ }
528
+ }
529
+
530
+ $mscan_plugin_hash_options_db_new = 'bulletproof_security_options_mscan_p_hash_new';
531
+
532
+ // First Run
533
+ if ( ! get_option( $mscan_plugin_hash_options_db_new ) ) {
534
+
535
+ $mscan_plugin_hash_options = array(
536
+ 'bps_mscan_plugin_hash_version_check' => $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'],
537
+ 'bps_mscan_plugin_hash_paths' => $plugin_name_key_array,
538
+ 'bps_mscan_plugin_hash_zip_file' => $mscan_plugin_hash['bps_mscan_plugin_hash_zip_file']
539
+ );
540
+
541
+ foreach( $mscan_plugin_hash_options as $key => $value ) {
542
+ update_option('bulletproof_security_options_mscan_plugin_hash', $mscan_plugin_hash_options);
543
+ }
544
+
545
+ } else { // All future Runs.
546
+
547
+ if ( ! empty($plugin_dir_path_array) ) {
548
+
549
+ // Don't manually delete this option here for testing - will cause problems.
550
+ $mscan_plugin_hash_options = array(
551
+ 'bps_mscan_plugin_hash_version_check_new' => $mscan_plugin_hash_new['bps_mscan_plugin_hash_version_check_new'],
552
+ 'bps_mscan_plugin_hash_paths_new' => $plugin_name_key_array,
553
+ 'bps_mscan_plugin_hash_zip_file_new' => $mscan_plugin_hash_new['bps_mscan_plugin_hash_zip_file_new']
554
+ );
555
+
556
+ foreach( $mscan_plugin_hash_options as $key => $value ) {
557
+ update_option('bulletproof_security_options_mscan_p_hash_new', $mscan_plugin_hash_options);
558
+ }
559
+ }
560
+ }
561
+
562
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
563
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
564
+
565
+ // Note: $value['TextDomain'] is not reliable. Use $key instead.
566
+ $all_plugins = get_plugins();
567
+
568
+ $active_plugins_array = array();
569
+ $inactive_plugins_array = array();
570
+ $hello_dolly_plugin_array = array();
571
+
572
+ foreach ( $all_plugins as $key => $value ) {
573
+
574
+ if ( ! empty($key) ) {
575
+
576
+ $active_plugins = in_array( $key, apply_filters('active_plugins', get_option('active_plugins')));
577
+
578
+ if ( 1 == $active_plugins || is_plugin_active_for_network( $key ) ) {
579
+
580
+ $pos = strpos($key, '/');
581
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
582
+
583
+ if ( $pos !== false ) {
584
+
585
+ $plugin_name = strstr($key, '/', true);
586
+ $active_plugins_array[] = $plugin_name;
587
+
588
+ } else {
589
+
590
+ if ( $dolly_pos !== false ) {
591
+
592
+ $hello_dolly_plugin_array[] = 'hello-dolly';
593
+ }
594
+ }
595
+
596
+ } else {
597
+
598
+ $pos = strpos($key, '/');
599
+ $dolly_pos = strpos($value['Name'], 'Hello Dolly');
600
+
601
+ if ( $pos !== false ) {
602
+
603
+ $plugin_name = strstr($key, '/', true);
604
+ $inactive_plugins_array[] = $plugin_name;
605
+
606
+ } else {
607
+
608
+ if ( $dolly_pos !== false ) {
609
+
610
+ $hello_dolly_plugin_array[] = 'hello-dolly';
611
+ }
612
+ }
613
+ }
614
+ }
615
+ }
616
+
617
+ $installed_plugins_array_merged = array_merge($active_plugins_array, $inactive_plugins_array, $hello_dolly_plugin_array);
618
+
619
+ $mscan_plugin_hash_new_array_keys = array();
620
+
621
+ if ( get_option( 'bulletproof_security_options_mscan_p_hash_new' ) ) {
622
+
623
+ // Get the new hash array keys that have a value otherwise return an empty array of array keys.
624
+ foreach ( $mscan_plugin_hash_new['bps_mscan_plugin_hash_paths_new'] as $key => $value ) {
625
+
626
+ foreach ( $value as $inner_key => $inner_value ) {
627
+
628
+ if ( ! empty($inner_value) ) {
629
+ $mscan_plugin_hash_new_array_keys[] = $key;
630
+ }
631
+ }
632
+ }
633
+ }
634
+
635
+ $plugin_hash_removal_array = array();
636
+
637
+ foreach ( $mscan_plugin_hash['bps_mscan_plugin_hash_paths'] as $key => $value ) {
638
+
639
+ // Plugin Deleted/Removed:
640
+ // Remove deleted plugins from the First Run DB option array
641
+ if ( ! in_array( $key, $installed_plugins_array_merged ) ) {
642
+ unset($value);
643
+ }
644
+
645
+ // Plugin Updated:
646
+ // Remove plugin hashes (values) from the First Run DB option array ONLY if the key exists and the value is not empty in the new plugin hash array.
647
+ // The DB arrays will be merged at a later point. So this removes/unsets any matching keys in the first run array if the new hash array key matches
648
+ // AND the value is not empty.
649
+ // Important Note: The new hash array will ONLY contain the key and hashes for any new plugins and nothing else - no other default keys.
650
+ if ( in_array( $key, $mscan_plugin_hash_new_array_keys ) ) {
651
+ unset($value);
652
+ }
653
+
654
+ if ( ! empty($value) ) {
655
+ $plugin_hash_removal_array[$key] = $value;
656
+ }
657
+ }
658
+
659
+ $mscan_plugin_hash_options = array(
660
+ 'bps_mscan_plugin_hash_version_check' => $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'],
661
+ 'bps_mscan_plugin_hash_paths' => $plugin_hash_removal_array,
662
+ 'bps_mscan_plugin_hash_zip_file' => $mscan_plugin_hash['bps_mscan_plugin_hash_zip_file']
663
+ );
664
+
665
+ foreach( $mscan_plugin_hash_options as $key => $value ) {
666
+ update_option('bulletproof_security_options_mscan_plugin_hash', $mscan_plugin_hash_options);
667
+ }
668
+
669
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
670
+ $mscan_plugin_hash_new = get_option('bulletproof_security_options_mscan_p_hash_new');
671
+
672
+ if ( empty($mscan_plugin_hash_new_array_keys) ) {
673
+
674
+ $result = $mscan_plugin_hash['bps_mscan_plugin_hash_paths'];
675
+
676
+ } else {
677
+
678
+ $result = array_merge($mscan_plugin_hash_new['bps_mscan_plugin_hash_paths_new'], $mscan_plugin_hash['bps_mscan_plugin_hash_paths']);
679
+ }
680
+
681
+ $mscan_plugin_hash_options = array(
682
+ 'bps_mscan_plugin_hash_version_check' => $mscan_plugin_hash['bps_mscan_plugin_hash_version_check'],
683
+ 'bps_mscan_plugin_hash_paths' => $result,
684
+ 'bps_mscan_plugin_hash_zip_file' => $mscan_plugin_hash['bps_mscan_plugin_hash_zip_file']
685
+ );
686
+
687
+ foreach( $mscan_plugin_hash_options as $key => $value ) {
688
+ update_option('bulletproof_security_options_mscan_plugin_hash', $mscan_plugin_hash_options);
689
+ }
690
+
691
+ $mscan_plugin_hash = get_option('bulletproof_security_options_mscan_plugin_hash');
692
+ $final_result = $mscan_plugin_hash['bps_mscan_plugin_hash_paths'];
693
+
694
+ ## IMPORTANT!!! Do NOT sort the 2D array - very buggy.
695
+ /*
696
+ ksort($final_result);
697
+
698
+ foreach( $final_result as &$value ) {
699
+ ksort($value);
700
+ }
701
+ */
702
+
703
+ $mscan_plugin_hash_options_db = 'bulletproof_security_options_mscan_plugin_hash';
704
+
705
+ // Create the plugin hash file on first time scan & on future scans if new plugin hashes exist in the p_hash_new db array
706
+ // This condition is important to limit potentional parse and fatal php errors when parsing the plugin-hashes.php file in the MScan AJAX function.
707
+ if ( ! empty($mscan_plugin_hash_new_array_keys ) || ! get_option( 'bulletproof_security_options_mscan_p_hash_new' ) ) {
708
+
709
+ $plugin_hashes_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
710
+
711
+ $handleH = fopen( $plugin_hashes_file, 'wb' );
712
+ fwrite( $handleH, "<?php\n" );
713
+ fwrite( $handleH, "\$plugin_hashes = array(\n" );
714
+
715
+ foreach ( $final_result as $key => $value ) {
716
+
717
+ fwrite( $handleH, "## BEGIN " . $key . " ##" . "\n" );
718
+
719
+ foreach ( $value as $key2 => $value2 ) {
720
+
721
+ fwrite( $handleH, "'" . $value2 . "', " . "\n" );
722
+ }
723
+
724
+ fwrite( $handleH, "## END " . $key . " ##" . "\n" );
725
+ }
726
+
727
+ fwrite( $handleH, ");\n" );
728
+ fwrite( $handleH, "?>" );
729
+ fclose( $handleH );
730
+
731
+ fwrite( $handle, "Plugin MD5 File Hash Maker & Cleanup: plugin-hashes.php file created.\r\n" );
732
+ fwrite( $handle, "Plugin MD5 File Hash Maker & Cleanup: Start /bps-backup/plugin-hashes/ folder cleanup.\r\n" );
733
+
734
+ // Cleanup
735
+ $plugin_hash_folder = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/';
736
+ $plugin_hash_file = WP_CONTENT_DIR . '/bps-backup/plugin-hashes/plugin-hashes.php';
737
+
738
+ if ( is_dir($plugin_hash_folder) ) {
739
+
740
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($plugin_hash_folder), RecursiveIteratorIterator::CHILD_FIRST);
741
+
742
+ foreach ( $iterator as $file ) {
743
+
744
+ if ( $file->isFile() ) {
745
+
746
+ if ( $file->getFilename() != 'plugin-hashes.php' ) {
747
+ @unlink( $file->getRealPath() );
748
+ }
749
+
750
+ } else {
751
+
752
+ if ( $file->isDir() ) {
753
+ @rmdir( $file->getRealPath() );
754
+ }
755
+ }
756
+ }
757
+ }
758
+ }
759
+
760
+ $time_end = microtime( true );
761
+ $hash_maker_time = $time_end - $time_start;
762
+
763
+ $hours = (int)($hash_maker_time / 60 / 60);
764
+ $minutes = (int)($hash_maker_time / 60) - $hours * 60;
765
+ $seconds = (int)$hash_maker_time - $hours * 60 * 60 - $minutes * 60;
766
+ $hours_format = $hours == 0 ? "00" : $hours;
767
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
768
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
769
+
770
+ $hash_maker_time_log = 'Plugin MD5 File Hash Maker & Cleanup Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
771
+
772
+ if ( ! empty($mscan_plugin_hash_new_array_keys ) || ! get_option( 'bulletproof_security_options_mscan_p_hash_new' ) ) {
773
+ fwrite( $handle, "Plugin MD5 File Hash Maker & Cleanup: Plugin Zip files deleted.\r\n" );
774
+ fwrite( $handle, "Plugin MD5 File Hash Maker & Cleanup: Extracted Plugin folders deleted.\r\n" );
775
+ }
776
+
777
+ fwrite( $handle, "$hash_maker_time_log\r\n" );
778
+ fclose($handle);
779
+
780
+ return true;
781
+ }
782
+
783
+ ?>
includes/mscan-theme-hash-maker.php ADDED
@@ -0,0 +1,685 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Download the Theme zip file version based on the current Theme version installed.
3
+ // Ensure that the Theme zip file is not downloaded repeatedly due to an error, issue or problem.
4
+ function bpsPro_theme_zip_download($mstime) {
5
+ global $wp_version;
6
+
7
+ $time_start = microtime( true );
8
+
9
+ set_time_limit($mstime);
10
+ $timeNow = time();
11
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
12
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
13
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
14
+
15
+ $handle = fopen( $mscan_log, 'a' );
16
+
17
+ if ( ! is_dir( WP_CONTENT_DIR . '/bps-backup/theme-hashes' ) ) {
18
+ @mkdir( WP_CONTENT_DIR . '/bps-backup/theme-hashes', 0755, true );
19
+ @chmod( WP_CONTENT_DIR . '/bps-backup/theme-hashes/', 0755 );
20
+ }
21
+
22
+ $theme_hashes_dir = WP_CONTENT_DIR . '/bps-backup/theme-hashes';
23
+
24
+ if ( ! is_dir( $theme_hashes_dir ) ) {
25
+
26
+ fwrite( $handle, "Theme Zip File Download Error: The $theme_hashes_dir folder does not exist.\r\n" );
27
+ fwrite( $handle, "Troubleshooting: Check that the Ownership or folder permissions for the /bps-backup/ folder. The /bps-backup/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/ folder should be the same Owner as all of your other website folders.\r\n" );
28
+ fclose($handle);
29
+ return false;
30
+ }
31
+
32
+ $theme_hash_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
33
+ $blank_hash_file = WP_PLUGIN_DIR . '/bulletproof-security/admin/htaccess/wp-hashes.php';
34
+
35
+ if ( ! file_exists($theme_hash_file) ) {
36
+
37
+ if ( ! copy($blank_hash_file, $theme_hash_file) ) {
38
+ fwrite( $handle, "Theme Zip File Download Error: Unable to create the Theme hash file: $theme_hash_file\r\n" );
39
+ }
40
+ }
41
+
42
+ fwrite( $handle, "Theme Zip File Download: Start Theme zip file downloads.\r\n" );
43
+
44
+ $all_themes = wp_get_themes();
45
+ $all_themes_array = array();
46
+
47
+ foreach ( $all_themes as $key => $value ) {
48
+
49
+ if ( ! empty($key) ) {
50
+ $all_themes_array[] = $key . '.' . $value['Version'];
51
+ }
52
+ }
53
+
54
+ $bps_mscan_theme_hash_version_check_array = array();
55
+ $bps_mscan_theme_hash_paths_array = array();
56
+ $bps_mscan_theme_hash_zip_file_array = array();
57
+
58
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
59
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
60
+ $tmp_file = '';
61
+ $theme_no_zip_array = array();
62
+
63
+ foreach ( $all_themes_array as $key => $value ) {
64
+
65
+ // Themes: https://downloads.wordpress.org/theme/theme-name.1.0.zip
66
+ $theme_zip_file = $value . '.zip';
67
+ $local_zip_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/' . $theme_zip_file;
68
+
69
+ $theme_name = strstr($value, '.', true); // theme-name
70
+ $theme_version = strstr($value, '.'); // .1.0
71
+ $theme_version_nodot = substr($theme_version, 1); // 1.0
72
+
73
+ $bps_mscan_theme_hash_version_check_array[$theme_name] = $theme_version_nodot;
74
+ $bps_mscan_theme_hash_paths_array[$theme_name][] = '';
75
+
76
+ // Check the WP Theme Repo for themes that do not exist in the Repo. ie premium/paid and custom themes.
77
+ // Note: some themes do not include the version # in the zip file name. Those themes will not be downloaded.
78
+ $theme_zip_file_url = 'https://downloads.wordpress.org/theme/' . $theme_zip_file;
79
+
80
+ $response = wp_remote_get( $theme_zip_file_url );
81
+
82
+ if ( is_array( $response ) && ! is_wp_error( $response ) ) {
83
+
84
+ if ( $response['response']['code'] == '404' ) {
85
+
86
+ $value = preg_replace( '/\.\d(.*)/', "", $value );
87
+ $theme_no_zip_array[] = $value;
88
+ }
89
+ }
90
+
91
+ @$bps_mscan_theme_hash_version_check = isset($mscan_theme_hash['bps_mscan_theme_hash_version_check']) ? $mscan_theme_hash['bps_mscan_theme_hash_version_check']["$theme_name"] : '';
92
+
93
+ // If the BPS DB option theme version matches then don't download another zip file and just log a log entry.
94
+ // Note: Any themes not in the WP Theme Repository will be listed in the array for later use.
95
+ if ( $bps_mscan_theme_hash_version_check == $theme_version_nodot ) {
96
+
97
+ //fwrite( $handle, "Theme Zip File Download: No new Theme Zip files were downloaded.\r\n" );
98
+
99
+ } else {
100
+
101
+ // Extra Precaution: Don't download another zip file if it already exists.
102
+ if ( ! file_exists($local_zip_file) ) {
103
+
104
+ if ( file_exists($theme_hash_file) ) {
105
+
106
+ $url = 'https://downloads.wordpress.org/theme/' . $theme_zip_file;
107
+ $tmp_file = download_url( $url, $timeout = 300 );
108
+
109
+ // Important: Do not use a return in this condition or all valid downloads will fail.
110
+ // This condition prevents a fatal error on WP_ERROR in PHP 8, which halts processing.
111
+ if ( is_wp_error( $tmp_file ) ) {
112
+
113
+ fwrite( $handle, "Theme Zip File Download: WP_Error: Unable to download Theme zip file: $theme_zip_file from WordPress.org.\r\n" );
114
+
115
+ } else {
116
+
117
+ if ( ! copy( $tmp_file, $local_zip_file ) ) {
118
+ fwrite( $handle, "Theme Zip File Download: Unable to download this Plugin zip file: $theme_zip_file\r\n" );
119
+ } else {
120
+ fwrite( $handle, "Theme Zip File Download: Zip file download successful: $theme_zip_file\r\n" );
121
+ }
122
+
123
+ unlink( $tmp_file );
124
+ }
125
+ }
126
+ }
127
+ }
128
+
129
+ if ( file_exists( $local_zip_file ) ) {
130
+ $zip_file = 'yes';
131
+ } else {
132
+ $zip_file = 'no';
133
+ }
134
+
135
+ $bps_mscan_theme_hash_zip_file_array[$theme_name] = $zip_file;
136
+ }
137
+
138
+ // Update the non-downloadable theme DB option on each scan run.
139
+ // display this db option in a the new report that will be created. ie these themes are not downloadable from WP. premium/paid and custom themes.
140
+ // Add this help info: use the theme upload zip form to upload premium/paid or custom theme zip files
141
+ // Any themes that are uploaded using the theme zip upload form will be automatically extracted, added to the theme hash array and deleted on next MScan run.
142
+ $mscan_nodownload = get_option('bulletproof_security_options_mscan_nodownload');
143
+ $bps_plugin_nodownload = isset( $mscan_nodownload['bps_plugin_nodownload']) ? $mscan_nodownload['bps_plugin_nodownload'] : '';
144
+
145
+ $mscan_nodownload_options = array(
146
+ 'bps_plugin_nodownload' => $bps_plugin_nodownload,
147
+ 'bps_theme_nodownload' => $theme_no_zip_array
148
+ );
149
+
150
+ foreach( $mscan_nodownload_options as $key => $value ) {
151
+ update_option('bulletproof_security_options_mscan_nodownload', $mscan_nodownload_options);
152
+ }
153
+
154
+ $mscan_theme_hash_options_db = 'bulletproof_security_options_mscan_theme_hash';
155
+
156
+ // I'm really only interested in preserving the Theme hash paths and updating the theme versions, everything else is an afterthought for future scaleability.
157
+ // On first run theme hash paths are saved as an empty 2D array, theme version numbers are saved and zip file yes or no value is saved.
158
+ // Theme hash paths and hashes are created in the Theme hash maker function.
159
+ if ( ! get_option( $mscan_theme_hash_options_db ) ) {
160
+
161
+ $mscan_theme_hash_options = array(
162
+ 'bps_mscan_theme_hash_version_check' => $bps_mscan_theme_hash_version_check_array,
163
+ 'bps_mscan_theme_hash_paths' => $bps_mscan_theme_hash_paths_array,
164
+ 'bps_mscan_theme_hash_zip_file' => $bps_mscan_theme_hash_zip_file_array
165
+ );
166
+
167
+ foreach( $mscan_theme_hash_options as $key => $value ) {
168
+ update_option('bulletproof_security_options_mscan_theme_hash', $mscan_theme_hash_options);
169
+ }
170
+
171
+ } else {
172
+
173
+ // All future runs create new DB arrays used in the Theme hash maker function to add or remove array values from the first run DB option.
174
+ delete_option('bulletproof_security_options_mscan_t_hash_new');
175
+
176
+ $mscan_theme_hash_options_new = array(
177
+ 'bps_mscan_theme_hash_version_check_new' => $bps_mscan_theme_hash_version_check_array,
178
+ 'bps_mscan_theme_hash_paths_new' => $bps_mscan_theme_hash_paths_array,
179
+ 'bps_mscan_theme_hash_zip_file_new' => $bps_mscan_theme_hash_zip_file_array
180
+ );
181
+
182
+ foreach( $mscan_theme_hash_options_new as $key => $value ) {
183
+ update_option('bulletproof_security_options_mscan_t_hash_new', $mscan_theme_hash_options_new);
184
+ }
185
+
186
+ // Update any new Theme versions in the first run db option
187
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
188
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
189
+
190
+ $theme_hash_version_check_update_array = array();
191
+
192
+ foreach ( $mscan_theme_hash['bps_mscan_theme_hash_version_check'] as $key => $value ) {
193
+
194
+ foreach ( $mscan_theme_hash_new['bps_mscan_theme_hash_version_check_new'] as $key_new => $value_new ) {
195
+
196
+ if ( $key == $key_new ) {
197
+
198
+ $theme_hash_version_check_update_array[$key] = $value_new;
199
+ }
200
+ }
201
+ }
202
+
203
+ // Update any new Theme versions & add/merge any new Themes by into the first run db option
204
+ $array_diff_key_theme_hash_version = array_diff_key($mscan_theme_hash_new['bps_mscan_theme_hash_version_check_new'], $mscan_theme_hash['bps_mscan_theme_hash_version_check']);
205
+ $array_merge_new_theme_hash_version = array_merge($theme_hash_version_check_update_array, $array_diff_key_theme_hash_version);
206
+
207
+ $mscan_theme_hash_options = array(
208
+ 'bps_mscan_theme_hash_version_check' => $array_merge_new_theme_hash_version,
209
+ 'bps_mscan_theme_hash_paths' => $mscan_theme_hash['bps_mscan_theme_hash_paths'],
210
+ 'bps_mscan_theme_hash_zip_file' => $mscan_theme_hash['bps_mscan_theme_hash_zip_file']
211
+ );
212
+
213
+ foreach( $mscan_theme_hash_options as $key => $value ) {
214
+ update_option('bulletproof_security_options_mscan_theme_hash', $mscan_theme_hash_options);
215
+ }
216
+ }
217
+
218
+ $time_end = microtime( true );
219
+ $download_time = $time_end - $time_start;
220
+
221
+ $hours = (int)($download_time / 60 / 60);
222
+ $minutes = (int)($download_time / 60) - $hours * 60;
223
+ $seconds = (int)$download_time - $hours * 60 * 60 - $minutes * 60;
224
+ $hours_format = $hours == 0 ? "00" : $hours;
225
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
226
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
227
+
228
+ $download_time_log = 'Theme Zip File Download Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
229
+
230
+ fwrite( $handle, "$download_time_log\r\n" );
231
+ fclose($handle);
232
+
233
+ return true;
234
+ }
235
+
236
+ // Extract the Theme zip files.
237
+ // Note: The extracted Theme folders do not have a version number: /theme-name/
238
+ // Both ZipArchive and PclZip have been tested.
239
+ function bpsPro_theme_zip_extractor() {
240
+ global $wp_version;
241
+
242
+ $time_start = microtime( true );
243
+
244
+ $timeNow = time();
245
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
246
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
247
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
248
+
249
+ $handle = fopen( $mscan_log, 'a' );
250
+
251
+ $theme_hash_folder = WP_CONTENT_DIR . '/bps-backup/theme-hashes/';
252
+ $zip_files = preg_grep('~\.(zip)$~', scandir($theme_hash_folder));
253
+
254
+ if ( class_exists('ZipArchive') ) {
255
+
256
+ fwrite( $handle, "Theme Zip File Extraction: Start ZipArchive zip file extraction.\r\n" );
257
+
258
+ foreach ( $zip_files as $zip_file ) {
259
+
260
+ $zip_file_path = $theme_hash_folder . $zip_file;
261
+
262
+ $ThemeZip = new ZipArchive;
263
+ $res = $ThemeZip->open( $zip_file_path );
264
+
265
+ if ( $res === TRUE ) {
266
+
267
+ $ThemeZip->extractTo( WP_CONTENT_DIR . '/bps-backup/theme-hashes/' );
268
+ $ThemeZip->close();
269
+
270
+ fwrite( $handle, "Theme Zip File Extraction ZipArchive: Zip file extraction successful: $zip_file.\r\n" );
271
+ } else {
272
+ fwrite( $handle, "Theme Zip File Extraction ZipArchive Error: Unable to extract this Theme zip file: $zip_file.\r\n" );
273
+ }
274
+ }
275
+
276
+ $time_end = microtime( true );
277
+ $zip_extract_time = $time_end - $time_start;
278
+
279
+ $hours = (int)($zip_extract_time / 60 / 60);
280
+ $minutes = (int)($zip_extract_time / 60) - $hours * 60;
281
+ $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
282
+ $hours_format = $hours == 0 ? "00" : $hours;
283
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
284
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
285
+
286
+ $zip_extract_time_log = 'Theme Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
287
+
288
+ fwrite( $handle, "$zip_extract_time_log\r\n" );
289
+ fclose($handle);
290
+
291
+ return true;
292
+
293
+ } else {
294
+
295
+ fwrite( $handle, "Theme Zip File Extraction: Start PclZip zip file extraction.\r\n" );
296
+
297
+ define( 'PCLZIP_TEMPORARY_DIR', WP_CONTENT_DIR . '/bps-backup/theme-hashes/' );
298
+ require_once( ABSPATH . 'wp-admin/includes/class-pclzip.php');
299
+
300
+ if ( ini_get( 'mbstring.func_overload' ) && function_exists( 'mb_internal_encoding' ) ) {
301
+ $previous_encoding = mb_internal_encoding();
302
+ mb_internal_encoding( 'ISO-8859-1' );
303
+ }
304
+
305
+ foreach ( $zip_files as $zip_file ) {
306
+
307
+ $zip_file_path = $theme_hash_folder . $zip_file;
308
+
309
+ $archive = new PclZip( $zip_file_path );
310
+
311
+ if ( $archive->extract( PCLZIP_OPT_PATH, WP_CONTENT_DIR . '/bps-backup/theme-hashes', PCLZIP_OPT_REMOVE_PATH, WP_CONTENT_DIR . '/bps-backup/theme-hashes' ) ) {
312
+ fwrite( $handle, "Theme Zip File Extraction PclZip: Zip file extracted successfully: $zip_file.\r\n" );
313
+ } else {
314
+ fwrite( $handle, "Theme Zip File Extraction PclZip Error: Unable to unzip this Theme zip file: $zip_file.\r\n" );
315
+ }
316
+ }
317
+
318
+ $time_end = microtime( true );
319
+ $zip_extract_time = $time_end - $time_start;
320
+
321
+ $hours = (int)($zip_extract_time / 60 / 60);
322
+ $minutes = (int)($zip_extract_time / 60) - $hours * 60;
323
+ $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
324
+ $hours_format = $hours == 0 ? "00" : $hours;
325
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
326
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
327
+
328
+ $zip_extract_time_log = 'Theme Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
329
+
330
+ fwrite( $handle, "$zip_extract_time_log\r\n" );
331
+ fclose($handle);
332
+
333
+ return true;
334
+ }
335
+ }
336
+
337
+ // Creates an MD5 theme file hash array.
338
+ // Cleanup: Deletes the theme zip files and the extracted theme folders.
339
+ function bpsPro_theme_hash_maker() {
340
+ global $wp_version;
341
+
342
+ $time_start = microtime( true );
343
+
344
+ $timeNow = time();
345
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
346
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
347
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
348
+
349
+ $handle = fopen( $mscan_log, 'a' );
350
+
351
+ if ( ! is_array( spl_classes() ) ) {
352
+ fwrite( $handle, "Theme MD5 File Hash Maker Error: The Standard PHP Library (SPL) is Not available/installed. Unable to create Theme MD5 hash file.\r\n" );
353
+ fwrite( $handle, "Solution: Contact your web host and ask them to install the Standard PHP Library (SPL) on your server.\r\n" );
354
+ fclose($handle);
355
+
356
+ return false;
357
+ }
358
+
359
+ $theme_hash_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
360
+
361
+ if ( ! file_exists( $theme_hash_file ) ) {
362
+ fwrite( $handle, "Theme MD5 File Hash Maker Error: The $theme_hash_file file does not exist.\r\n" );
363
+ fwrite( $handle, "Troubleshooting: Check the Ownership or folder permissions for the /bps-backup/theme-hashes/ folder. The /bps-backup/theme-hashes/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/theme-hashes/ folder should be the same Owner as all of your other website folders.\r\n" );
364
+ fclose($handle);
365
+
366
+ return false;
367
+ }
368
+
369
+ fwrite( $handle, "Theme MD5 File Hash Maker: Start creating the theme-hashes.php file.\r\n" );
370
+
371
+ $source = WP_CONTENT_DIR . '/bps-backup/theme-hashes/';
372
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
373
+
374
+ $theme_dir_path_array = array();
375
+ $theme_folder_name_array = array();
376
+
377
+ if ( is_dir($source) ) {
378
+ $iterator = new DirectoryIterator($source);
379
+
380
+ foreach ( $iterator as $files ) {
381
+ if ( $files->isDir() && ! $files->isDot() ) {
382
+
383
+ $theme_dir_path_array[] = $files->getPathname();
384
+ }
385
+ }
386
+ }
387
+
388
+ // If the $theme_dir_path_array array is empty there are no new theme folders to process
389
+ if ( ! empty($theme_dir_path_array) ) {
390
+
391
+ $str1 = WP_CONTENT_DIR . '/bps-backup/theme-hashes/';
392
+ $str2 = WP_CONTENT_DIR . '/bps-backup/theme-hashes\\';
393
+ $str3 = WP_CONTENT_DIR . '\bps-backup\theme-hashes\\';
394
+
395
+ $filePath = array();
396
+
397
+ foreach ( $theme_dir_path_array as $theme_dir_path ) {
398
+
399
+ $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($theme_dir_path), RecursiveIteratorIterator::SELF_FIRST);
400
+
401
+ foreach ( $objects as $files ) {
402
+
403
+ if ( $files->isFile() ) {
404
+
405
+ $filePath[] = str_replace( array( $str1, $str2, $str3 ), "", $files->getPathname() ). '\' => \'' . md5_file($files->getPathname());
406
+ }
407
+ }
408
+ }
409
+
410
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
411
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
412
+
413
+ $theme_name_key_array = array();
414
+
415
+ foreach ( $filePath as $key => $value ) {
416
+
417
+ $key_value = preg_replace( '/(\\\\.*|\/.*)/', "", $value);
418
+
419
+ if ( ! empty($value) ) {
420
+ $theme_name_key_array[$key_value][] = $value;
421
+ }
422
+ }
423
+ }
424
+
425
+ // Error Check: If any .php files exist in the theme-hashes folder that are not the theme-hashes.php file then the theme zip file
426
+ // did not extract the theme files into a theme folder and instead extracted the files into the root theme-hashes folder.
427
+ // Could be caused by an incorrect archive or if someone manually copies a theme zip that does not extract into a theme folder in the theme-hashes folder.
428
+
429
+ // Important Note: The theme zip file must extract the theme zip file into a theme folder: /theme-name/
430
+ // in order for someone to manually copy premium and custom themes into the /theme-hashes/ folder to be iterated and added to the hash array.
431
+ // HALT script execution if any files exist in the /theme-hashes/ folder that are not the theme-hashes.php file.
432
+ // Update the MScan option setting to: 3 to get out of a looping situation with status 2.
433
+ // Use MScan Status: 3 and let the iframe js script update the status to 4 in case the estimated scan time is excessive.
434
+
435
+ $theme_hash_folder = WP_CONTENT_DIR . '/bps-backup/theme-hashes/';
436
+ $theme_files = preg_grep('~\.(php)$~', scandir($theme_hash_folder));
437
+
438
+ foreach ( $theme_files as $theme_file ) {
439
+
440
+ if ( $theme_file != 'theme-hashes.php' ) {
441
+
442
+ fwrite( $handle, "Theme MD5 File Hash Maker Error: Files exist in the $theme_hash_folder that should not be there. If you copied theme files into this folder then delete them. Only Theme Zip files or extracted Theme folders should be in this folder.\r\n" );
443
+
444
+ $MScan_status = get_option('bulletproof_security_options_MScan_status');
445
+
446
+ $MScan_status_db = array(
447
+ 'bps_mscan_time_start' => $MScan_status['bps_mscan_time_start'],
448
+ 'bps_mscan_time_stop' => $MScan_status['bps_mscan_time_stop'],
449
+ 'bps_mscan_time_end' => $MScan_status['bps_mscan_time_end'],
450
+ 'bps_mscan_time_remaining' => $MScan_status['bps_mscan_time_remaining'],
451
+ 'bps_mscan_status' => '3',
452
+ 'bps_mscan_last_scan_timestamp' => $MScan_status['bps_mscan_last_scan_timestamp'],
453
+ 'bps_mscan_total_time' => $MScan_status['bps_mscan_total_time'],
454
+ 'bps_mscan_total_website_files' => '',
455
+ 'bps_mscan_total_wp_core_files' => $MScan_status['bps_mscan_total_wp_core_files'],
456
+ 'bps_mscan_total_non_image_files' => $MScan_status['bps_mscan_total_non_image_files'],
457
+ 'bps_mscan_total_image_files' => '',
458
+ 'bps_mscan_total_all_scannable_files' => 'Error: Files found in the theme-hashes folder',
459
+ 'bps_mscan_total_skipped_files' => $MScan_status['bps_mscan_total_skipped_files'],
460
+ 'bps_mscan_total_suspect_files' => $MScan_status['bps_mscan_total_suspect_files'],
461
+ 'bps_mscan_suspect_skipped_files' => $MScan_status['bps_mscan_suspect_skipped_files'],
462
+ 'bps_mscan_total_suspect_db' => $MScan_status['bps_mscan_total_suspect_db'],
463
+ 'bps_mscan_total_ignored_files' => $MScan_status['bps_mscan_total_ignored_files'],
464
+ 'bps_mscan_total_plugin_files' => $MScan_status['bps_mscan_total_plugin_files'],
465
+ 'bps_mscan_total_theme_files' => $MScan_status['bps_mscan_total_theme_files']
466
+ );
467
+
468
+ foreach( $MScan_status_db as $key => $value ) {
469
+ update_option('bulletproof_security_options_MScan_status', $MScan_status_db);
470
+ }
471
+
472
+ return false;
473
+ }
474
+ }
475
+
476
+ $mscan_theme_hash_options_db_new = 'bulletproof_security_options_mscan_t_hash_new';
477
+
478
+ // First Run
479
+ if ( ! get_option( $mscan_theme_hash_options_db_new ) ) {
480
+
481
+ $mscan_theme_hash_options = array(
482
+ 'bps_mscan_theme_hash_version_check' => $mscan_theme_hash['bps_mscan_theme_hash_version_check'],
483
+ 'bps_mscan_theme_hash_paths' => $theme_name_key_array,
484
+ 'bps_mscan_theme_hash_zip_file' => $mscan_theme_hash['bps_mscan_theme_hash_zip_file']
485
+ );
486
+
487
+ foreach( $mscan_theme_hash_options as $key => $value ) {
488
+ update_option('bulletproof_security_options_mscan_theme_hash', $mscan_theme_hash_options);
489
+ }
490
+
491
+ } else { // All future Runs.
492
+
493
+ if ( ! empty($theme_dir_path_array) ) {
494
+
495
+ // Don't manually delete this option for testing - will cause problems.
496
+ $mscan_theme_hash_options = array(
497
+ 'bps_mscan_theme_hash_version_check_new' => $mscan_theme_hash_new['bps_mscan_theme_hash_version_check_new'],
498
+ 'bps_mscan_theme_hash_paths_new' => $theme_name_key_array,
499
+ 'bps_mscan_theme_hash_zip_file_new' => $mscan_theme_hash_new['bps_mscan_theme_hash_zip_file_new']
500
+ );
501
+
502
+ foreach( $mscan_theme_hash_options as $key => $value ) {
503
+ update_option('bulletproof_security_options_mscan_t_hash_new', $mscan_theme_hash_options);
504
+ }
505
+ }
506
+ }
507
+
508
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
509
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
510
+
511
+ $all_themes = wp_get_themes();
512
+ $all_themes_array = array();
513
+
514
+ foreach ( $all_themes as $key => $value ) {
515
+
516
+ if ( ! empty($key) ) {
517
+ $all_themes_array[] = $key;
518
+ }
519
+ }
520
+
521
+ $mscan_theme_hash_new_array_keys = array();
522
+
523
+ if ( get_option( 'bulletproof_security_options_mscan_t_hash_new' ) ) {
524
+
525
+ // Get the new hash array keys that have a value otherwise return an empty array of array keys.
526
+ foreach ( $mscan_theme_hash_new['bps_mscan_theme_hash_paths_new'] as $key => $value ) {
527
+
528
+ foreach ( $value as $inner_key => $inner_value ) {
529
+
530
+ if ( ! empty($inner_value) ) {
531
+ $mscan_theme_hash_new_array_keys[] = $key;
532
+ }
533
+ }
534
+ }
535
+ }
536
+
537
+ $theme_hash_removal_array = array();
538
+
539
+ foreach ( $mscan_theme_hash['bps_mscan_theme_hash_paths'] as $key => $value ) {
540
+
541
+ // Theme Deleted/Removed:
542
+ // Remove deleted themes from the First Run DB option array
543
+ if ( ! in_array( $key, $all_themes_array ) ) {
544
+ unset($value);
545
+ }
546
+
547
+ // Theme Updated:
548
+ // Remove theme hashes (values) from the First Run DB option array ONLY if the key exists and the value is not empty in the new theme hash array.
549
+ // The DB arrays will be merged at a later point. So this removes/unsets any matching keys in the first run array if the new hash array key matches
550
+ // AND the value is not empty.
551
+ // Important Note: The new hash array will ONLY contain the key and hashes for any new themes and nothing else - no other default keys.
552
+ if ( in_array( $key, $mscan_theme_hash_new_array_keys ) ) {
553
+ unset($value);
554
+ }
555
+
556
+ if ( ! empty($value) ) {
557
+ $theme_hash_removal_array[$key] = $value;
558
+ }
559
+ }
560
+
561
+ $mscan_theme_hash_options = array(
562
+ 'bps_mscan_theme_hash_version_check' => $mscan_theme_hash['bps_mscan_theme_hash_version_check'],
563
+ 'bps_mscan_theme_hash_paths' => $theme_hash_removal_array,
564
+ 'bps_mscan_theme_hash_zip_file' => $mscan_theme_hash['bps_mscan_theme_hash_zip_file']
565
+ );
566
+
567
+ foreach( $mscan_theme_hash_options as $key => $value ) {
568
+ update_option('bulletproof_security_options_mscan_theme_hash', $mscan_theme_hash_options);
569
+ }
570
+
571
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
572
+ $mscan_theme_hash_new = get_option('bulletproof_security_options_mscan_t_hash_new');
573
+
574
+ if ( empty($mscan_theme_hash_new_array_keys) ) {
575
+
576
+ $result = $mscan_theme_hash['bps_mscan_theme_hash_paths'];
577
+
578
+ } else {
579
+
580
+ $result = array_merge($mscan_theme_hash_new['bps_mscan_theme_hash_paths_new'], $mscan_theme_hash['bps_mscan_theme_hash_paths']);
581
+ }
582
+
583
+ $mscan_theme_hash_options = array(
584
+ 'bps_mscan_theme_hash_version_check' => $mscan_theme_hash['bps_mscan_theme_hash_version_check'],
585
+ 'bps_mscan_theme_hash_paths' => $result,
586
+ 'bps_mscan_theme_hash_zip_file' => $mscan_theme_hash['bps_mscan_theme_hash_zip_file']
587
+ );
588
+
589
+ foreach( $mscan_theme_hash_options as $key => $value ) {
590
+ update_option('bulletproof_security_options_mscan_theme_hash', $mscan_theme_hash_options);
591
+ }
592
+
593
+ $mscan_theme_hash = get_option('bulletproof_security_options_mscan_theme_hash');
594
+ $final_result = $mscan_theme_hash['bps_mscan_theme_hash_paths'];
595
+
596
+ ## IMPORTANT!!! Do NOT sort the 2D array - very buggy.
597
+ /*
598
+ ksort($final_result);
599
+
600
+ foreach( $final_result as &$value ) {
601
+ ksort($value);
602
+ }
603
+ */
604
+
605
+ $mscan_theme_hash_options_db = 'bulletproof_security_options_mscan_theme_hash';
606
+
607
+ // Create the theme hash file on first time scan & on future scans if new theme hashes exist in the t_hash_new db array
608
+ // This condition is important to limit potentional parse and fatal php errors when parsing the theme-hashes.php file in the MScan AJAX function.
609
+ if ( ! empty($mscan_theme_hash_new_array_keys ) || ! get_option( 'bulletproof_security_options_mscan_t_hash_new' ) ) {
610
+
611
+ $theme_hashes_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
612
+
613
+ $handleH = fopen( $theme_hashes_file, 'wb' );
614
+ fwrite( $handleH, "<?php\n" );
615
+ fwrite( $handleH, "\$theme_hashes = array(\n" );
616
+
617
+ foreach ( $final_result as $key => $value ) {
618
+
619
+ fwrite( $handleH, "## BEGIN " . $key . " ##" . "\n" );
620
+
621
+ foreach ( $value as $key2 => $value2 ) {
622
+
623
+ fwrite( $handleH, "'" . $value2 . "', " . "\n" );
624
+ }
625
+
626
+ fwrite( $handleH, "## END " . $key . " ##" . "\n" );
627
+ }
628
+
629
+ fwrite( $handleH, ");\n" );
630
+ fwrite( $handleH, "?>" );
631
+ fclose( $handleH );
632
+
633
+ fwrite( $handle, "Theme MD5 File Hash Maker & Cleanup: theme-hashes.php file created.\r\n" );
634
+ fwrite( $handle, "Theme MD5 File Hash Maker & Cleanup: Start /bps-backup/theme-hashes/ folder cleanup.\r\n" );
635
+
636
+ // Cleanup
637
+ $theme_hash_folder = WP_CONTENT_DIR . '/bps-backup/theme-hashes/';
638
+ $theme_hash_file = WP_CONTENT_DIR . '/bps-backup/theme-hashes/theme-hashes.php';
639
+
640
+ if ( is_dir($theme_hash_folder) ) {
641
+
642
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($theme_hash_folder), RecursiveIteratorIterator::CHILD_FIRST);
643
+
644
+ foreach ( $iterator as $file ) {
645
+
646
+ if ( $file->isFile() ) {
647
+
648
+ if ( $file->getFilename() != 'theme-hashes.php' ) {
649
+ @unlink( $file->getRealPath() );
650
+ }
651
+
652
+ } else {
653
+
654
+ if ( $file->isDir() ) {
655
+ @rmdir( $file->getRealPath() );
656
+ }
657
+ }
658
+ }
659
+ }
660
+ }
661
+
662
+ $time_end = microtime( true );
663
+ $hash_maker_time = $time_end - $time_start;
664
+
665
+ $hours = (int)($hash_maker_time / 60 / 60);
666
+ $minutes = (int)($hash_maker_time / 60) - $hours * 60;
667
+ $seconds = (int)$hash_maker_time - $hours * 60 * 60 - $minutes * 60;
668
+ $hours_format = $hours == 0 ? "00" : $hours;
669
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
670
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
671
+
672
+ $hash_maker_time_log = 'Theme MD5 File Hash Maker & Cleanup Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
673
+
674
+ if ( ! empty($mscan_theme_hash_new_array_keys ) || ! get_option( 'bulletproof_security_options_mscan_t_hash_new' ) ) {
675
+ fwrite( $handle, "Theme MD5 File Hash Maker & Cleanup: Theme Zip files deleted.\r\n" );
676
+ fwrite( $handle, "Theme MD5 File Hash Maker & Cleanup: Extracted Theme folders deleted.\r\n" );
677
+ }
678
+
679
+ fwrite( $handle, "$hash_maker_time_log\r\n" );
680
+ fclose($handle);
681
+
682
+ return true;
683
+ }
684
+
685
+ ?>
includes/mscan-wp-core-hash-maker.php ADDED
@@ -0,0 +1,335 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // Download the WordPress zip file version based on the current WP version installed.
3
+ // Ensure that the WP zip file is not downloaded repeatedly due to an error, issue or problem.
4
+ ## 13.8: Removed cURL GET code and replaced with simple fopen code. It is unnecessary to use the WP HTTP API for something as simple as a zip file download.
5
+ ## 13.9: changed fopen code to download_url() function due to problems with allow_url_fopen being turned off.
6
+ function bpsPro_wp_zip_download($mstime) {
7
+ global $wp_version;
8
+
9
+ $time_start = microtime( true );
10
+
11
+ set_time_limit($mstime);
12
+ $timeNow = time();
13
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
14
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
15
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
16
+
17
+ $handle = fopen( $mscan_log, 'a' );
18
+
19
+ $wp_hashes_dir = WP_CONTENT_DIR . '/bps-backup/wp-hashes';
20
+
21
+ if ( ! is_dir( $wp_hashes_dir ) ) {
22
+
23
+ fwrite( $handle, "WP Zip File Download Error: The $wp_hashes_dir folder does not exist.\r\n" );
24
+ fwrite( $handle, "Troubleshooting: Check that the Ownership or folder permissions for the /bps-backup/ folder. The /bps-backup/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/ folder should be the same Owner as all of your other website folders.\r\n" );
25
+ fclose($handle);
26
+
27
+ return false;
28
+ }
29
+
30
+ $wp_zip_file = 'wordpress-'. $wp_version . '.zip';
31
+ $local_zip_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/' . $wp_zip_file;
32
+
33
+ if ( file_exists($local_zip_file) ) {
34
+ fwrite( $handle, "WP Zip File Download: The $wp_zip_file already exists and was not downloaded again.\r\n" );
35
+ fclose($handle);
36
+
37
+ return true;
38
+ }
39
+
40
+ $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
41
+
42
+ if ( file_exists($wp_hashes_file) ) {
43
+ $check_string = file_get_contents($wp_hashes_file);
44
+
45
+ if ( strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
46
+ fwrite( $handle, "WP Zip File Download: The wp-hashes.php file already exists for WordPress $wp_version. The $wp_zip_file was not downloaded again.\r\n" );
47
+ fclose($handle);
48
+
49
+ return true;
50
+ }
51
+ }
52
+
53
+ fwrite( $handle, "WP Zip File Download: Start $wp_zip_file zip file download.\r\n" );
54
+
55
+ $url = 'https://wordpress.org/latest.zip';
56
+ $tmp_file = download_url( $url, $timeout = 300 );
57
+
58
+ if ( ! copy( $tmp_file, $local_zip_file ) ) {
59
+ fwrite( $handle, "WP Zip File Download Error: Unable to download the WordPress zip file from $url\r\n" );
60
+ fwrite( $handle, "Manual Solution: You will need to manually download the WordPress zip file to your computer, unzip it and then use FTP and upload the unzipped /wordpress/ folder to this BPS folder: $wp_hashes_dir\r\n" );
61
+ }
62
+
63
+ unlink( $tmp_file );
64
+
65
+ $time_end = microtime( true );
66
+ $download_time = $time_end - $time_start;
67
+
68
+ $hours = (int)($download_time / 60 / 60);
69
+ $minutes = (int)($download_time / 60) - $hours * 60;
70
+ $seconds = (int)$download_time - $hours * 60 * 60 - $minutes * 60;
71
+ $hours_format = $hours == 0 ? "00" : $hours;
72
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
73
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
74
+
75
+ $download_time_log = 'WP Zip File Download Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
76
+
77
+ fwrite( $handle, "$download_time_log\r\n" );
78
+ fclose($handle);
79
+
80
+ return true;
81
+ }
82
+
83
+ // Extract the downloaded WordPress zip file.
84
+ // The extracted WordPress folder name is: /wordpress/
85
+ function bpsPro_wp_zip_extractor() {
86
+ global $wp_version;
87
+
88
+ $time_start = microtime( true );
89
+
90
+ $timeNow = time();
91
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
92
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
93
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
94
+
95
+ $handle = fopen( $mscan_log, 'a' );
96
+
97
+ $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
98
+
99
+ if ( file_exists($wp_hashes_file) ) {
100
+ $check_string = file_get_contents($wp_hashes_file);
101
+
102
+ if ( strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
103
+ fwrite( $handle, "WP Zip File Extraction: The wp-hashes.php file already exists for WordPress $wp_version. The wordpress-$wp_version.zip file does not need to be extracted.\r\n" );
104
+ fclose($handle);
105
+
106
+ return true;
107
+ }
108
+ }
109
+
110
+ $wp_folder = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress';
111
+ $wp_hashes_dir = WP_CONTENT_DIR . '/bps-backup/wp-hashes';
112
+ $wp_zip_file = 'wordpress-'. $wp_version . '.zip';
113
+ $local_zip_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/' . $wp_zip_file;
114
+
115
+ if ( class_exists('ZipArchive') ) {
116
+
117
+ fwrite( $handle, "WP Zip File Extraction: Start ZipArchive zip file extraction.\r\n" );
118
+
119
+ $WPZip = new ZipArchive;
120
+
121
+ if ( $WPZip->open( $local_zip_file ) === true ) {
122
+
123
+ $WPZip->extractTo( WP_CONTENT_DIR . '/bps-backup/wp-hashes/' );
124
+ $WPZip->close();
125
+
126
+ $time_end = microtime( true );
127
+ $zip_extract_time = $time_end - $time_start;
128
+
129
+ $hours = (int)($zip_extract_time / 60 / 60);
130
+ $minutes = (int)($zip_extract_time / 60) - $hours * 60;
131
+ $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
132
+ $hours_format = $hours == 0 ? "00" : $hours;
133
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
134
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
135
+
136
+ $zip_extract_time_log = 'WP Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
137
+
138
+ fwrite( $handle, "$zip_extract_time_log\r\n" );
139
+ fclose($handle);
140
+
141
+ return true;
142
+
143
+ } else {
144
+
145
+ if ( ! is_dir($wp_folder) ) {
146
+
147
+ fwrite( $handle, "WP Zip File Extraction ZipArchive Error: Unable to unzip the WordPress zip file: $local_zip_file.\r\n" );
148
+ fwrite( $handle, "Manual Solution: You will need to manually download the WordPress zip file to your computer, unzip it and then use FTP and upload the unzipped /wordpress/ folder to this BPS folder: $wp_hashes_dir.\r\n" );
149
+ fclose($handle);
150
+
151
+ return false;
152
+ }
153
+ }
154
+
155
+ } else {
156
+
157
+ fwrite( $handle, "WP Zip File Extraction: Start PclZip zip file extraction.\r\n" );
158
+
159
+ define( 'PCLZIP_TEMPORARY_DIR', WP_CONTENT_DIR . '/bps-backup/wp-hashes/' );
160
+
161
+ require_once ABSPATH . 'wp-admin/includes/class-pclzip.php';
162
+
163
+ if ( ini_get( 'mbstring.func_overload' ) && function_exists( 'mb_internal_encoding' ) ) {
164
+ $previous_encoding = mb_internal_encoding();
165
+ mb_internal_encoding( 'ISO-8859-1' );
166
+ }
167
+
168
+ $archive = new PclZip( $local_zip_file );
169
+
170
+ if ( $archive->extract( PCLZIP_OPT_PATH, WP_CONTENT_DIR . '/bps-backup/wp-hashes', PCLZIP_OPT_REMOVE_PATH, WP_CONTENT_DIR . '/bps-backup/wp-hashes' ) ) {
171
+
172
+ $time_end = microtime( true );
173
+ $zip_extract_time = $time_end - $time_start;
174
+
175
+ $hours = (int)($zip_extract_time / 60 / 60);
176
+ $minutes = (int)($zip_extract_time / 60) - $hours * 60;
177
+ $seconds = (int)$zip_extract_time - $hours * 60 * 60 - $minutes * 60;
178
+ $hours_format = $hours == 0 ? "00" : $hours;
179
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
180
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
181
+
182
+ $zip_extract_time_log = 'WP Zip File Extraction Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
183
+
184
+ fwrite( $handle, "$zip_extract_time_log\r\n" );
185
+ fclose($handle);
186
+
187
+ return true;
188
+
189
+ } else {
190
+
191
+ if ( ! is_dir($wp_folder) ) {
192
+
193
+ fwrite( $handle, "WP Zip File Extraction PclZip Error: Unable to unzip the WordPress zip file: $local_zip_file.\r\n" );
194
+ fwrite( $handle, "Manual Solution: You will need to manually download the WordPress zip file to your computer, unzip it and then use FTP and upload the unzipped /wordpress/ folder to this BPS folder: $wp_hashes_dir.\r\n" );
195
+ fclose($handle);
196
+
197
+ return false;
198
+ }
199
+ }
200
+ }
201
+ }
202
+
203
+ // Create the wp-hashes.php file array, which contains all MD5 file hashes for all current WP Core files.
204
+ // Cleanup: Deletes the wp zip file and the extracted /wordpress/ folder.
205
+ function bpsPro_wp_hash_maker() {
206
+ global $wp_version;
207
+
208
+ $time_start = microtime( true );
209
+
210
+ $timeNow = time();
211
+ $gmt_offset = get_option( 'gmt_offset' ) * 3600;
212
+ $timestamp = date_i18n(get_option('date_format'), strtotime("11/15-1976")) . ' ' . date_i18n(get_option('time_format'), $timeNow + $gmt_offset);
213
+ $mscan_log = WP_CONTENT_DIR . '/bps-backup/logs/mscan_log.txt';
214
+
215
+ $handle = fopen( $mscan_log, 'a' );
216
+
217
+ if ( ! is_array( spl_classes() ) ) {
218
+ fwrite( $handle, "WP MD5 File Hash Maker Error: The Standard PHP Library (SPL) is Not available/installed. Unable to create WP MD5 file hashes.\r\n" );
219
+ fwrite( $handle, "Solution: Contact your web host and ask them to install the Standard PHP Library (SPL) on your server.\r\n" );
220
+ fclose($handle);
221
+
222
+ return false;
223
+ }
224
+
225
+ $wp_hashes_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wp-hashes.php';
226
+
227
+ if ( ! file_exists( $wp_hashes_file ) ) {
228
+ fwrite( $handle, "WP MD5 File Hash Maker Error: The $wp_hashes_file file does not exist.\r\n" );
229
+ fwrite( $handle, "Troubleshooting: Check the Ownership or folder permissions for the /bps-backup/wp-hashes/ folder. The /bps-backup/wp-hashes/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/wp-hashes/ folder should be the same Owner as all of your other website folders.\r\n" );
230
+ fclose($handle);
231
+
232
+ return false;
233
+ }
234
+
235
+ if ( file_exists($wp_hashes_file) ) {
236
+ $check_string = file_get_contents($wp_hashes_file);
237
+
238
+ if ( strpos( $check_string, "WordPress $wp_version Hashes" ) ) {
239
+ fwrite( $handle, "WP MD5 File Hash Maker: The wp-hashes.php file already exists for WordPress $wp_version. The wp-hashes.php file was not created again.\r\n" );
240
+ fclose($handle);
241
+
242
+ return true;
243
+ }
244
+ }
245
+
246
+ $str1 = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress/';
247
+ $str2 = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress\\';
248
+ $str3 = WP_CONTENT_DIR . '\bps-backup\wp-hashes\wordpress\\';
249
+
250
+ $path = WP_CONTENT_DIR . '/bps-backup/wp-hashes/wordpress';
251
+
252
+ if ( ! is_dir($path) ) {
253
+
254
+ fwrite( $handle, "WP MD5 File Hash Maker Error: The $path folder does not exist.\r\n" );
255
+ fwrite( $handle, "Troubleshooting: Check the Ownership or folder permissions for the /bps-backup/wp-hashes/ folder. The /bps-backup/wp-hashes/ folder should have 755 or 705 permissions and the Owner of the /bps-backup/wp-hashes/ folder should be the same Owner as all of your other website folders.\r\n" );
256
+ fclose($handle);
257
+
258
+ return false;
259
+ }
260
+
261
+ fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: Start creating the wp-hashes.php file.\r\n" );
262
+
263
+ $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
264
+ $filePath = array();
265
+
266
+ foreach ( $objects as $files ) {
267
+ if ( $files->isFile() ) {
268
+ $filePath[] = str_replace( array( $str1, $str2, $str3 ), "", $files->getPathname() ). '\' => \'' . md5_file($files->getPathname());
269
+ }
270
+ }
271
+
272
+ $handleH = fopen( $wp_hashes_file, 'wb' );
273
+ fwrite( $handleH, "<?php\n" );
274
+ fwrite( $handleH, "// WordPress $wp_version Hashes\n" );
275
+ fwrite( $handleH, "\$wp_hashes = array(\n" );
276
+
277
+ foreach ( $filePath as $key => $value ) {
278
+ fwrite( $handleH, "'" . $value . "', " . "\n" );
279
+ }
280
+
281
+ fwrite( $handleH, ");\n" );
282
+ fwrite( $handleH, "?>" );
283
+ fclose( $handleH );
284
+
285
+ fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: wp-hashes.php file created.\r\n" );
286
+ fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: Start /bps-backup/wp-hashes/ folder cleanup.\r\n" );
287
+
288
+ // Cleanup
289
+ $wp_zip_file = 'wordpress-'. $wp_version . '.zip';
290
+ $local_zip_file = WP_CONTENT_DIR . '/bps-backup/wp-hashes/' . $wp_zip_file;
291
+
292
+ if ( is_dir($path) ) {
293
+
294
+ if ( file_exists($local_zip_file) ) {
295
+ unlink($local_zip_file);
296
+ }
297
+
298
+ $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
299
+
300
+ foreach ( $iterator as $file ) {
301
+
302
+ if ( $file->isDir() ) {
303
+ @rmdir( $file->getRealPath() );
304
+
305
+ } else {
306
+
307
+ if ( $file->isFile() ) {
308
+ unlink( $file->getRealPath() );
309
+ }
310
+ }
311
+ }
312
+ rmdir($path);
313
+ }
314
+
315
+ $time_end = microtime( true );
316
+ $hash_maker_time = $time_end - $time_start;
317
+
318
+ $hours = (int)($hash_maker_time / 60 / 60);
319
+ $minutes = (int)($hash_maker_time / 60) - $hours * 60;
320
+ $seconds = (int)$hash_maker_time - $hours * 60 * 60 - $minutes * 60;
321
+ $hours_format = $hours == 0 ? "00" : $hours;
322
+ $minutes_format = $minutes == 0 ? "00" : ($minutes < 10 ? "0".$minutes : $minutes);
323
+ $seconds_format = $seconds == 0 ? "00" : ($seconds < 10 ? "0".$seconds : $seconds);
324
+
325
+ $hash_maker_time_log = 'WP MD5 File Hash Maker & Cleanup Completion Time: '. $hours_format . ':'. $minutes_format . ':' . $seconds_format;
326
+
327
+ fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: WP $wp_zip_file file deleted.\r\n" );
328
+ fwrite( $handle, "WP MD5 File Hash Maker & Cleanup: Extracted /bps-backup/wp-hashes/wordpress/ folder deleted.\r\n" );
329
+ fwrite( $handle, "$hash_maker_time_log\r\n" );
330
+ fclose($handle);
331
+
332
+ return true;
333
+ }
334
+
335
+ ?>
languages/bulletproof-security.pot CHANGED
@@ -3,7 +3,7 @@ msgid ""
3
  msgstr ""
4
  "Project-Id-Version: bulletproof-security\n"
5
  "Report-Msgid-Bugs-To: \n"
6
- "POT-Creation-Date: 2021-03-09 11:40-0800\n"
7
  "PO-Revision-Date: 2015-06-20 19:13-0800\n"
8
  "Last-Translator: Ed Alexander <edward@ait-pro.com>\n"
9
  "Language-Team: AITpro <info@ait-pro.com>\n"
@@ -261,7 +261,7 @@ msgid ""
261
  msgstr ""
262
 
263
  #: admin/core/core-custom-code.php:472 admin/core/core-custom-code.php:844
264
- #: admin/core/core.php:1988
265
  msgid "Click the Custom Code Read Me help button for more help info."
266
  msgstr ""
267
 
@@ -361,17 +361,17 @@ msgid ""
361
  msgstr ""
362
 
363
  #: admin/core/core-export-import.php:115 admin/login/lsm-export.php:49
364
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
365
- #: admin/wizard/wizard.php:1847
366
  msgid ""
367
  "If you see a 403 error and/or are unable to download the zip file then click "
368
  "here: "
369
  msgstr ""
370
 
371
  #: admin/core/core-export-import.php:115 admin/login/lsm-export.php:49
372
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
373
- #: admin/wizard/wizard.php:1071 admin/wizard/wizard.php:1170
374
- #: admin/wizard/wizard.php:1172 admin/wizard/wizard.php:1847
375
  #: includes/hud-autofix-whitelist.php:821
376
  msgid "Setup Wizard Options"
377
  msgstr ""
@@ -383,15 +383,15 @@ msgid ""
383
  msgstr ""
384
 
385
  #: admin/core/core-export-import.php:115 admin/login/lsm-export.php:49
386
- #: admin/wizard/wizard.php:1847
387
  msgid "Download Zip Export"
388
  msgstr ""
389
 
390
- #: admin/core/core-export-import.php:144 admin/wizard/wizard.php:2007
391
  msgid "Zip File Upload Successful."
392
  msgstr ""
393
 
394
- #: admin/core/core-export-import.php:155 admin/wizard/wizard.php:2018
395
  msgid "Zip File Exraction Successful. Method: ZipArchive class."
396
  msgstr ""
397
 
@@ -421,19 +421,19 @@ msgstr ""
421
  msgid "3. Click the wp-admin Folder BulletProof Mode Activate button."
422
  msgstr ""
423
 
424
- #: admin/core/core-export-import.php:169 admin/wizard/wizard.php:2029
425
  msgid "ERROR: Zip File Extraction Failed. Method: ZipArchive class."
426
  msgstr ""
427
 
428
- #: admin/core/core-export-import.php:189 admin/wizard/wizard.php:2049
429
  msgid "Zip File Extraction Successful. Method: PclZip."
430
  msgstr ""
431
 
432
- #: admin/core/core-export-import.php:203 admin/wizard/wizard.php:2061
433
  msgid "ERROR: Zip File Extraction Failed. Method: PclZip."
434
  msgstr ""
435
 
436
- #: admin/core/core-export-import.php:211 admin/wizard/wizard.php:2069
437
  msgid "ERROR: Zip File Upload Failed."
438
  msgstr ""
439
 
@@ -464,7 +464,7 @@ msgid "Your Root and wp-admin Custom Code has been deleted successfully."
464
  msgstr ""
465
 
466
  #: admin/core/core-forms.php:18 admin/core/core-forms.php:98
467
- #: admin/core/core.php:1263
468
  msgid "htaccess Files Disabled: wp-admin htaccess file writing is disabled. "
469
  msgstr ""
470
 
@@ -474,8 +474,8 @@ msgstr ""
474
  #: admin/core/core-forms.php:364 admin/core/core-forms.php:430
475
  #: admin/core/core-htaccess-code.php:426 admin/core/core-htaccess-code.php:510
476
  #: admin/core/core-htaccess-code.php:579 admin/core/core-htaccess-code.php:663
477
- #: admin/core/core.php:870 admin/core/core.php:960 admin/core/core.php:1074
478
- #: admin/core/core.php:1164 admin/core/core.php:1263
479
  #: admin/maintenance/maintenance.php:869 admin/maintenance/maintenance.php:1185
480
  #: admin/maintenance/maintenance.php:1694
481
  #: admin/maintenance/maintenance.php:1824
@@ -489,13 +489,13 @@ msgstr ""
489
  #: admin/core/core-forms.php:364 admin/core/core-forms.php:430
490
  #: admin/core/core-htaccess-code.php:426 admin/core/core-htaccess-code.php:510
491
  #: admin/core/core-htaccess-code.php:579 admin/core/core-htaccess-code.php:663
492
- #: admin/core/core.php:870 admin/core/core.php:960 admin/core/core.php:1074
493
- #: admin/core/core.php:1164 admin/core/core.php:1263
494
  #: admin/maintenance/maintenance.php:869 admin/maintenance/maintenance.php:1185
495
  #: admin/maintenance/maintenance.php:1694
496
  #: admin/maintenance/maintenance.php:1824
497
  #: admin/maintenance/maintenance.php:2015 admin/wizard/wizard-functions.php:44
498
- #: admin/wizard/wizard.php:1083
499
  msgid "htaccess Files Disabled Forum Topic"
500
  msgstr ""
501
 
@@ -828,14 +828,6 @@ msgstr ""
828
  msgid "Success! The New Improved BPS Speed Boost Cache Code Notice is reset."
829
  msgstr ""
830
 
831
- #: admin/core/core-forms.php:646
832
- msgid "The MScan First Run Notice is NOT set. Nothing to reset."
833
- msgstr ""
834
-
835
- #: admin/core/core-forms.php:649
836
- msgid "Success! The MScan First Run Notice is reset."
837
- msgstr ""
838
-
839
  #: admin/core/core-forms.php:654
840
  msgid "The JTC-Lite New Feature Notice is NOT set. Nothing to reset."
841
  msgstr ""
@@ -1014,7 +1006,7 @@ msgid ""
1014
  "Read Me help file for BPS troubleshooting steps."
1015
  msgstr ""
1016
 
1017
- #: admin/core/core-help-text.php:15 admin/wizard/wizard.php:1124
1018
  msgid "Notes: "
1019
  msgstr ""
1020
 
@@ -1081,7 +1073,7 @@ msgid ""
1081
  "Send Email Alerts."
1082
  msgstr ""
1083
 
1084
- #: admin/core/core-help-text.php:18 admin/core/core.php:519
1085
  msgid "HPF Cron Check Frequency:"
1086
  msgstr ""
1087
 
@@ -1093,7 +1085,7 @@ msgid ""
1093
  "Options button to save your settings."
1094
  msgstr ""
1095
 
1096
- #: admin/core/core-help-text.php:18 admin/core/core.php:530
1097
  msgid "HPF Cron On|Off:"
1098
  msgstr ""
1099
 
@@ -1103,7 +1095,7 @@ msgid ""
1103
  "HPF Cron Off. Click the Save HPF Cron Options button to save your settings."
1104
  msgstr ""
1105
 
1106
- #: admin/core/core-help-text.php:18 admin/core/core.php:552
1107
  msgid "Ignore Hidden Plugin Folders & Files:"
1108
  msgstr ""
1109
 
@@ -1205,19 +1197,20 @@ msgid ""
1205
  "permanently. To save any new htaccess code permanently use BPS Custom Code."
1206
  msgstr ""
1207
 
1208
- #: admin/core/core-help-text.php:30 admin/core/core.php:231
1209
- #: admin/core/core.php:353 admin/core/core.php:454 admin/core/core.php:582
1210
- #: admin/core/core.php:670 admin/core/core.php:758 admin/core/core.php:1855
1211
  #: admin/db-backup-security/db-backup-help-text.php:12
1212
  #: admin/db-backup-security/db-backup-help-text.php:15
1213
  #: admin/db-backup-security/db-backup-security.php:303
1214
  #: admin/email-log-settings/email-log-settings.php:89 admin/login/login.php:215
1215
  #: admin/login/login.php:842 admin/login/login.php:1178
1216
  #: admin/login/login.php:1715 admin/maintenance/maintenance.php:207
1217
- #: admin/mscan/mscan-help-text.php:44 admin/mscan/mscan.php:140
 
1218
  #: admin/security-log/security-log.php:229 admin/system-info/system-info.php:86
1219
- #: admin/theme-skin/theme-skin.php:93 admin/wizard/wizard.php:1110
1220
- #: admin/wizard/wizard.php:1178 admin/wizard/wizard.php:1687
1221
  msgid ""
1222
  "This Read Me Help window is draggable (top) and resizable (bottom right "
1223
  "corner)"
@@ -1739,17 +1732,17 @@ msgstr ""
1739
 
1740
  #: admin/core/core-htaccess-code.php:426 admin/core/core-htaccess-code.php:510
1741
  #: admin/core/core-htaccess-code.php:579 admin/core/core-htaccess-code.php:663
1742
- #: admin/core/core.php:1164
1743
  msgid "htaccess Files Disabled: Root htaccess file writing is disabled. "
1744
  msgstr ""
1745
 
1746
  #: admin/core/core-htaccess-code.php:448 admin/core/core-htaccess-code.php:601
1747
- #: admin/core/core.php:1007
1748
  msgid "Failed to copy your Custom default.htaccess file: "
1749
  msgstr ""
1750
 
1751
  #: admin/core/core-htaccess-code.php:448 admin/core/core-htaccess-code.php:601
1752
- #: admin/core/core.php:1007
1753
  msgid " to: "
1754
  msgstr ""
1755
 
@@ -1785,275 +1778,276 @@ msgstr ""
1785
 
1786
  #: admin/core/core.php:42 admin/db-backup-security/db-backup-security.php:40
1787
  #: admin/email-log-settings/email-log-settings.php:35 admin/login/login.php:35
1788
- #: admin/maintenance/maintenance.php:35 admin/mscan/mscan.php:29
1789
  #: admin/security-log/security-log.php:35 admin/system-info/system-info.php:35
1790
  #: admin/theme-skin/theme-skin.php:40 admin/wizard/wizard.php:84
1791
  msgid "Rate BPS"
1792
  msgstr ""
1793
 
1794
- #: admin/core/core.php:148 admin/includes/admin.php:382
1795
- #: admin/includes/admin.php:383
1796
  msgid "BulletProof Security ~ htaccess Core"
1797
  msgstr ""
1798
 
1799
- #: admin/core/core.php:177 admin/db-backup-security/db-backup-security.php:52
1800
  #: admin/email-log-settings/email-log-settings.php:47 admin/login/login.php:148
1801
- #: admin/maintenance/maintenance.php:57 admin/mscan/mscan.php:80
1802
  #: admin/security-log/security-log.php:47 admin/system-info/system-info.php:47
1803
  #: admin/theme-skin/theme-skin.php:52 admin/wizard/wizard.php:182
1804
  msgid "Settings Saved"
1805
  msgstr ""
1806
 
1807
- #: admin/core/core.php:202
1808
  msgid "Security Modes"
1809
  msgstr ""
1810
 
1811
- #: admin/core/core.php:203
1812
  msgid "htaccess File Editor"
1813
  msgstr ""
1814
 
1815
- #: admin/core/core.php:204 admin/core/core.php:1839 admin/core/core.php:1852
1816
  msgid "Custom Code"
1817
  msgstr ""
1818
 
1819
- #: admin/core/core.php:205
1820
  msgid "My Notes"
1821
  msgstr ""
1822
 
1823
- #: admin/core/core.php:206
1824
  msgid "Whats New"
1825
  msgstr ""
1826
 
1827
- #: admin/core/core.php:207 admin/db-backup-security/db-backup-security.php:284
1828
  #: admin/db-backup-security/db-backup-security.php:1739
1829
  #: admin/email-log-settings/email-log-settings.php:70 admin/login/login.php:187
1830
- #: admin/maintenance/maintenance.php:171 admin/mscan/mscan.php:117
1831
- #: admin/mscan/mscan.php:2001 admin/security-log/security-log.php:210
1832
  #: admin/system-info/system-info.php:73 admin/theme-skin/theme-skin.php:75
1833
  #: admin/theme-skin/theme-skin.php:251
1834
  msgid "Help &amp; FAQ"
1835
  msgstr ""
1836
 
1837
- #: admin/core/core.php:208 bulletproof-security.php:175
1838
  msgid "BPS Pro Features"
1839
  msgstr ""
1840
 
1841
- #: admin/core/core.php:216
1842
  msgid "htaccess File Security Modes ~ "
1843
  msgstr ""
1844
 
1845
- #: admin/core/core.php:216
1846
  msgid "RBM, WBM, HPF, MBM & BBM BulletProof Modes"
1847
  msgstr ""
1848
 
1849
- #: admin/core/core.php:216 admin/core/core.php:798 admin/core/core.php:1833
1850
- #: admin/core/core.php:1967 admin/core/core.php:2073
1851
  #: admin/db-backup-security/db-backup-security.php:292
1852
  #: admin/db-backup-security/db-backup-security.php:1242
1853
  #: admin/db-backup-security/db-backup-security.php:1398
1854
  #: admin/email-log-settings/email-log-settings.php:78 admin/login/login.php:204
1855
  #: admin/login/login.php:831 admin/maintenance/maintenance.php:191
1856
- #: admin/maintenance/maintenance.php:193 admin/mscan/mscan.php:125
1857
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1858
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
1859
  msgid "Want even more security protection?"
1860
  msgstr ""
1861
 
1862
- #: admin/core/core.php:216 admin/core/core.php:798 admin/core/core.php:1833
1863
- #: admin/core/core.php:1967 admin/core/core.php:2073
1864
  #: admin/email-log-settings/email-log-settings.php:78
1865
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1866
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1867
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
1868
  msgid ""
1869
  "Protect all of your Plugins (plugin folders and files) with an IP Firewall: "
1870
  msgstr ""
1871
 
1872
- #: admin/core/core.php:216 admin/core/core.php:798 admin/core/core.php:1833
1873
- #: admin/core/core.php:1967 admin/core/core.php:2073
1874
  #: admin/email-log-settings/email-log-settings.php:78
1875
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1876
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1877
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
1878
  msgid "Get BPS Pro Plugin Firewall"
1879
  msgstr ""
1880
 
1881
- #: admin/core/core.php:216 admin/core/core.php:798 admin/core/core.php:1833
1882
- #: admin/core/core.php:1967 admin/core/core.php:2073
1883
  #: admin/email-log-settings/email-log-settings.php:78
1884
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1885
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1886
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
1887
  msgid ""
1888
  "Protect your WordPress uploads folder against remote access or execution of "
1889
  "files: "
1890
  msgstr ""
1891
 
1892
- #: admin/core/core.php:216 admin/core/core.php:798 admin/core/core.php:1833
1893
- #: admin/core/core.php:1967 admin/core/core.php:2073
1894
  #: admin/email-log-settings/email-log-settings.php:78
1895
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1896
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1897
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
1898
  msgid "Get BPS Pro Uploads Anti-Exploit Guard"
1899
  msgstr ""
1900
 
1901
- #: admin/core/core.php:222 admin/core/core.php:810 admin/core/core.php:1874
1902
- #: admin/core/core.php:1910 admin/core/core.php:1927 admin/login/login.php:164
1903
  #: admin/login/login.php:222 admin/login/login.php:944
1904
  #: admin/login/login.php:1199 admin/system-info/system-info.php:99
1905
  #: admin/system-info/system-info.php:1059
1906
  msgid "Permission Denied"
1907
  msgstr ""
1908
 
1909
- #: admin/core/core.php:224
1910
  msgid "Activate|Deactivate Security Modes"
1911
  msgstr ""
1912
 
1913
- #: admin/core/core.php:226 admin/core/core.php:228 admin/core/core.php:350
1914
  msgid "Root Folder BulletProof Mode (RBM)"
1915
  msgstr ""
1916
 
1917
- #: admin/core/core.php:226 admin/core/core.php:348 admin/core/core.php:449
1918
- #: admin/core/core.php:577 admin/core/core.php:665 admin/core/core.php:753
1919
- #: admin/core/core.php:804 admin/core/core.php:1839
1920
  #: admin/db-backup-security/db-backup-security.php:298
1921
  #: admin/db-backup-security/db-backup-security.php:1248
1922
  #: admin/db-backup-security/db-backup-security.php:1404
1923
  #: admin/email-log-settings/email-log-settings.php:84 admin/login/login.php:210
1924
  #: admin/login/login.php:837 admin/login/login.php:1169
1925
  #: admin/login/login.php:1709 admin/maintenance/maintenance.php:202
1926
- #: admin/mscan/mscan.php:135 admin/mscan/mscan.php:1800
 
1927
  #: admin/security-log/security-log.php:224 admin/system-info/system-info.php:81
1928
- #: admin/theme-skin/theme-skin.php:90 admin/wizard/wizard.php:1101
1929
- #: admin/wizard/wizard.php:1170 admin/wizard/wizard.php:1682
1930
  msgid "Read Me"
1931
  msgstr ""
1932
 
1933
- #: admin/core/core.php:233 admin/core/core.php:355 admin/core/core.php:1857
1934
  #: admin/db-backup-security/db-backup-security.php:306
1935
  #: admin/email-log-settings/email-log-settings.php:92
1936
  #: admin/login/login.php:1181 admin/maintenance/maintenance.php:210
1937
- #: admin/mscan/mscan.php:142 admin/system-info/system-info.php:89
1938
  msgid "Forum Help Links: "
1939
  msgstr ""
1940
 
1941
- #: admin/core/core.php:236 admin/core/core.php:358
1942
  msgid "Setup Wizard & Other Video Tutorials"
1943
  msgstr ""
1944
 
1945
- #: admin/core/core.php:237 admin/core/core.php:359
1946
- #: admin/email-log-settings/email-log-settings.php:95 admin/mscan/mscan.php:147
1947
  #: admin/security-log/security-log.php:235
1948
  msgid "BPS Troubleshooting Steps"
1949
  msgstr ""
1950
 
1951
- #: admin/core/core.php:271 admin/core/core.php:274 admin/core/core.php:277
1952
- #: admin/core/core.php:280 admin/core/core.php:288 admin/core/core.php:291
1953
- #: admin/core/core.php:294 admin/core/core.php:297
1954
  msgid "RBM Status: "
1955
  msgstr ""
1956
 
1957
- #: admin/core/core.php:271 admin/core/core.php:288 admin/core/core.php:398
1958
- #: admin/core/core.php:412 admin/core/core.php:613 admin/core/core.php:627
1959
- #: admin/core/core.php:701 admin/core/core.php:715
1960
  msgid "Disabled"
1961
  msgstr ""
1962
 
1963
- #: admin/core/core.php:274 admin/core/core.php:291
1964
  msgid "Root htaccess File Does Not Exist"
1965
  msgstr ""
1966
 
1967
- #: admin/core/core.php:277 admin/core/core.php:294 admin/core/core.php:404
1968
- #: admin/core/core.php:418 admin/core/core.php:619 admin/core/core.php:633
1969
- #: admin/core/core.php:707 admin/core/core.php:721
1970
  #: admin/system-info/system-info.php:238 admin/system-info/system-info.php:279
1971
  msgid "Activated"
1972
  msgstr ""
1973
 
1974
- #: admin/core/core.php:280 admin/core/core.php:297 admin/core/core.php:401
1975
- #: admin/core/core.php:415 admin/core/core.php:616 admin/core/core.php:630
1976
- #: admin/core/core.php:704 admin/core/core.php:718
1977
  #: admin/system-info/system-info.php:247 admin/system-info/system-info.php:281
1978
  msgid "Deactivated"
1979
  msgstr ""
1980
 
1981
- #: admin/core/core.php:314 admin/core/core.php:332
1982
  msgid "Click OK to Activate Root Folder BulletProof Mode or click Cancel."
1983
  msgstr ""
1984
 
1985
- #: admin/core/core.php:322 admin/core/core.php:340
1986
  msgid "Click OK to Deactivate Root Folder BulletProof Mode or click Cancel."
1987
  msgstr ""
1988
 
1989
- #: admin/core/core.php:348
1990
  msgid "wp-admin Folder BulletProof Mode (WBM)"
1991
  msgstr ""
1992
 
1993
- #: admin/core/core.php:398 admin/core/core.php:401 admin/core/core.php:404
1994
- #: admin/core/core.php:412 admin/core/core.php:415 admin/core/core.php:418
1995
  msgid "WBM Status: "
1996
  msgstr ""
1997
 
1998
- #: admin/core/core.php:433
1999
  msgid "Click OK to Activate wp-admin Folder BulletProof Mode or click Cancel."
2000
  msgstr ""
2001
 
2002
- #: admin/core/core.php:441
2003
  msgid ""
2004
  "Click OK to Deactivate wp-admin Folder BulletProof Mode or click Cancel."
2005
  msgstr ""
2006
 
2007
- #: admin/core/core.php:449 admin/core/core.php:451
2008
  msgid "Hidden Plugin Folders|Files Cron (HPF)"
2009
  msgstr ""
2010
 
2011
- #: admin/core/core.php:484 admin/core/core.php:487 admin/core/core.php:495
2012
- #: admin/core/core.php:498
2013
  msgid "HPF Status: "
2014
  msgstr ""
2015
 
2016
- #: admin/core/core.php:484 admin/core/core.php:495 admin/core/core.php:532
2017
  msgid "HPF Cron On"
2018
  msgstr ""
2019
 
2020
- #: admin/core/core.php:487 admin/core/core.php:498 admin/core/core.php:533
2021
  msgid "HPF Cron Off"
2022
  msgstr ""
2023
 
2024
- #: admin/core/core.php:521
2025
  msgid "Run Check Every 1 Minute"
2026
  msgstr ""
2027
 
2028
- #: admin/core/core.php:522
2029
  msgid "Run Check Every 5 Minutes"
2030
  msgstr ""
2031
 
2032
- #: admin/core/core.php:523
2033
  msgid "Run Check Every 10 Minutes"
2034
  msgstr ""
2035
 
2036
- #: admin/core/core.php:524
2037
  msgid "Run Check Every 15 Minutes"
2038
  msgstr ""
2039
 
2040
- #: admin/core/core.php:525
2041
  msgid "Run Check Every 30 Minutes"
2042
  msgstr ""
2043
 
2044
- #: admin/core/core.php:526
2045
  msgid "Run Check Every 60 Minutes"
2046
  msgstr ""
2047
 
2048
- #: admin/core/core.php:527
2049
  msgid "Run Check Once Daily"
2050
  msgstr ""
2051
 
2052
- #: admin/core/core.php:536
2053
  msgid "Save HPF Cron Options"
2054
  msgstr ""
2055
 
2056
- #: admin/core/core.php:536
2057
  msgid ""
2058
  "The default Cron Frequency is: Run Check Every 15 Minutes. This is a "
2059
  "lightweight check that uses an insignificant amount of resources/memory so 4 "
@@ -2065,32 +2059,32 @@ msgid ""
2065
  "OK to proceed or click Cancel"
2066
  msgstr ""
2067
 
2068
- #: admin/core/core.php:553
2069
  msgid "Add Ignore rules using plugin folder names or file names."
2070
  msgstr ""
2071
 
2072
- #: admin/core/core.php:553
2073
  msgid "Use a comma and a space between folder and/or file names."
2074
  msgstr ""
2075
 
2076
- #: admin/core/core.php:553
2077
  msgid "Example: plugin-folder-name, example-file-name.php"
2078
  msgstr ""
2079
 
2080
- #: admin/core/core.php:559
2081
  msgid ""
2082
  "This option is for adding ignore rules for Hidden or Empty Plugin Folders "
2083
  "Detected by BPS or Non-standard WP files detected by BPS in your /plugins/ "
2084
  "folder."
2085
  msgstr ""
2086
 
2087
- #: admin/core/core.php:559
2088
  msgid ""
2089
  "This is an independent option setting that does not require clicking any "
2090
  "other buttons."
2091
  msgstr ""
2092
 
2093
- #: admin/core/core.php:559 admin/maintenance/maintenance.php:696
2094
  #: admin/security-log/security-log.php:448
2095
  #: admin/security-log/security-log.php:463
2096
  #: admin/security-log/security-log.php:681
@@ -2098,281 +2092,281 @@ msgstr ""
2098
  msgid "Click OK to proceed or click Cancel."
2099
  msgstr ""
2100
 
2101
- #: admin/core/core.php:577
2102
  msgid "Master htaccess Folder BulletProof Mode (MBM)"
2103
  msgstr ""
2104
 
2105
- #: admin/core/core.php:579
2106
  msgid "MBM BulletProof Modes"
2107
  msgstr ""
2108
 
2109
- #: admin/core/core.php:613 admin/core/core.php:616 admin/core/core.php:619
2110
- #: admin/core/core.php:627 admin/core/core.php:630 admin/core/core.php:633
2111
  msgid "MBM Status: "
2112
  msgstr ""
2113
 
2114
- #: admin/core/core.php:648
2115
  msgid "Click OK to Activate MBM BulletProof Mode or click Cancel."
2116
  msgstr ""
2117
 
2118
- #: admin/core/core.php:656
2119
  msgid "Click OK to Deactivate MBM BulletProof Mode or click Cancel."
2120
  msgstr ""
2121
 
2122
- #: admin/core/core.php:665
2123
  msgid "BPS Backup Folder BulletProof Mode (BBM)"
2124
  msgstr ""
2125
 
2126
- #: admin/core/core.php:667
2127
  msgid "BBM BulletProof Modes"
2128
  msgstr ""
2129
 
2130
- #: admin/core/core.php:701 admin/core/core.php:704 admin/core/core.php:707
2131
- #: admin/core/core.php:715 admin/core/core.php:718 admin/core/core.php:721
2132
  msgid "BBM Status: "
2133
  msgstr ""
2134
 
2135
- #: admin/core/core.php:736
2136
  msgid "Click OK to Activate BBM BulletProof Mode or click Cancel."
2137
  msgstr ""
2138
 
2139
- #: admin/core/core.php:744
2140
  msgid ""
2141
  "Caution: BPS Backup Folder BulletProof Mode (BBM) should only be deactivated "
2142
  "for testing or troubleshooting. Be sure to activate BBM BulletProof Mode "
2143
  "after you are done testing or troubleshooting."
2144
  msgstr ""
2145
 
2146
- #: admin/core/core.php:744
2147
  msgid "Click OK to Deactivate BBM BulletProof Mode or click Cancel."
2148
  msgstr ""
2149
 
2150
- #: admin/core/core.php:753 admin/core/core.php:755
2151
  msgid "Backup & Restore BPS htaccess Files"
2152
  msgstr ""
2153
 
2154
- #: admin/core/core.php:771
2155
  msgid "Click OK to Backup BPS htaccess files or click Cancel."
2156
  msgstr ""
2157
 
2158
- #: admin/core/core.php:779
2159
  msgid "Click OK to Restore BPS htaccess files or click Cancel."
2160
  msgstr ""
2161
 
2162
- #: admin/core/core.php:798
2163
  msgid "htaccess File Editor ~ "
2164
  msgstr ""
2165
 
2166
- #: admin/core/core.php:798
2167
  msgid ""
2168
  "Check or edit BPS htaccess files/code manually/directly for testing. Use BPS "
2169
  "Custom Code to save htaccess code permanently"
2170
  msgstr ""
2171
 
2172
- #: admin/core/core.php:804 admin/core/core.php:806
2173
  msgid "htaccess File Editing"
2174
  msgstr ""
2175
 
2176
- #: admin/core/core.php:837
2177
  msgid "htaccess Files Disabled: secure.htaccess Master file is disabled."
2178
  msgstr ""
2179
 
2180
- #: admin/core/core.php:841
2181
  msgid "ERROR: A secure.htaccess Master file was NOT found."
2182
  msgstr ""
2183
 
2184
- #: admin/core/core.php:850
2185
  msgid ""
2186
  "File Open and Write test successful! The secure.htaccess Master file is "
2187
  "writable."
2188
  msgstr ""
2189
 
2190
- #: admin/core/core.php:855 admin/core/core.php:945 admin/core/core.php:1058
2191
- #: admin/core/core.php:1247 admin/security-log/security-log.php:744
2192
  msgid "Cannot write to file: "
2193
  msgstr ""
2194
 
2195
- #: admin/core/core.php:870
2196
  msgid ""
2197
  "htaccess Files Disabled: secure.htaccess Master file writing is disabled. "
2198
  msgstr ""
2199
 
2200
- #: admin/core/core.php:890
2201
  msgid "Error: Unable to write to the secure.htaccess Master file."
2202
  msgstr ""
2203
 
2204
- #: admin/core/core.php:905
2205
  msgid "The secure.htaccess Master file has been updated."
2206
  msgstr ""
2207
 
2208
- #: admin/core/core.php:927
2209
  msgid "htaccess Files Disabled: default.htaccess Master file is disabled."
2210
  msgstr ""
2211
 
2212
- #: admin/core/core.php:931
2213
  msgid "ERROR: A default.htaccess Master file was NOT found."
2214
  msgstr ""
2215
 
2216
- #: admin/core/core.php:940
2217
  msgid ""
2218
  "File Open and Write test successful! The default.htaccess Master file is "
2219
  "writable."
2220
  msgstr ""
2221
 
2222
- #: admin/core/core.php:960
2223
  msgid ""
2224
  "htaccess Files Disabled: default.htaccess Master file writing is disabled. "
2225
  msgstr ""
2226
 
2227
- #: admin/core/core.php:980
2228
  msgid "Error: Unable to write to the default.htaccess Master file."
2229
  msgstr ""
2230
 
2231
- #: admin/core/core.php:995
2232
  msgid "The default.htaccess Master file has been updated."
2233
  msgstr ""
2234
 
2235
- #: admin/core/core.php:1007
2236
  msgid ""
2237
  " Check that the /bps-backup/ and /master-backups/ folders exist and the "
2238
  "folder permissions or Ownership for these folders."
2239
  msgstr ""
2240
 
2241
- #: admin/core/core.php:1012
2242
  msgid ""
2243
  "Your Custom default.htaccess Master file has been successfully saved to: "
2244
  msgstr ""
2245
 
2246
- #: admin/core/core.php:1034
2247
  msgid "wpadmin-secure.htaccess file writing is disabled."
2248
  msgstr ""
2249
 
2250
- #: admin/core/core.php:1040
2251
  msgid ""
2252
  "htaccess Files Disabled: wpadmin-secure.htaccess Master file is disabled."
2253
  msgstr ""
2254
 
2255
- #: admin/core/core.php:1044
2256
  msgid "ERROR: A wpadmin-secure.htaccess Master file was NOT found."
2257
  msgstr ""
2258
 
2259
- #: admin/core/core.php:1053
2260
  msgid ""
2261
  "File Open and Write test successful! The wpadmin-secure.htaccess Master file "
2262
  "is writable."
2263
  msgstr ""
2264
 
2265
- #: admin/core/core.php:1074
2266
  msgid ""
2267
  "htaccess Files Disabled: wpadmin-secure.htaccess Master file writing is "
2268
  "disabled. "
2269
  msgstr ""
2270
 
2271
- #: admin/core/core.php:1094
2272
  msgid "Error: Unable to write to the wpadmin-secure.htaccess Master file."
2273
  msgstr ""
2274
 
2275
- #: admin/core/core.php:1109
2276
  msgid "The wpadmin-secure.htaccess Master file has been updated."
2277
  msgstr ""
2278
 
2279
- #: admin/core/core.php:1131
2280
  msgid "htaccess Files Disabled: Root htaccess file does not exist."
2281
  msgstr ""
2282
 
2283
- #: admin/core/core.php:1135
2284
  msgid "ERROR: An htaccess file was NOT found in your root folder"
2285
  msgstr ""
2286
 
2287
- #: admin/core/core.php:1144
2288
  msgid ""
2289
  "File Open and Write test successful! Your currently active root htaccess "
2290
  "file is writable."
2291
  msgstr ""
2292
 
2293
- #: admin/core/core.php:1149
2294
  msgid "Your root htaccess file is Locked with Read Only Permissions."
2295
  msgstr ""
2296
 
2297
- #: admin/core/core.php:1149
2298
  msgid ""
2299
  "Use the Lock and Unlock buttons below to Lock or Unlock your root htaccess "
2300
  "file for editing."
2301
  msgstr ""
2302
 
2303
- #: admin/core/core.php:1184
2304
  msgid ""
2305
  "Error: Unable to write to the Root htaccess file. If your Root htaccess file "
2306
  "is locked you must unlock first."
2307
  msgstr ""
2308
 
2309
- #: admin/core/core.php:1199
2310
  msgid "Your currently active root htaccess file has been updated."
2311
  msgstr ""
2312
 
2313
- #: admin/core/core.php:1223
2314
  msgid "wp-admin active htaccess file writing is disabled."
2315
  msgstr ""
2316
 
2317
- #: admin/core/core.php:1229
2318
  msgid "htaccess Files Disabled: wp-admin folder htaccess file does not exist."
2319
  msgstr ""
2320
 
2321
- #: admin/core/core.php:1233
2322
  msgid "ERROR: An htaccess file was NOT found in your wp-admin folder"
2323
  msgstr ""
2324
 
2325
- #: admin/core/core.php:1242
2326
  msgid ""
2327
  "File Open and Write test successful! Your currently active wp-admin htaccess "
2328
  "file is writable."
2329
  msgstr ""
2330
 
2331
- #: admin/core/core.php:1283
2332
  msgid "Error: Unable to write to the wp-admin htaccess file."
2333
  msgstr ""
2334
 
2335
- #: admin/core/core.php:1298
2336
  msgid "Your currently active wp-admin htaccess file has been updated."
2337
  msgstr ""
2338
 
2339
- #: admin/core/core.php:1315
2340
  msgid "Your Root htaccess file has been Locked."
2341
  msgstr ""
2342
 
2343
- #: admin/core/core.php:1320
2344
  msgid "Unable to Lock your Root htaccess file."
2345
  msgstr ""
2346
 
2347
- #: admin/core/core.php:1334
2348
  msgid "Your Root htaccess file has been Unlocked."
2349
  msgstr ""
2350
 
2351
- #: admin/core/core.php:1339
2352
  msgid "Unable to Unlock your Root htaccess file."
2353
  msgstr ""
2354
 
2355
- #: admin/core/core.php:1362
2356
  msgid "Click OK to Lock your Root htaccess file or click Cancel."
2357
  msgstr ""
2358
 
2359
- #: admin/core/core.php:1362
2360
  msgid ""
2361
  "Note: The File Open and Write Test window will still display the last status "
2362
  "of the file as Unlocked. To see the current status refresh your browser."
2363
  msgstr ""
2364
 
2365
- #: admin/core/core.php:1370
2366
  msgid "Click OK to Unlock your Root htaccess file or click Cancel."
2367
  msgstr ""
2368
 
2369
- #: admin/core/core.php:1370
2370
  msgid ""
2371
  "Note: The File Open and Write Test window will still display the last status "
2372
  "of the file as Locked. To see the current status refresh your browser."
2373
  msgstr ""
2374
 
2375
- #: admin/core/core.php:1379
2376
  msgid ""
2377
  "Turning AutoLock On will allow BPS Pro to automatically lock your Root ."
2378
  "htaccess file. For some folks this causes a problem because their Web Hosts "
@@ -2380,11 +2374,11 @@ msgid ""
2380
  "BPS Pro to AutoLock the Root .htaccess file works fine."
2381
  msgstr ""
2382
 
2383
- #: admin/core/core.php:1379
2384
  msgid "Click OK to Turn AutoLock On or click Cancel."
2385
  msgstr ""
2386
 
2387
- #: admin/core/core.php:1381 admin/system-info/system-info.php:776
2388
  #: admin/system-info/system-info.php:792 admin/system-info/system-info.php:800
2389
  #: admin/system-info/system-info.php:808 admin/system-info/system-info.php:816
2390
  #: admin/system-info/system-info.php:824 admin/system-info/system-info.php:832
@@ -2396,7 +2390,7 @@ msgstr ""
2396
  msgid "On"
2397
  msgstr ""
2398
 
2399
- #: admin/core/core.php:1391
2400
  msgid ""
2401
  "Turning AutoLock Off will prevent BPS Pro from automatically locking your "
2402
  "Root .htaccess file. For some folks this is necessary because their Web "
@@ -2404,11 +2398,11 @@ msgid ""
2404
  "allowing BPS Pro to AutoLock the Root .htaccess file works fine."
2405
  msgstr ""
2406
 
2407
- #: admin/core/core.php:1391
2408
  msgid "Click OK to Turn AutoLock Off or click Cancel."
2409
  msgstr ""
2410
 
2411
- #: admin/core/core.php:1393 admin/system-info/system-info.php:552
2412
  #: admin/system-info/system-info.php:795 admin/system-info/system-info.php:803
2413
  #: admin/system-info/system-info.php:811 admin/system-info/system-info.php:819
2414
  #: admin/system-info/system-info.php:827 admin/system-info/system-info.php:835
@@ -2420,36 +2414,36 @@ msgstr ""
2420
  msgid "Off"
2421
  msgstr ""
2422
 
2423
- #: admin/core/core.php:1408
2424
  msgid "secure.htaccess"
2425
  msgstr ""
2426
 
2427
- #: admin/core/core.php:1409
2428
  msgid "default.htaccess"
2429
  msgstr ""
2430
 
2431
- #: admin/core/core.php:1410
2432
  msgid "wpadmin-secure.htaccess"
2433
  msgstr ""
2434
 
2435
- #: admin/core/core.php:1411
2436
  msgid "Your Current Root htaccess File"
2437
  msgstr ""
2438
 
2439
- #: admin/core/core.php:1412
2440
  msgid "Your Current wp-admin htaccess File"
2441
  msgstr ""
2442
 
2443
- #: admin/core/core.php:1435 admin/core/core.php:1507 admin/core/core.php:1579
2444
- #: admin/core/core.php:1682 admin/core/core.php:1756
2445
  msgid ""
2446
  "If you see an error or are unable to save your editing changes then click "
2447
  "the Encrypt htaccess Code button first and then click the Update File "
2448
  "button. Mouse over the question mark image to the right for help info."
2449
  msgstr ""
2450
 
2451
- #: admin/core/core.php:1435 admin/core/core.php:1507 admin/core/core.php:1579
2452
- #: admin/core/core.php:1682 admin/core/core.php:1756
2453
  msgid ""
2454
  "If your web host currently has ModSecurity installed or installs ModSecurity "
2455
  "at a later time then ModSecurity will prevent you from saving your htaccess "
@@ -2457,8 +2451,8 @@ msgid ""
2457
  "button."
2458
  msgstr ""
2459
 
2460
- #: admin/core/core.php:1435 admin/core/core.php:1507 admin/core/core.php:1579
2461
- #: admin/core/core.php:1682 admin/core/core.php:1756
2462
  msgid ""
2463
  "If you click the Encrypt htaccess Code button and then want to edit your "
2464
  "code again click the Decrypt htaccess Code button. After you are done "
@@ -2466,20 +2460,20 @@ msgid ""
2466
  "File button."
2467
  msgstr ""
2468
 
2469
- #: admin/core/core.php:1435 admin/core/core.php:1507 admin/core/core.php:1579
2470
- #: admin/core/core.php:1682 admin/core/core.php:1756
2471
  msgid "Click the htaccess File Editing Read Me help button for more help info."
2472
  msgstr ""
2473
 
2474
- #: admin/core/core.php:1678
2475
  msgid "YOUR ROOT HTACCESS FILE IS LOCKED."
2476
  msgstr ""
2477
 
2478
- #: admin/core/core.php:1678
2479
  msgid "YOUR FILE EDITS|CHANGES CANNOT BE SAVED."
2480
  msgstr ""
2481
 
2482
- #: admin/core/core.php:1678
2483
  msgid ""
2484
  "Click Cancel, copy the file editing changes you made to save them and then "
2485
  "click the Unlock .htaccess File button to unlock your Root .htaccess file. "
@@ -2488,44 +2482,44 @@ msgid ""
2488
  "to save your file edits/changes."
2489
  msgstr ""
2490
 
2491
- #: admin/core/core.php:1833
2492
  msgid "htaccess File Custom Code ~ "
2493
  msgstr ""
2494
 
2495
- #: admin/core/core.php:1833
2496
  msgid ""
2497
  "Save custom htaccess code for your Root and wp-admin htaccess Files "
2498
  "permanently"
2499
  msgstr ""
2500
 
2501
- #: admin/core/core.php:1845
2502
  msgid "Reset|Recheck Dismiss Notices: "
2503
  msgstr ""
2504
 
2505
- #: admin/core/core.php:1860
2506
  msgid "Brute Force Login Page Protection code"
2507
  msgstr ""
2508
 
2509
- #: admin/core/core.php:1868 admin/core/core.php:2116
2510
- #: admin/wizard/wizard.php:1116
2511
  msgid "Custom Code Video Tutorial"
2512
  msgstr ""
2513
 
2514
- #: admin/core/core.php:1869
2515
  msgid "BulletProof Security Forum"
2516
  msgstr ""
2517
 
2518
- #: admin/core/core.php:1886
2519
  msgid ""
2520
  "Clicking OK will Import all of your Root and wp-admin Custom Code from the "
2521
  "cc-master.zip file on your computer."
2522
  msgstr ""
2523
 
2524
- #: admin/core/core.php:1886
2525
  msgid "Click OK to Import Custom Code or click Cancel."
2526
  msgstr ""
2527
 
2528
- #: admin/core/core.php:1895
2529
  msgid ""
2530
  "Clicking OK will Export (copy) all of your Root and wp-admin Custom Code "
2531
  "into the cc-master.zip file, which you can then download to your computer by "
@@ -2533,51 +2527,51 @@ msgid ""
2533
  "success message."
2534
  msgstr ""
2535
 
2536
- #: admin/core/core.php:1895
2537
  msgid "Click OK to Export Custom Code or click Cancel."
2538
  msgstr ""
2539
 
2540
- #: admin/core/core.php:1903
2541
  msgid ""
2542
  "Clicking OK will delete all of your Root and wp-admin Custom Code from all "
2543
  "of the Custom Code text boxes."
2544
  msgstr ""
2545
 
2546
- #: admin/core/core.php:1903
2547
  msgid "Click OK to Delete Custom Code or click Cancel."
2548
  msgstr ""
2549
 
2550
- #: admin/core/core.php:1954
2551
  msgid ""
2552
  "Your My Notes Personal Notes and/or htaccess Code Notes saved successfully "
2553
  "to your WordPress Database."
2554
  msgstr ""
2555
 
2556
- #: admin/core/core.php:1967
2557
  msgid "My Notes ~ "
2558
  msgstr ""
2559
 
2560
- #: admin/core/core.php:1967
2561
  msgid "Save Personal Notes and htaccess Code Notes to your WordPress Database"
2562
  msgstr ""
2563
 
2564
- #: admin/core/core.php:1988
2565
  msgid ""
2566
  "If you are unable to save custom htaccess code and/or see an error message "
2567
  "when trying to save custom htaccess code, "
2568
  msgstr ""
2569
 
2570
- #: admin/core/core.php:1988
2571
  msgid ""
2572
  "click the Encrypt My Notes button first and then click the Save My Notes "
2573
  "button."
2574
  msgstr ""
2575
 
2576
- #: admin/core/core.php:1988
2577
  msgid "Mouse over the question mark image to the right for help info."
2578
  msgstr ""
2579
 
2580
- #: admin/core/core.php:1988
2581
  msgid ""
2582
  "If your web host currently has ModSecurity installed or installs ModSecurity "
2583
  "at a later time then ModSecurity will prevent you from saving your custom "
@@ -2585,7 +2579,7 @@ msgid ""
2585
  "button."
2586
  msgstr ""
2587
 
2588
- #: admin/core/core.php:1988
2589
  msgid ""
2590
  "If you click the Encrypt My Notes button, but then want to add or edit "
2591
  "additional custom code click the Decrypt My Notes button. After you are done "
@@ -2593,25 +2587,25 @@ msgid ""
2593
  "clicking the Save My Notes button."
2594
  msgstr ""
2595
 
2596
- #: admin/core/core.php:2060
2597
  #: admin/db-backup-security/db-backup-security.php:1743
2598
- #: admin/mscan/mscan.php:2005 admin/theme-skin/theme-skin.php:255
2599
  msgid "Whats New in "
2600
  msgstr ""
2601
 
2602
- #: admin/core/core.php:2060
2603
  msgid " and General Help Info & Tips"
2604
  msgstr ""
2605
 
2606
- #: admin/core/core.php:2065
2607
  msgid "The BPS Changelog|Whats New page has been moved to the "
2608
  msgstr ""
2609
 
2610
- #: admin/core/core.php:2065
2611
  msgid "Reasons for this Changelog|Whats New page change: "
2612
  msgstr ""
2613
 
2614
- #: admin/core/core.php:2065
2615
  msgid ""
2616
  "The BPS Changelog|Whats New page will not have to be translated by the "
2617
  "WordPress PolyGlots Language Packs Team for each new version release of BPS, "
@@ -2620,69 +2614,68 @@ msgid ""
2620
  "BPS version changes through the years and other beneficial reasons."
2621
  msgstr ""
2622
 
2623
- #: admin/core/core.php:2073 admin/db-backup-security/db-backup-security.php:292
2624
  #: admin/db-backup-security/db-backup-security.php:1242
2625
  #: admin/db-backup-security/db-backup-security.php:1398
2626
  #: admin/email-log-settings/email-log-settings.php:78
2627
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2628
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2629
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
2630
  msgid ""
2631
  "Protect all of your website files with AutoRestore|Quarantine Intrusion "
2632
  "Detection & Prevention System: "
2633
  msgstr ""
2634
 
2635
- #: admin/core/core.php:2073 admin/db-backup-security/db-backup-security.php:292
2636
  #: admin/db-backup-security/db-backup-security.php:1242
2637
  #: admin/db-backup-security/db-backup-security.php:1398
2638
  #: admin/email-log-settings/email-log-settings.php:78
2639
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2640
- #: admin/mscan/mscan.php:125 admin/security-log/security-log.php:218
2641
- #: admin/theme-skin/theme-skin.php:84 admin/wizard/wizard.php:1095
2642
- #: admin/wizard/wizard.php:1164
2643
  msgid "Get BPS Pro ARQ IDPS"
2644
  msgstr ""
2645
 
2646
- #: admin/core/core.php:2073 admin/email-log-settings/email-log-settings.php:78
2647
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2648
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2649
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
2650
  msgid ""
2651
  "Protect against SpamBot & HackerBot (auto-registering, auto-logins, auto-"
2652
  "posting, auto-commenting): "
2653
  msgstr ""
2654
 
2655
- #: admin/core/core.php:2073 admin/email-log-settings/email-log-settings.php:78
2656
  #: admin/login/login.php:204 admin/login/login.php:831
2657
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2658
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2659
- #: admin/wizard/wizard.php:1095 admin/wizard/wizard.php:1164
2660
  msgid "Get BPS Pro JTC Anti-Spam|Anti-Hacker"
2661
  msgstr ""
2662
 
2663
- #: admin/core/core.php:2078
2664
  msgid "General Help Info & Tips:"
2665
  msgstr ""
2666
 
2667
- #: admin/core/core.php:2082
2668
  msgid "If BPS plugin pages are not displaying visually correct you can "
2669
  msgstr ""
2670
 
2671
- #: admin/core/core.php:2086
2672
  msgid "BPS Video Tutorials|Setup Wizard: "
2673
  msgstr ""
2674
 
2675
- #: admin/core/core.php:2094
2676
  msgid "Troubleshooting Steps & The BPS Security Log: "
2677
  msgstr ""
2678
 
2679
- #: admin/core/core.php:2094
2680
  msgid ""
2681
  "All BPS plugin features can be turned Off/On individually to confirm, "
2682
  "eliminate or isolate a problem or issue that may or may not be caused by BPS."
2683
  msgstr ""
2684
 
2685
- #: admin/core/core.php:2094
2686
  msgid ""
2687
  "The BPS Security Log is a primary troubleshooting tool. If BPS is blocking "
2688
  "something legitimate in another plugin or theme then a Security Log entry "
@@ -2691,69 +2684,69 @@ msgid ""
2691
  "being blocked."
2692
  msgstr ""
2693
 
2694
- #: admin/core/core.php:2094
2695
  msgid ""
2696
  "Search the Forum site to see if a known issue or problem is already posted "
2697
  "with a solution/whitelist rule in the Forum."
2698
  msgstr ""
2699
 
2700
- #: admin/core/core.php:2107 admin/maintenance/maintenance.php:2133
2701
  msgid "Help & FAQ"
2702
  msgstr ""
2703
 
2704
- #: admin/core/core.php:2111 admin/email-log-settings/email-log-settings.php:215
2705
  #: admin/login/login.php:1829 admin/maintenance/maintenance.php:2138
2706
  #: admin/security-log/security-log.php:811
2707
  #: admin/system-info/system-info.php:1134
2708
  msgid "Contributors Page"
2709
  msgstr ""
2710
 
2711
- #: admin/core/core.php:2112
2712
  msgid "WP Permalinks - Custom Permalink Structure Help Info"
2713
  msgstr ""
2714
 
2715
- #: admin/core/core.php:2113 admin/email-log-settings/email-log-settings.php:214
2716
  #: admin/login/login.php:1828 admin/maintenance/maintenance.php:2139
2717
  #: admin/security-log/security-log.php:810
2718
  #: admin/system-info/system-info.php:1133
2719
  msgid "Security Log Event Codes"
2720
  msgstr ""
2721
 
2722
- #: admin/core/core.php:2114
2723
  msgid "Adding a Custom 403 Forbidden Page For Your Website"
2724
  msgstr ""
2725
 
2726
- #: admin/core/core.php:2115
2727
  #: admin/db-backup-security/db-backup-security.php:1747
2728
  #: admin/email-log-settings/email-log-settings.php:216
2729
  #: admin/login/login.php:1830 admin/maintenance/maintenance.php:2140
2730
- #: admin/mscan/mscan.php:2008 admin/security-log/security-log.php:812
2731
  #: admin/system-info/system-info.php:1135 admin/theme-skin/theme-skin.php:258
2732
  msgid "Forum: Search, Troubleshooting Steps & Post Questions For Assistance"
2733
  msgstr ""
2734
 
2735
- #: admin/core/core.php:2128
2736
  msgid "BulletProof Security Pro Feature Highlights"
2737
  msgstr ""
2738
 
2739
- #: admin/core/core.php:2138
2740
  msgid "The Ultimate Security Protection"
2741
  msgstr ""
2742
 
2743
- #: admin/core/core.php:2141
2744
  msgid "BPS Pro One-Click Setup Wizard & Demo Video Tutorial"
2745
  msgstr ""
2746
 
2747
- #: admin/core/core.php:2142
2748
  msgid "View All BPS Pro Features"
2749
  msgstr ""
2750
 
2751
- #: admin/core/core.php:2149
2752
  msgid ""
2753
  "The Complete Website Security Solution for Hacker and Spammer Protection"
2754
  msgstr ""
2755
 
2756
- #: admin/core/core.php:2149
2757
  msgid ""
2758
  "BulletProof Security Pro has an amazing track record. BPS Pro has been "
2759
  "publicly available for 9+ years and is installed on over 50,000 websites "
@@ -2761,47 +2754,47 @@ msgid ""
2761
  "hacked."
2762
  msgstr ""
2763
 
2764
- #: admin/core/core.php:2149
2765
  msgid ""
2766
  "Why pay 10 times or more for other premium WordPress Security Plugins with "
2767
  "recurring yearly subscriptions when you can get the best WordPress Security "
2768
  "Plugin for an extremely low one-time purchase price?"
2769
  msgstr ""
2770
 
2771
- #: admin/core/core.php:2149
2772
  msgid "View Cost Comparison"
2773
  msgstr ""
2774
 
2775
- #: admin/core/core.php:2149
2776
  msgid ""
2777
  "30-Day Money-Back Guarantee: If you are dissatisfied with BulletProof "
2778
  "Security Pro for any reason. We offer a no questions asked full refund."
2779
  msgstr ""
2780
 
2781
- #: admin/core/core.php:2152
2782
  msgid "One-Click Setup Wizard Installation: "
2783
  msgstr ""
2784
 
2785
- #: admin/core/core.php:2152
2786
  msgid ""
2787
  "Fast, simple and complete BPS Pro installation and setup in less than 1 "
2788
  "minute."
2789
  msgstr ""
2790
 
2791
- #: admin/core/core.php:2154
2792
  msgid "One-Click Upgrade: "
2793
  msgstr ""
2794
 
2795
- #: admin/core/core.php:2154
2796
  msgid "One-click plugin upgrade on the WordPress Plugins page."
2797
  msgstr ""
2798
 
2799
- #: admin/core/core.php:2156
2800
  msgid ""
2801
  "AutoRestore|Quarantine Intrusion Detection and Prevention System (ARQ IDPS): "
2802
  msgstr ""
2803
 
2804
- #: admin/core/core.php:2156
2805
  msgid ""
2806
  "ARQ IDPS is a real-time file scanner that automatically quarantines "
2807
  "malicious hacker files and autorestores legitimate website files if they "
@@ -2815,11 +2808,11 @@ msgid ""
2815
  "Plugin and Theme Automatic, Manual and Shiny installations and updates."
2816
  msgstr ""
2817
 
2818
- #: admin/core/core.php:2158
2819
  msgid "MScan Malware Scanner: "
2820
  msgstr ""
2821
 
2822
- #: admin/core/core.php:2158
2823
  msgid ""
2824
  "MScan Scheduled Scans are available in BPS Pro only. The BPS Pro ARQ IDPS "
2825
  "scanner is far superior to malware scanners including MScan, but both the "
@@ -2827,11 +2820,11 @@ msgid ""
2827
  "website if someone would like to do that."
2828
  msgstr ""
2829
 
2830
- #: admin/core/core.php:2160
2831
  msgid "Plugin Firewall|Plugin Firewall AutoPilot Mode: "
2832
  msgstr ""
2833
 
2834
- #: admin/core/core.php:2160
2835
  msgid ""
2836
  "The Plugin Firewall protects all of your Plugins (plugin folders and files) "
2837
  "with an IP Address Firewall, which prevents/blocks/forbids Remote Access to "
@@ -2845,11 +2838,11 @@ msgid ""
2845
  "firewall whitelist rules."
2846
  msgstr ""
2847
 
2848
- #: admin/core/core.php:2162
2849
  msgid "JTC Anti-Spam|Anti-Hacker (JTC): "
2850
  msgstr ""
2851
 
2852
- #: admin/core/core.php:2162
2853
  #, php-format
2854
  msgid ""
2855
  "Blocks 100% of all SpamBot and HackerBot Brute Force Login attacks (auto-"
@@ -2863,11 +2856,11 @@ msgid ""
2863
  "includes a SpamBot Trap."
2864
  msgstr ""
2865
 
2866
- #: admin/core/core.php:2164
2867
  msgid "Uploads Folder Anti-Exploit Guard (UAEG): "
2868
  msgstr ""
2869
 
2870
- #: admin/core/core.php:2164
2871
  msgid ""
2872
  "Protects the WordPress Uploads folder. ONLY safe image files with valid "
2873
  "image file extensions such as jpg, gif, png, etc. can be accessed, opened or "
@@ -2877,11 +2870,11 @@ msgid ""
2877
  "executed in the WordPress Uploads folder."
2878
  msgstr ""
2879
 
2880
- #: admin/core/core.php:2166
2881
  msgid "DB Monitor Intrusion Detection System (IDS): "
2882
  msgstr ""
2883
 
2884
- #: admin/core/core.php:2166
2885
  msgid ""
2886
  "The DB Monitor is an automated Intrusion Detection System (IDS) that alerts "
2887
  "you via email anytime a change/modification occurs in your WordPress "
@@ -2892,11 +2885,11 @@ msgid ""
2892
  "help info."
2893
  msgstr ""
2894
 
2895
- #: admin/core/core.php:2168
2896
  msgid "DB Diff Tool: "
2897
  msgstr ""
2898
 
2899
- #: admin/core/core.php:2168
2900
  msgid ""
2901
  "The DB Diff Tool compares old database tables from DB backups to current "
2902
  "database tables and displays any differences in the data/content of those 2 "
@@ -2904,11 +2897,11 @@ msgid ""
2904
  "not only just DB data."
2905
  msgstr ""
2906
 
2907
- #: admin/core/core.php:2170
2908
  msgid "DB Status & Info: "
2909
  msgstr ""
2910
 
2911
- #: admin/core/core.php:2170
2912
  msgid ""
2913
  "General DB Info shows commonly checked DB status and info about your "
2914
  "WordPress database at a glance. Extensive DB Info shows extensive DB status "
@@ -2917,11 +2910,11 @@ msgid ""
2917
  "SHOW GLOBAL VARIABLES and SHOW SESSION VARIABLES."
2918
  msgstr ""
2919
 
2920
- #: admin/core/core.php:2172
2921
  msgid "S-Monitor: "
2922
  msgstr ""
2923
 
2924
- #: admin/core/core.php:2172
2925
  msgid ""
2926
  "S-Monitor is the centralized Security Monitoring and Alerting Core where you "
2927
  "can manage and choose BPS Pro settings for Dashboard Alerts, Dashboard "
@@ -2931,11 +2924,11 @@ msgid ""
2931
  "easy to change all/any BPS Pro settings to your particular preferences."
2932
  msgstr ""
2933
 
2934
- #: admin/core/core.php:2174
2935
  msgid "Advanced Real-Time Alerting & Heads Up Dashboard Status Display: "
2936
  msgstr ""
2937
 
2938
- #: admin/core/core.php:2174
2939
  msgid ""
2940
  "BPS Pro checks and displays error, warning, notifications and alert messages "
2941
  "in real time. You can choose how you want these messages displayed to you "
@@ -2943,11 +2936,11 @@ msgid ""
2943
  "Dashboard, BPS Pro pages only, Turned off, Email Alerts, Logging..."
2944
  msgstr ""
2945
 
2946
- #: admin/core/core.php:2177
2947
  msgid "Custom php.ini|ini_set Options: "
2948
  msgstr ""
2949
 
2950
- #: admin/core/core.php:2177
2951
  msgid ""
2952
  "Quickly create a custom php.ini file for your website or use ini_set Options "
2953
  "to increase security and performance with just a few clicks. Additional P-"
@@ -2955,11 +2948,11 @@ msgid ""
2955
  "Protected PHP Error Log, PHP Error Alerts, Secure phpinfo Viewer..."
2956
  msgstr ""
2957
 
2958
- #: admin/core/core.php:2179
2959
  msgid "Pro Tools: 16 mini-plugins: "
2960
  msgstr ""
2961
 
2962
- #: admin/core/core.php:2179
2963
  msgid ""
2964
  "Online Base64 Decoder, Offline Base64 Decode|Encode, Mcrypt ~ Decrypt|"
2965
  "Encrypt, Crypt Encryption, Scheduled Crons (display and reschedule/reset "
@@ -2978,41 +2971,41 @@ msgid ""
2978
  "vulnerable to an XML-RPC exploit)."
2979
  msgstr ""
2980
 
2981
- #: admin/core/core.php:2187
2982
  msgid "BPS Pro Version Release Dates"
2983
  msgstr ""
2984
 
2985
- #: admin/core/core.php:2191 admin/core/core.php:2192 admin/core/core.php:2193
2986
  #: admin/core/core.php:2194 admin/core/core.php:2195 admin/core/core.php:2196
2987
- #: admin/core/core.php:2197 admin/core/core.php:2203 admin/core/core.php:2204
2988
- #: admin/core/core.php:2205 admin/core/core.php:2206 admin/core/core.php:2207
2989
- #: admin/core/core.php:2208 admin/core/core.php:2214 admin/core/core.php:2215
2990
- #: admin/core/core.php:2216 admin/core/core.php:2217 admin/core/core.php:2222
2991
- #: admin/core/core.php:2223 admin/core/core.php:2224 admin/core/core.php:2225
2992
- #: admin/core/core.php:2226 admin/core/core.php:2231 admin/core/core.php:2232
2993
- #: admin/core/core.php:2233 admin/core/core.php:2234 admin/core/core.php:2235
2994
  #: admin/core/core.php:2236 admin/core/core.php:2237 admin/core/core.php:2238
2995
- #: admin/core/core.php:2239 admin/core/core.php:2244 admin/core/core.php:2245
2996
- #: admin/core/core.php:2246 admin/core/core.php:2247 admin/core/core.php:2248
2997
  #: admin/core/core.php:2249 admin/core/core.php:2250 admin/core/core.php:2251
2998
  #: admin/core/core.php:2252 admin/core/core.php:2253 admin/core/core.php:2254
2999
- #: admin/core/core.php:2255 admin/core/core.php:2256 admin/core/core.php:2262
3000
- #: admin/core/core.php:2263 admin/core/core.php:2264 admin/core/core.php:2265
3001
  #: admin/core/core.php:2266 admin/core/core.php:2267 admin/core/core.php:2268
3002
  #: admin/core/core.php:2269 admin/core/core.php:2270 admin/core/core.php:2271
3003
  #: admin/core/core.php:2272 admin/core/core.php:2273 admin/core/core.php:2274
3004
- #: admin/core/core.php:2275 admin/core/core.php:2281 admin/core/core.php:2282
3005
- #: admin/core/core.php:2283 admin/core/core.php:2284 admin/core/core.php:2285
3006
  #: admin/core/core.php:2286 admin/core/core.php:2287 admin/core/core.php:2288
3007
  #: admin/core/core.php:2289 admin/core/core.php:2290 admin/core/core.php:2291
3008
- #: admin/core/core.php:2292 admin/core/core.php:2293 admin/core/core.php:2299
3009
- #: admin/core/core.php:2300 admin/core/core.php:2301 admin/core/core.php:2302
3010
  #: admin/core/core.php:2303 admin/core/core.php:2304 admin/core/core.php:2305
3011
  #: admin/core/core.php:2306 admin/core/core.php:2307 admin/core/core.php:2308
3012
- #: admin/core/core.php:2314 admin/core/core.php:2315 admin/core/core.php:2316
3013
- #: admin/core/core.php:2317 admin/core/core.php:2318 admin/core/core.php:2319
3014
  #: admin/core/core.php:2320 admin/core/core.php:2321 admin/core/core.php:2322
3015
- #: admin/core/core.php:2323
 
3016
  #, php-format
3017
  msgid ""
3018
  "<a href=\"%2$s\" target=\"_blank\" title=\"Link Opens in New Browser Window"
@@ -3537,7 +3530,7 @@ msgid "Displays the last time a DB Backup Log entry was logged."
3537
  msgstr ""
3538
 
3539
  #: admin/db-backup-security/db-backup-help-text.php:12
3540
- #: admin/mscan/mscan-help-text.php:44 admin/security-log/security-log.php:238
3541
  msgid "Delete Log Button"
3542
  msgstr ""
3543
 
@@ -3669,7 +3662,7 @@ msgstr ""
3669
  #: admin/db-backup-security/db-backup-security.php:281
3670
  #: admin/db-backup-security/db-backup-security.php:298
3671
  #: admin/db-backup-security/db-backup-security.php:300
3672
- #: admin/includes/admin.php:388
3673
  msgid "DB Backup"
3674
  msgstr ""
3675
 
@@ -3755,7 +3748,7 @@ msgstr ""
3755
  #: admin/db-backup-security/db-backup-security.php:896
3756
  #: admin/login/login.php:580 admin/login/login.php:609
3757
  #: admin/login/login.php:681 admin/login/login.php:710
3758
- #: admin/mscan/mscan.php:1443
3759
  msgid "Delete"
3760
  msgstr ""
3761
 
@@ -3854,7 +3847,7 @@ msgid "Backup Job Settings|Independent Options"
3854
  msgstr ""
3855
 
3856
  #: admin/db-backup-security/db-backup-security.php:992
3857
- #: admin/mscan/mscan.php:1018
3858
  msgid "All"
3859
  msgstr ""
3860
 
@@ -4321,7 +4314,7 @@ msgid ""
4321
  msgstr ""
4322
 
4323
  #: admin/db-backup-security/db-backup-security.php:1267
4324
- #: admin/mscan/mscan.php:1852
4325
  msgid ""
4326
  "Then click the Delete Log button to delete the contents of this Log file."
4327
  msgstr ""
@@ -4341,7 +4334,7 @@ msgid "Clicking OK will delete the contents of your DB Backup Log file."
4341
  msgstr ""
4342
 
4343
  #: admin/db-backup-security/db-backup-security.php:1304
4344
- #: admin/mscan/mscan.php:1896 admin/security-log/security-log.php:492
4345
  msgid "Click OK to Delete the Log file contents or click Cancel."
4346
  msgstr ""
4347
 
@@ -4491,12 +4484,12 @@ msgid ""
4491
  msgstr ""
4492
 
4493
  #: admin/db-backup-security/db-backup-security.php:1744
4494
- #: admin/mscan/mscan.php:2006 admin/theme-skin/theme-skin.php:256
4495
  msgid "BPS Pro Features & Version Release Dates"
4496
  msgstr ""
4497
 
4498
  #: admin/db-backup-security/db-backup-security.php:1745
4499
- #: admin/mscan/mscan.php:2007 admin/theme-skin/theme-skin.php:257
4500
  msgid "Video Tutorials"
4501
  msgstr ""
4502
 
@@ -4522,7 +4515,7 @@ msgstr ""
4522
 
4523
  #: admin/email-log-settings/email-log-settings.php:84
4524
  #: admin/email-log-settings/email-log-settings.php:86
4525
- #: admin/includes/admin.php:399
4526
  msgid "Email|Log Settings"
4527
  msgstr ""
4528
 
@@ -4681,127 +4674,130 @@ msgstr ""
4681
  msgid "WordPress Automatic Update Help Forum Topic"
4682
  msgstr ""
4683
 
4684
- #: admin/includes/admin.php:361
4685
  msgid "BulletProof Security Settings"
4686
  msgstr ""
4687
 
4688
- #: admin/includes/admin.php:361 admin/includes/admin.php:382
4689
  msgid "BPS Security"
4690
  msgstr ""
4691
 
4692
- #: admin/includes/admin.php:362 admin/includes/admin.php:363
4693
  msgid "Login Security ~ JTC-Lite"
4694
  msgstr ""
4695
 
4696
- #: admin/includes/admin.php:362 admin/includes/admin.php:385
4697
  msgid "Login Security"
4698
  msgstr ""
4699
 
4700
- #: admin/includes/admin.php:363 admin/includes/admin.php:386
4701
  #: admin/login/login.php:180 admin/login/login.php:837
4702
  #: admin/login/login.php:839
4703
  msgid "JTC-Lite"
4704
  msgstr ""
4705
 
4706
- #: admin/includes/admin.php:369 admin/includes/admin.php:395
4707
  #: admin/maintenance/maintenance.php:170 admin/maintenance/maintenance.php:202
4708
  #: admin/maintenance/maintenance.php:204
4709
  msgid "Maintenance Mode"
4710
  msgstr ""
4711
 
4712
- #: admin/includes/admin.php:375 admin/includes/admin.php:398
4713
  #: admin/system-info/system-info.php:71
4714
  msgid "System Info"
4715
  msgstr ""
4716
 
4717
- #: admin/includes/admin.php:378 admin/includes/admin.php:400
4718
  #: admin/theme-skin/theme-skin.php:74 admin/theme-skin/theme-skin.php:90
4719
  #: admin/theme-skin/theme-skin.php:92
4720
  msgid "UI|UX Settings"
4721
  msgstr ""
4722
 
4723
- #: admin/includes/admin.php:383
4724
  msgid "htaccess Core"
4725
  msgstr ""
4726
 
4727
- #: admin/includes/admin.php:384
4728
  msgid "MScan ~ Malware Scanner"
4729
  msgstr ""
4730
 
4731
- #: admin/includes/admin.php:384 admin/mscan/mscan.php:115
4732
- #: admin/mscan/mscan.php:135 admin/mscan/mscan.php:137
4733
  msgid "MScan"
4734
  msgstr ""
4735
 
4736
- #: admin/includes/admin.php:385 admin/includes/admin.php:386
4737
- #: admin/includes/admin.php:387
4738
  msgid "Login Security ~ JTC-Lite ~ ISL ~ ACE"
4739
  msgstr ""
4740
 
4741
- #: admin/includes/admin.php:387
4742
  msgid "Idle Session Logout<br>Cookie Expiration"
4743
  msgstr ""
4744
 
4745
- #: admin/includes/admin.php:388
4746
  msgid "DB Backup & Security"
4747
  msgstr ""
4748
 
4749
- #: admin/includes/admin.php:389 admin/security-log/security-log.php:209
4750
  #: admin/security-log/security-log.php:224
4751
  #: admin/security-log/security-log.php:226
4752
  msgid "Security Log"
4753
  msgstr ""
4754
 
4755
- #: admin/includes/admin.php:401 admin/wizard/wizard.php:1070
4756
- #: admin/wizard/wizard.php:1101 admin/wizard/wizard.php:1103
4757
- #: bulletproof-security.php:150 bulletproof-security.php:153
4758
  msgid "Setup Wizard"
4759
  msgstr ""
4760
 
4761
- #: admin/includes/admin.php:404 admin/includes/admin.php:412
 
 
 
 
4762
  #: admin/includes/uninstall.php:45
4763
  msgid "BPS Plugin Uninstall Options"
4764
  msgstr ""
4765
 
4766
- #: admin/includes/admin.php:451
4767
  msgid "BPS UI|UX Debug: SLF: CSS Script Loaded"
4768
  msgstr ""
4769
 
4770
- #: admin/includes/admin.php:484
4771
  msgid "BPS UI|UX Debug: SLF: js Script Loaded"
4772
  msgstr ""
4773
 
4774
- #: admin/includes/admin.php:567
4775
  msgid "BPS UI|UX Debug: Scripts|Styles Dequeued"
4776
  msgstr ""
4777
 
4778
- #: admin/includes/admin.php:579
4779
  msgid "Script Dequeued: "
4780
  msgstr ""
4781
 
4782
- #: admin/includes/admin.php:585
4783
  msgid ""
4784
  "No additional plugin or theme Scripts were found that needed to be Dequeued."
4785
  msgstr ""
4786
 
4787
- #: admin/includes/admin.php:597
4788
  msgid "Style Dequeued: "
4789
  msgstr ""
4790
 
4791
- #: admin/includes/admin.php:603
4792
  msgid ""
4793
  "No additional plugin or theme Styles were found that needed to be Dequeued."
4794
  msgstr ""
4795
 
4796
- #: admin/includes/admin.php:641 admin/includes/admin.php:674
4797
  msgid "BPS UI|UX Debug: WP Toolbar nodes|menu items Removed"
4798
  msgstr ""
4799
 
4800
- #: admin/includes/admin.php:653 admin/includes/admin.php:686
4801
  msgid "WP Toolbar node|menu item Removed: "
4802
  msgstr ""
4803
 
4804
- #: admin/includes/admin.php:661 admin/includes/admin.php:694
4805
  msgid "No WP Toolbar nodes|menu items were Removed in BPS plugin pages"
4806
  msgstr ""
4807
 
@@ -4825,15 +4821,15 @@ msgid ""
4825
  "click the Save Option button."
4826
  msgstr ""
4827
 
4828
- #: admin/includes/uninstall.php:52
4829
  msgid "BPS Plugin Uninstall Options:"
4830
  msgstr ""
4831
 
4832
- #: admin/includes/uninstall.php:54
4833
  msgid "BPS Pro Upgrade Uninstall"
4834
  msgstr ""
4835
 
4836
- #: admin/includes/uninstall.php:55
4837
  msgid "Complete BPS Plugin Uninstall"
4838
  msgstr ""
4839
 
@@ -4893,8 +4889,8 @@ msgstr ""
4893
 
4894
  #: admin/login/login.php:232 admin/login/login.php:329
4895
  #: admin/login/login.php:649 admin/login/login.php:750
4896
- #: admin/mscan/mscan.php:1254 admin/mscan/mscan.php:1466
4897
- #: admin/mscan/mscan.php:1588 admin/mscan/mscan.php:1744
4898
  msgid "Submit"
4899
  msgstr ""
4900
 
@@ -5123,7 +5119,7 @@ msgid ""
5123
  msgstr ""
5124
 
5125
  #: admin/login/login.php:649 admin/login/login.php:750
5126
- #: admin/mscan/mscan.php:1467 admin/mscan/mscan.php:1745
5127
  msgid "Clear|Refresh"
5128
  msgstr ""
5129
 
@@ -5787,8 +5783,8 @@ msgid ""
5787
  msgstr ""
5788
 
5789
  #: admin/login/lsm-help-text.php:10 admin/maintenance/maintenance.php:583
5790
- #: includes/hud-dismiss-functions.php:353
5791
- #: includes/hud-dismiss-functions.php:397
5792
  msgid "CAUTION: "
5793
  msgstr ""
5794
 
@@ -6907,9 +6903,9 @@ msgstr ""
6907
 
6908
  #: admin/maintenance/maintenance.php:418 admin/maintenance/maintenance.php:438
6909
  #: admin/wizard/wizard.php:160 includes/general-functions.php:509
6910
- #: includes/hud-dismiss-functions.php:353
6911
- #: includes/hud-dismiss-functions.php:397
6912
- #: includes/hud-dismiss-functions.php:502
6913
  msgid "Click Here"
6914
  msgstr ""
6915
 
@@ -7316,7 +7312,7 @@ msgstr ""
7316
  msgid "BackEnd Maintenance Mode has been Turned Off."
7317
  msgstr ""
7318
 
7319
- #: admin/mscan/mscan-help-text.php:41
7320
  msgid ""
7321
  "For more extensive help info and answers to common issues or problems click "
7322
  "the MScan Malware Scanner Guide link above. For troubleshooting help or to "
@@ -7324,48 +7320,183 @@ msgid ""
7324
  "above."
7325
  msgstr ""
7326
 
7327
- #: admin/mscan/mscan-help-text.php:41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7328
  msgid "Start Scan"
7329
  msgstr ""
7330
 
7331
- #: admin/mscan/mscan-help-text.php:41
7332
  msgid "Clicking the Start Scan button starts a scan."
7333
  msgstr ""
7334
 
7335
- #: admin/mscan/mscan-help-text.php:41
7336
  msgid "Stop Scan"
7337
  msgstr ""
7338
 
7339
- #: admin/mscan/mscan-help-text.php:41
7340
- msgid "Clicking the Stop Scan button stops a scan."
 
 
7341
  msgstr ""
7342
 
7343
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1004
7344
- msgid "Hosting Account Root Folders"
7345
  msgstr ""
7346
 
7347
- #: admin/mscan/mscan-help-text.php:41
7348
  msgid ""
7349
- "All of your hosting account folders are checked/selected by default and will "
7350
- "be scanned. Checking a checkbox means scan that folder. Unchecking a "
7351
- "checkbox means do not scan that folder."
 
 
 
7352
  msgstr ""
7353
 
7354
- #: admin/mscan/mscan-help-text.php:41
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7355
  msgid "Max File Size Limit to Scan"
7356
  msgstr ""
7357
 
7358
- #: admin/mscan/mscan-help-text.php:41
7359
  msgid ""
7360
- "Files that are larger than 400KB will be skipped by default in a regular "
7361
- "scan and can be scanned using a Skipped File scan."
 
 
7362
  msgstr ""
7363
 
7364
- #: admin/mscan/mscan-help-text.php:41
7365
  msgid "Max Time Limit to Scan"
7366
  msgstr ""
7367
 
7368
- #: admin/mscan/mscan-help-text.php:41
7369
  msgid ""
7370
  "The default time limit for script execution on most web hosts is 300 "
7371
  "seconds. The default time limit setting for MScan scanning is also set to "
@@ -7373,11 +7504,11 @@ msgid ""
7373
  "than 300 seconds."
7374
  msgstr ""
7375
 
7376
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1082
7377
  msgid "Exclude Individual Folders"
7378
  msgstr ""
7379
 
7380
- #: admin/mscan/mscan-help-text.php:41
7381
  msgid ""
7382
  "Enter relative folder paths one folder path per line. A relative folder path "
7383
  "is this: /some-folder/some-subfolder. A literal path would be the full "
@@ -7390,121 +7521,144 @@ msgid ""
7390
  "particular cache folder under the wp-content folder."
7391
  msgstr ""
7392
 
7393
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1088
7394
  msgid "Scan Database"
7395
  msgstr ""
7396
 
7397
- #: admin/mscan/mscan-help-text.php:41
7398
  msgid ""
7399
  "When Database scan is turned on your WordPress database will be scanned for "
7400
  "suspicious code."
7401
  msgstr ""
7402
 
7403
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1094
7404
- msgid "Scan Image Files (Stegosploit|Exif Hack)"
7405
- msgstr ""
7406
-
7407
- #: admin/mscan/mscan-help-text.php:41
7408
- msgid ""
7409
- "WARNING: Scanning image files may cause scanning to stop or fail. Most web "
7410
- "hosts already have security protection against Stegosploit and Exif image "
7411
- "hacks. It is recommended that you do not scan image files."
7412
- msgstr ""
7413
-
7414
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1100
7415
  msgid "Scan Skipped Files Only"
7416
  msgstr ""
7417
 
7418
- #: admin/mscan/mscan-help-text.php:41
7419
  msgid ""
7420
- "When Skipped File Scan is On only skipped files will be scanned. Note: The "
7421
- "only MScan option setting that has any effect while Skipped File Scan is On "
7422
- "is Image File Scan On or Off. You do not need to change any of your other "
7423
- "MScan option settings when running a Skipped File scan."
 
7424
  msgstr ""
7425
 
7426
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1106
7427
  msgid "Automatically Delete /tmp Files"
7428
  msgstr ""
7429
 
7430
- #: admin/mscan/mscan-help-text.php:41
7431
  msgid ""
7432
  "When Delete Tmp Files is On, all temporary files will be deleted. Hackers "
7433
  "commonly hide hacker files in the /tmp folder."
7434
  msgstr ""
7435
 
7436
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1112
7437
  msgid "Exclude /tmp Files"
7438
  msgstr ""
7439
 
7440
- #: admin/mscan/mscan-help-text.php:41
7441
  msgid ""
7442
  "Enter 1 file name per line. Some web hosts store files such as, mysql.sock, ."
7443
  "s.PGSQL.5432 and .per-user in the /tmp folder. These files cannot be deleted "
7444
  "by MScan, but attempting to delete these files will generate php errors. To "
7445
  "prevent php errors from occurring you would exclude files such as these "
7446
- "using the MScan Exclude /tmp files option setting."
 
7447
  msgstr ""
7448
 
7449
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1118
7450
- msgid "Scheduled Scan Frequency (BPS Pro only)"
7451
  msgstr ""
7452
 
7453
- #: admin/mscan/mscan-help-text.php:41
7454
  msgid ""
7455
  "You can choose to schedule ongoing automated scans. Note: The BPS Pro ARQ "
7456
  "IDPS scanner is far superior to any/all Malware scanners including BPS Pro "
7457
- "MScan. Click the MScan Malware Scanner Guide link above for more information "
7458
- "regarding using ARQ IDPS and MScan together."
7459
- msgstr ""
7460
-
7461
- #: admin/mscan/mscan-help-text.php:41
7462
- msgid "Scan Time Estimate Tool"
7463
- msgstr ""
7464
-
7465
- #: admin/mscan/mscan-help-text.php:41
7466
- msgid ""
7467
- "IMPORTANT: You can stop the scan time estimate if it hangs or is taking too "
7468
- "long by clicking the Stop Scan button. This tool allows you to check the "
7469
- "estimated total scan time of a scan based on your MScan option settings "
7470
- "without actually performing/running a scan. Note: This tool does not affect "
7471
- "or change any previous scan results except for the Total Scan Time, which "
7472
- "will be changed to the estimated scan time. Example Usage: You can check or "
7473
- "uncheck Hosting Account Root Folders checkboxes and change any other MScan "
7474
- "option settings, save your MScan option settings and then run the Scan Time "
7475
- "Estimate Tool to get the total estimated time that the actual scan will take."
7476
- msgstr ""
7477
-
7478
- #: admin/mscan/mscan-help-text.php:41
7479
- msgid "Delete Scan Status Tool"
7480
- msgstr ""
7481
-
7482
- #: admin/mscan/mscan-help-text.php:41
7483
- msgid ""
7484
- "This tool allows you to delete all of the MScan Status option values. The "
7485
- "Scan Completed timestamp, Total Scan Time, Total Files Scanned, Skipped "
7486
- "Files, Suspicious Files and Suspicious DB Entries status values will be "
7487
- "deleted and will either display blank or 0."
7488
- msgstr ""
7489
-
7490
- #: admin/mscan/mscan-help-text.php:41
7491
- msgid "Delete DB Scan Data Tool"
7492
- msgstr ""
7493
-
7494
- #: admin/mscan/mscan-help-text.php:41
7495
- msgid ""
7496
- "This tool allows you to delete/reset all of the database scan data in the "
7497
- "View|Ignore|Delete Suspicious Files and View|Ignore Suspicious DB Entries "
7498
- "Forms. Note: Any/all changes you have made and saved in these Forms will be "
7499
- "deleted. You may want to use BPS DB Backup and do a database backup before "
7500
- "using this tool."
7501
  msgstr ""
7502
 
7503
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1181
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7504
  msgid "View|Ignore|Delete Suspicious Files"
7505
  msgstr ""
7506
 
7507
- #: admin/mscan/mscan-help-text.php:41
7508
  msgid ""
7509
  "This form allows you to view, ignore, unignore or delete suspicious and "
7510
  "skipped files. If you are not sure if code is malicious or safe you can copy "
@@ -7515,11 +7669,11 @@ msgid ""
7515
  "ignored file it will be scanned in future scans."
7516
  msgstr ""
7517
 
7518
- #: admin/mscan/mscan-help-text.php:41 admin/mscan/mscan.php:1518
7519
  msgid "View|Ignore Suspicious DB Entries"
7520
  msgstr ""
7521
 
7522
- #: admin/mscan/mscan-help-text.php:41
7523
  msgid ""
7524
  "This form allows you to view, ignore or unignore suspicious DB Entries. "
7525
  "Note: The view option displays the DB Table, Column, Row ID and the MScan "
@@ -7529,11 +7683,11 @@ msgid ""
7529
  "When you unignore an ignored DB Entry it will be scanned in future scans."
7530
  msgstr ""
7531
 
7532
- #: admin/mscan/mscan-help-text.php:44
7533
  msgid "MScan Log General Information"
7534
  msgstr ""
7535
 
7536
- #: admin/mscan/mscan-help-text.php:44
7537
  msgid ""
7538
  "Your MScan Log file is a plain text static file and not a dynamic file or "
7539
  "dynamic display to keep your website resource usage at a bare minimum and "
@@ -7544,19 +7698,19 @@ msgid ""
7544
  "a certain size (256KB, 500KB or 1MB)."
7545
  msgstr ""
7546
 
7547
- #: admin/mscan/mscan-help-text.php:44
7548
  msgid "MScan Logging"
7549
  msgstr ""
7550
 
7551
- #: admin/mscan/mscan-help-text.php:44
7552
  msgid "Logs extensive details about each scan that you run."
7553
  msgstr ""
7554
 
7555
- #: admin/mscan/mscan-help-text.php:44
7556
  msgid "MScan Log File Size"
7557
  msgstr ""
7558
 
7559
- #: admin/mscan/mscan-help-text.php:44
7560
  msgid ""
7561
  "Displays the size of your MScan Log file. If your log file is larger than "
7562
  "2MB then you will see a Red warning message displayed: The S-Monitor Email "
@@ -7566,17 +7720,17 @@ msgid ""
7566
  "contents of this Log file."
7567
  msgstr ""
7568
 
7569
- #: admin/mscan/mscan-help-text.php:44
7570
  msgid "MScan Log Last Modified Time"
7571
  msgstr ""
7572
 
7573
- #: admin/mscan/mscan-help-text.php:44
7574
  msgid ""
7575
  "The Reset Last Modified Time in DB option/feature is currently completely "
7576
  "automated and does not require any manual steps performed by you."
7577
  msgstr ""
7578
 
7579
- #: admin/mscan/mscan-help-text.php:44
7580
  msgid ""
7581
  "Clicking the Delete Log button will delete the entire contents of your MScan "
7582
  "Log File. If you have setup S-Monitor Email Alerting & Log Options then the "
@@ -7584,560 +7738,581 @@ msgid ""
7584
  "MScan Log file exceeds 2MB in size."
7585
  msgstr ""
7586
 
7587
- #: admin/mscan/mscan.php:61
7588
- msgid "The MScan pattern matching code does not exist in your database."
7589
- msgstr ""
7590
-
7591
- #: admin/mscan/mscan.php:61
7592
- msgid ""
7593
- "Most likely your web host saw the pattern matching code in the MScan /"
7594
- "bulletproof-security/admin/htaccess/mscan-pattern-match.php file as "
7595
- "malicious and has either deleted the file or made the file or folder "
7596
- "unreadable."
7597
  msgstr ""
7598
 
7599
- #: admin/mscan/mscan.php:61
7600
  msgid ""
7601
- "Unfortunately that means you will not be able to use MScan on your website/"
7602
- "server/web host."
 
 
 
7603
  msgstr ""
7604
 
7605
- #: admin/mscan/mscan.php:68
7606
- msgid "BulletProof Security ~ MScan Malware Scanner"
7607
  msgstr ""
7608
 
7609
- #: admin/mscan/mscan.php:102
7610
  msgid ""
7611
- "The open_basedir php.ini directive is enabled on your website/server. MScan "
7612
- "scans will take 6 times longer to complete when open_basedir is enabled, the "
7613
- "estimated scan time caculations will not be correct and the MScan Progress "
7614
- "Bar will not be accurate when open_basedir is enabled. New estimated scan "
7615
- "time calculations are pending in a future version of BPS to accomodate "
7616
- "open_basedir if you would like to continue to use open_basedir. "
7617
- "Recommendation: disable open_basedir in your server php.ini file or custom "
7618
- "php.ini file."
7619
- msgstr ""
7620
-
7621
- #: admin/mscan/mscan.php:116 admin/mscan/mscan.php:1800
7622
- #: admin/mscan/mscan.php:1802
7623
- msgid "MScan Log"
7624
  msgstr ""
7625
 
7626
- #: admin/mscan/mscan.php:125
7627
- msgid "MScan ~ "
7628
  msgstr ""
7629
 
7630
- #: admin/mscan/mscan.php:125
7631
  msgid ""
7632
- "Scans website files for hacker files or code ~ Scans the WP database for "
7633
- "hacker code."
 
 
 
 
 
 
7634
  msgstr ""
7635
 
7636
- #: admin/mscan/mscan.php:125
7637
- msgid ""
7638
- "Get real-time automated security protection that is far superior to all "
7639
- "malware scanners: "
7640
- msgstr ""
7641
-
7642
- #: admin/mscan/mscan.php:127
7643
- msgid "MScan Disclaimer:"
7644
- msgstr ""
7645
-
7646
- #: admin/mscan/mscan.php:127
7647
- msgid ""
7648
- "MScan is a very sensitive scanner that will detect hacker's code and files "
7649
- "that other WordPress malware scanners will not detect, but unfortunately "
7650
- "that also means that MScan will detect a lot of false-positives. The "
7651
- "majority of things that MScan detects as suspicious are not going to be "
7652
- "hacker's code or files and can be ignored using the Ignore File or Ignore DB "
7653
- "Entry in the View|Ignore|Delete Suspicious Files and View|Ignore Suspicious "
7654
- "DB Entries Forms below. For additional help information click this link: "
7655
- msgstr ""
7656
-
7657
- #: admin/mscan/mscan.php:127 admin/mscan/mscan.php:145
7658
- #: includes/hud-dismiss-functions.php:627
7659
- msgid "MScan Malware Scanner Guide"
7660
- msgstr ""
7661
-
7662
- #: admin/mscan/mscan.php:146
7663
- msgid "MScan Troubleshooting & Code Posting"
7664
- msgstr ""
7665
-
7666
- #: admin/mscan/mscan.php:187
7667
- msgid "The MScan Database Table: "
7668
- msgstr ""
7669
-
7670
- #: admin/mscan/mscan.php:187
7671
- msgid " data has been deleted."
7672
  msgstr ""
7673
 
7674
- #: admin/mscan/mscan.php:223
7675
  msgid ""
7676
- "MScan Status option values have been deleted. The Scan Completed timestamp, "
7677
- "Total Scan Time, Total Files Scanned, Skipped Files, Suspicious Files and "
7678
- "Suspicious DB Entries status values have been deleted and will either "
7679
- "display blank or 0"
7680
- msgstr ""
7681
-
7682
- #: admin/mscan/mscan.php:264 admin/mscan/mscan.php:326
7683
- #: admin/mscan/mscan.php:581 admin/mscan/mscan.php:852
7684
- msgid "Skipped file scanning is turned On. Only skipped files will be scanned."
7685
  msgstr ""
7686
 
7687
- #: admin/mscan/mscan.php:268 admin/mscan/mscan.php:330
7688
- #: admin/mscan/mscan.php:433 admin/mscan/mscan.php:523
7689
- #: admin/mscan/mscan.php:860
7690
  msgid ""
7691
- "Image file scanning is turned On. On some web hosts scanning image files "
7692
- "will cause the scan to stop/fail."
7693
  msgstr ""
7694
 
7695
- #: admin/mscan/mscan.php:272
7696
- msgid ""
7697
- "MScan scanning has been stopped. Note: The Stop Scan button also stops the "
7698
- "Scan Time Estimate Tool from calculating estimated scan time."
7699
  msgstr ""
7700
 
7701
- #: admin/mscan/mscan.php:342
7702
- msgid ""
7703
- "Calculating Scan Time. The default scan time calculation time of 30 seconds "
7704
- "was exceeded. If it takes longer than 30 seconds to calculate total scan "
7705
- "time, an additional 30 seconds will be added to the scan time calculation "
7706
- "time until actual file scanning starts. Click the Refresh button to refresh "
7707
- "the MScan Progress Bar if it is not automatically refreshed. If you see this "
7708
- "message more than five times, click the Stop Scan button to stop the scan. "
7709
- "Either you are attempting to scan too many files at one time or the scan "
7710
- "time calculation is stuck in a time reset loop. Check your MScan Log file to "
7711
- "see if the the estimated scan time was successfully logged."
7712
  msgstr ""
7713
 
7714
- #: admin/mscan/mscan.php:342
7715
- msgid "Refresh"
 
7716
  msgstr ""
7717
 
7718
- #: admin/mscan/mscan.php:350
7719
- msgid ""
7720
- "The estimated total scan time is more than the Max Time Limit to Scan option "
7721
- "setting time limit."
7722
  msgstr ""
7723
 
7724
- #: admin/mscan/mscan.php:350
7725
- msgid ""
7726
- "The scan will automatically end/stop when the Max Time Limit to Scan option "
7727
- "setting time limit is reached."
7728
  msgstr ""
7729
 
7730
- #: admin/mscan/mscan.php:350
7731
- msgid "Estimated Total Scan Time: "
7732
  msgstr ""
7733
 
7734
- #: admin/mscan/mscan.php:350
7735
- msgid "Max Time Limit to Scan: "
7736
  msgstr ""
7737
 
7738
- #: admin/mscan/mscan.php:350
7739
- msgid "Click the MScan Read Me help button for a recommended solution."
7740
  msgstr ""
7741
 
7742
- #: admin/mscan/mscan.php:356
7743
- msgid ""
7744
- "MScan Scanning has started. You can leave the MScan page while a scan is in "
7745
- "progress and the scan will continue until it is completed or you can open "
7746
- "another Browser Tab/Window and leave this Browser Tab/Window open."
7747
  msgstr ""
7748
 
7749
- #: admin/mscan/mscan.php:375 admin/mscan/mscan.php:381
7750
- msgid "Suspicious code or files were detected."
7751
  msgstr ""
7752
 
7753
- #: admin/mscan/mscan.php:375 admin/mscan/mscan.php:381
7754
  msgid ""
7755
- "Click the View|Ignore|Delete Suspicious Files accordion tab to View, Ignore "
7756
- "or Delete suspicious files. For additional help information click the MScan "
7757
- "Read Me help button."
7758
  msgstr ""
7759
 
7760
- #: admin/mscan/mscan.php:385
7761
- msgid "Suspicious code was detected in your database."
7762
- msgstr ""
7763
-
7764
- #: admin/mscan/mscan.php:385
7765
  msgid ""
7766
- "Click the View|Ignore Suspicious DB Entries accordion tab to view and ignore "
7767
- "suspicious db entries. For additional help information click the MScan Read "
7768
- "Me help button."
 
7769
  msgstr ""
7770
 
7771
- #: admin/mscan/mscan.php:390
7772
- msgid ""
7773
- "MScan Scan has completed. To view extensive details of all scanning phases "
7774
- "view the MScan Log file."
7775
  msgstr ""
7776
 
7777
- #: admin/mscan/mscan.php:429
7778
  msgid ""
7779
- "Skipped file scanning is turned On. The scan time estimate is for scanning "
7780
- "skipped files only."
7781
  msgstr ""
7782
 
7783
- #: admin/mscan/mscan.php:437
7784
- msgid ""
7785
- "The total estimated time of an actual scan based on your MScan option "
7786
- "settings is: "
7787
  msgstr ""
7788
 
7789
- #: admin/mscan/mscan.php:437
7790
  msgid ""
7791
- "Seconds. The MScan Log file contains extensive details about the estimated "
7792
- "scan time. Note: The Scan Time Estimate Tool does not affect or change any "
7793
- "previous scan results except for the Total Scan Time, which will be changed "
7794
- "to the estimated scan time."
7795
  msgstr ""
7796
 
7797
- #: admin/mscan/mscan.php:519
7798
- msgid ""
7799
- "Skipped file scanning is turned On. The scan time estimate will be for "
7800
- "scanning skipped files only."
7801
  msgstr ""
7802
 
7803
- #: admin/mscan/mscan.php:527
7804
- msgid ""
7805
- "Calculating Estimated Scan Time. Notes: The Scan Time Estimate Tool does not "
7806
- "affect or change any previous scan results except for the Total Scan Time, "
7807
- "which will be changed to the estimated scan time. If the scan time estimate "
7808
- "hangs or is taking too long click the Stop Scan button to stop calculating "
7809
- "the estimated scan time."
7810
  msgstr ""
7811
 
7812
- #: admin/mscan/mscan.php:585
7813
  msgid ""
7814
- "Calculating Scan Time. You can leave the MScan page while a scan is in "
7815
- "progress and the scan will continue until it is completed or you can open "
7816
- "another Browser Tab/Window and leave this Browser Tab/Window open."
7817
- msgstr ""
7818
-
7819
- #: admin/mscan/mscan.php:741
7820
- msgid "Click OK to start scanning or click Cancel."
7821
- msgstr ""
7822
-
7823
- #: admin/mscan/mscan.php:748
7824
- msgid "Click OK to stop scanning or click Cancel."
7825
  msgstr ""
7826
 
7827
- #: admin/mscan/mscan.php:755
7828
  msgid "MScan Options & Tools"
7829
  msgstr ""
7830
 
7831
- #: admin/mscan/mscan.php:768
7832
  msgid "Save MScan Options"
7833
  msgstr ""
7834
 
7835
- #: admin/mscan/mscan.php:856
7836
  msgid ""
7837
  "Skipped file scanning is turned On. There are no skipped files to be "
7838
  "scanned. Either there really are not any skipped files to scan or you have "
7839
  "not run a regular scan yet with the Skipped File Scan option turned Off."
7840
  msgstr ""
7841
 
7842
- #: admin/mscan/mscan.php:864
7843
  msgid "Warning: "
7844
  msgstr ""
7845
 
7846
- #: admin/mscan/mscan.php:864
7847
  msgid ""
7848
  "On some web hosts (Known host issues: SiteGround, Cyon) turning On the "
7849
  "\"Automatically Delete /tmp Files\" option setting will cause your website/"
7850
  "server to crash. If your website/server does crash contact your web host "
7851
  "support folks, tell them that you deleted /tmp files and your website/server "
7852
- "has crashed."
 
 
7853
  msgstr ""
7854
 
7855
- #: admin/mscan/mscan.php:868
7856
  msgid "MScan Options saved."
7857
  msgstr ""
7858
 
7859
- #: admin/mscan/mscan.php:1005
 
 
 
 
7860
  msgid "MScan Options"
7861
  msgstr ""
7862
 
7863
- #: admin/mscan/mscan.php:1006
7864
  msgid "MScan Tools"
7865
  msgstr ""
7866
 
7867
- #: admin/mscan/mscan.php:1019
7868
  msgid "Folder Name"
7869
  msgstr ""
7870
 
7871
- #: admin/mscan/mscan.php:1035
7872
  msgid "Folder is not readable"
7873
  msgstr ""
7874
 
7875
- #: admin/mscan/mscan.php:1048
7876
  msgid ""
7877
- "This folder contains another WordPress website. Click the MScan Read Me help "
7878
- "button above and read the \"Scanning Other WordPress Sites\" help section."
 
 
7879
  msgstr ""
7880
 
7881
- #: admin/mscan/mscan.php:1074
7882
  msgid "Max File Size Limit to Scan:"
7883
  msgstr ""
7884
 
7885
- #: admin/mscan/mscan.php:1078
7886
  msgid "Max Time Limit to Scan:"
7887
  msgstr ""
7888
 
7889
- #: admin/mscan/mscan.php:1082
7890
  msgid "Enter one folder path per line. Include folder slashes."
7891
  msgstr ""
7892
 
7893
- #: admin/mscan/mscan.php:1082 admin/mscan/mscan.php:1112
7894
  msgid "Example:"
7895
  msgstr ""
7896
 
7897
- #: admin/mscan/mscan.php:1082 admin/mscan/mscan.php:1100
7898
- #: admin/mscan/mscan.php:1112
7899
  msgid "Click the MScan Read Me help button for more help info."
7900
  msgstr ""
7901
 
7902
- #: admin/mscan/mscan.php:1090
7903
  msgid "Database Scan On"
7904
  msgstr ""
7905
 
7906
- #: admin/mscan/mscan.php:1091
7907
  msgid "Database Scan Off"
7908
  msgstr ""
7909
 
7910
- #: admin/mscan/mscan.php:1096
7911
- msgid "Image File Scan Off"
7912
- msgstr ""
7913
-
7914
- #: admin/mscan/mscan.php:1097
7915
- msgid "Image File Scan On"
7916
- msgstr ""
7917
-
7918
- #: admin/mscan/mscan.php:1100
7919
  msgid ""
7920
- "When Skipped File Scan is On only skipped files will be scanned. Note: The "
7921
- "only MScan option setting that has any affect while Skipped File Scan is On "
7922
- "is Image File Scan On or Off."
7923
  msgstr ""
7924
 
7925
- #: admin/mscan/mscan.php:1102
7926
  msgid "Skipped File Scan Off"
7927
  msgstr ""
7928
 
7929
- #: admin/mscan/mscan.php:1103
7930
  msgid "Skipped File Scan On"
7931
  msgstr ""
7932
 
7933
- #: admin/mscan/mscan.php:1108
7934
  msgid "Delete Tmp Files Off"
7935
  msgstr ""
7936
 
7937
- #: admin/mscan/mscan.php:1109
7938
  msgid "Delete Tmp Files On"
7939
  msgstr ""
7940
 
7941
- #: admin/mscan/mscan.php:1112
7942
  msgid "Enter one file name per line."
7943
  msgstr ""
7944
 
7945
- #: admin/mscan/mscan.php:1120
 
 
 
 
7946
  msgid "Scheduled Scan Off"
7947
  msgstr ""
7948
 
7949
- #: admin/mscan/mscan.php:1121
7950
  msgid "Run Scan Every 60 Minutes"
7951
  msgstr ""
7952
 
7953
- #: admin/mscan/mscan.php:1122
7954
  msgid "Run Scan Every 3 Hours"
7955
  msgstr ""
7956
 
7957
- #: admin/mscan/mscan.php:1123
7958
  msgid "Run Scan Every 6 Hours"
7959
  msgstr ""
7960
 
7961
- #: admin/mscan/mscan.php:1124
7962
  msgid "Run Scan Every 12 Hours"
7963
  msgstr ""
7964
 
7965
- #: admin/mscan/mscan.php:1125
7966
  msgid "Run Scan Every 24 Hours"
7967
  msgstr ""
7968
 
7969
- #: admin/mscan/mscan.php:1128
7970
  msgid "Click OK to save MScan Options or click Cancel"
7971
  msgstr ""
7972
 
7973
- #: admin/mscan/mscan.php:1137
7974
  msgid ""
7975
- "IMPORTANT: You can stop the scan time estimate if it hangs or is taking too "
7976
- "long by clicking the Stop Scan button.\\n"
7977
  "\\n-------------------------------------------------------------\\n\\nThis "
7978
- "tool allows you to check the estimated total scan time of a scan based on "
7979
- "your MScan option settings without actually performing/running a scan. Note: "
7980
- "This tool does not affect or change any previous scan results except for the "
7981
- "Total Scan Time, which will be changed to the estimated scan time.\\n"
7982
- "\\n-------------------------------------------------------------\\n"
7983
- "\\nExample Usage: You can check or uncheck Hosting Account Root Folders "
7984
- "checkboxes and change any other MScan option settings, save your MScan "
7985
- "option settings and then run the Scan Time Estimate Tool to get the total "
7986
- "estimated time that the actual scan will take. For additional help "
7987
- "information click the MScan Read Me help button.\\n"
7988
  "\\n-------------------------------------------------------------\\n\\nClick "
7989
- "OK to get a scan time estimate or click Cancel"
7990
  msgstr ""
7991
 
7992
- #: admin/mscan/mscan.php:1142
7993
  msgid ""
7994
- "This tool allows you to delete all of the MScan Status option values.\\n"
7995
- "\\n-------------------------------------------------------------\\n\\nThe "
7996
- "Scan Completed timestamp, Total Scan Time, Total Files Scanned, Skipped "
7997
- "Files, Suspicious Files and Suspicious DB Entries status values will be "
7998
- "deleted and will either display blank or 0. For additional help information "
7999
- "click the MScan Read Me help button.\\n"
8000
- "\\n-------------------------------------------------------------\\n\\nClick "
8001
- "OK to delete scan status option values or click Cancel"
8002
  msgstr ""
8003
 
8004
- #: admin/mscan/mscan.php:1147
8005
  msgid ""
8006
- "Deleting all database scan data is a reset that deletes any/all changes you "
8007
- "have made and saved using the View|Ignore|Delete Suspicious Files and View|"
8008
- "Ignore Suspicious DB Entries Forms.\\n"
8009
- "\\n-------------------------------------------------------------\\n\\nClick "
8010
- "OK to delete all database Scan Data or click Cancel"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8011
  msgstr ""
8012
 
8013
- #: admin/mscan/mscan.php:1295
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8014
  msgid " has been deleted."
8015
  msgstr ""
8016
 
8017
- #: admin/mscan/mscan.php:1316
8018
  msgid ""
8019
  " Current Status has been changed to Ignored File and this file will not be "
8020
  "scanned in any future MScan Scans."
8021
  msgstr ""
8022
 
8023
- #: admin/mscan/mscan.php:1337
8024
  msgid ""
8025
  " Ignored File Status has been removed. The previous Status of the file will "
8026
  "be displayed again and this file will be scanned in future MScan scans."
8027
  msgstr ""
8028
 
8029
- #: admin/mscan/mscan.php:1359 admin/mscan/mscan.php:1368
8030
  msgid "Close File"
8031
  msgstr ""
8032
 
8033
- #: admin/mscan/mscan.php:1359 admin/mscan/mscan.php:1368
8034
- #: admin/mscan/mscan.php:1665
8035
  msgid "MScan Pattern Match"
8036
  msgstr ""
8037
 
8038
- #: admin/mscan/mscan.php:1359
8039
  msgid ""
8040
  "Only the MScan Pattern Match is displayed for images instead of the image "
8041
  "file code."
8042
  msgstr ""
8043
 
8044
- #: admin/mscan/mscan.php:1359
8045
  msgid ""
8046
  "Opening image files to view image file code does not work well in a Browser."
8047
  msgstr ""
8048
 
8049
- #: admin/mscan/mscan.php:1359
8050
  msgid ""
8051
  "You can download suspicious image files and use a code editor like Notepad++ "
8052
  "to check image file code for any malicious code."
8053
  msgstr ""
8054
 
8055
- #: admin/mscan/mscan.php:1359 admin/mscan/mscan.php:1368
8056
- #: admin/mscan/mscan.php:1665
8057
  msgid ""
8058
  "If you are not sure what to check for or what is and is not malicious code "
8059
  "then click the MScan Read Me help button."
8060
  msgstr ""
8061
 
8062
- #: admin/mscan/mscan.php:1368
8063
  msgid ""
8064
  "You can use your Browser's Search or Find feature to search the file "
8065
  "contents/code displayed below using the MScan Pattern Match above for the "
8066
  "suspicious code that was detected by MScan."
8067
  msgstr ""
8068
 
8069
- #: admin/mscan/mscan.php:1368
8070
  msgid ""
8071
  "You can download suspicious files if you would like to check the file "
8072
  "contents/code more extensively with a code editor like Notepad++."
8073
  msgstr ""
8074
 
8075
- #: admin/mscan/mscan.php:1396 admin/mscan/mscan.php:1687
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8076
  msgid "Current Status"
8077
  msgstr ""
8078
 
8079
- #: admin/mscan/mscan.php:1397
8080
  msgid "View<br>File"
8081
  msgstr ""
8082
 
8083
- #: admin/mscan/mscan.php:1398
8084
  msgid "Ignore<br>File"
8085
  msgstr ""
8086
 
8087
- #: admin/mscan/mscan.php:1399
8088
  msgid "Unignore<br>File"
8089
  msgstr ""
8090
 
8091
- #: admin/mscan/mscan.php:1400
8092
  msgid "Delete<br>File"
8093
  msgstr ""
8094
 
8095
- #: admin/mscan/mscan.php:1401 admin/system-info/system-info.php:948
 
8096
  #: admin/system-info/system-info.php:988
8097
  msgid "File Path"
8098
  msgstr ""
8099
 
8100
- #: admin/mscan/mscan.php:1402 admin/mscan/mscan.php:1694
8101
- msgid "Pattern<br>Match"
8102
  msgstr ""
8103
 
8104
- #: admin/mscan/mscan.php:1403 admin/mscan/mscan.php:1695
8105
  msgid "Scan<br>Time"
8106
  msgstr ""
8107
 
8108
- #: admin/mscan/mscan.php:1416
8109
  msgid "Skipped File"
8110
  msgstr ""
8111
 
8112
- #: admin/mscan/mscan.php:1416
8113
  msgid "Not Scanned"
8114
  msgstr ""
8115
 
8116
- #: admin/mscan/mscan.php:1420 admin/mscan/mscan.php:1427
 
8117
  msgid "Ignored File"
8118
  msgstr ""
8119
 
8120
- #: admin/mscan/mscan.php:1432
8121
  msgid "Suspicious File"
8122
  msgstr ""
8123
 
8124
- #: admin/mscan/mscan.php:1438 admin/mscan/mscan.php:1716
 
8125
  msgid "View"
8126
  msgstr ""
8127
 
8128
- #: admin/mscan/mscan.php:1439 admin/mscan/mscan.php:1717
8129
  msgid "Ignore"
8130
  msgstr ""
8131
 
8132
- #: admin/mscan/mscan.php:1441 admin/mscan/mscan.php:1718
8133
  msgid "Unignore"
8134
  msgstr ""
8135
 
8136
- #: admin/mscan/mscan.php:1452
8137
  msgid "No Suspicious Files were detected"
8138
  msgstr ""
8139
 
8140
- #: admin/mscan/mscan.php:1466
8141
  msgid ""
8142
  "View File Option: Selecting the View File Checkbox Form option will display "
8143
  "the contents of the file that you have selected to view.\\n"
@@ -8157,45 +8332,45 @@ msgid ""
8157
  "OK to proceed or click Cancel"
8158
  msgstr ""
8159
 
8160
- #: admin/mscan/mscan.php:1622
8161
  msgid "Current Status has been changed to Ignored for DB Row ID"
8162
  msgstr ""
8163
 
8164
- #: admin/mscan/mscan.php:1622 admin/mscan/mscan.php:1641
8165
  msgid "in DB Column"
8166
  msgstr ""
8167
 
8168
- #: admin/mscan/mscan.php:1622
8169
  msgid "This DB Entry will not be scanned in any future MScan Scans."
8170
  msgstr ""
8171
 
8172
- #: admin/mscan/mscan.php:1641
8173
  msgid "The Ignored DB Entry Status has been removed for DB Row ID"
8174
  msgstr ""
8175
 
8176
- #: admin/mscan/mscan.php:1641
8177
  msgid ""
8178
  "The previous Status of the DB Entry will be displayed again and this DB "
8179
  "Entry will be scanned in future MScan scans."
8180
  msgstr ""
8181
 
8182
- #: admin/mscan/mscan.php:1660 admin/mscan/mscan.php:1665
8183
  msgid "Close"
8184
  msgstr ""
8185
 
8186
- #: admin/mscan/mscan.php:1660
8187
  msgid "Pharma Hack DB Table and Column"
8188
  msgstr ""
8189
 
8190
- #: admin/mscan/mscan.php:1660
8191
  msgid "Pharma Hack cleanup/removal steps"
8192
  msgstr ""
8193
 
8194
- #: admin/mscan/mscan.php:1660
8195
  msgid "Edit your theme's header.php file and delete this code: "
8196
  msgstr ""
8197
 
8198
- #: admin/mscan/mscan.php:1660
8199
  msgid ""
8200
  "Delete this file in your theme's root folder: nav.php. Login to your web "
8201
  "host control panel, login to your WP Database using phpMyAdmin and delete "
@@ -8204,58 +8379,102 @@ msgid ""
8204
  "any that you do see."
8205
  msgstr ""
8206
 
8207
- #: admin/mscan/mscan.php:1665
8208
  msgid "DB Table, Column and Row ID"
8209
  msgstr ""
8210
 
8211
- #: admin/mscan/mscan.php:1665
8212
  msgid "Steps to view the database data that MScan detected as suspicious"
8213
  msgstr ""
8214
 
8215
- #: admin/mscan/mscan.php:1665
8216
  msgid ""
8217
  "Login to your web host control panel, login to your WP Database using "
8218
  "phpMyAdmin and check the data in the DB Table, Column and Row ID shown "
8219
  "above. Note: Look for code that matches the MScan Pattern Match."
8220
  msgstr ""
8221
 
8222
- #: admin/mscan/mscan.php:1688
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8223
  msgid "View<br>DB Entry"
8224
  msgstr ""
8225
 
8226
- #: admin/mscan/mscan.php:1689
8227
  msgid "Ignore<br>DB Entry"
8228
  msgstr ""
8229
 
8230
- #: admin/mscan/mscan.php:1690
8231
  msgid "Unignore<br>DB Entry"
8232
  msgstr ""
8233
 
8234
- #: admin/mscan/mscan.php:1691
 
8235
  msgid "DB Table"
8236
  msgstr ""
8237
 
8238
- #: admin/mscan/mscan.php:1692
 
8239
  msgid "DB Column"
8240
  msgstr ""
8241
 
8242
- #: admin/mscan/mscan.php:1693
 
8243
  msgid "DB Row ID"
8244
  msgstr ""
8245
 
8246
- #: admin/mscan/mscan.php:1706
 
 
 
 
8247
  msgid "Ignored DB Entry"
8248
  msgstr ""
8249
 
8250
- #: admin/mscan/mscan.php:1711
8251
  msgid "Suspicious DB Entry"
8252
  msgstr ""
8253
 
8254
- #: admin/mscan/mscan.php:1729
8255
  msgid "No Suspicious DB Entries were detected"
8256
  msgstr ""
8257
 
8258
- #: admin/mscan/mscan.php:1744
8259
  msgid ""
8260
  "View DB Entry Option: Selecting the View DB Entry Checkbox Form option will "
8261
  "display the contents of the DB Table, Column and Row ID that you have "
@@ -8273,79 +8492,356 @@ msgid ""
8273
  "OK to proceed or click Cancel"
8274
  msgstr ""
8275
 
8276
- #: admin/mscan/mscan.php:1795
8277
  msgid "MScan Log ~ "
8278
  msgstr ""
8279
 
8280
- #: admin/mscan/mscan.php:1795
8281
- msgid ""
8282
- "Logs MScan Settings, Completion Time, Memory Usage, Zip Backup File Name, "
8283
- "Timestamp..."
8284
- msgstr ""
8285
-
8286
- #: admin/mscan/mscan.php:1826
8287
  msgid "Click the Reset Last Modified Time in DB button"
8288
  msgstr ""
8289
 
8290
- #: admin/mscan/mscan.php:1826
8291
  msgid "to set the"
8292
  msgstr ""
8293
 
8294
- #: admin/mscan/mscan.php:1831 admin/mscan/mscan.php:1836
8295
  msgid "Last Modified Time in DB:"
8296
  msgstr ""
8297
 
8298
- #: admin/mscan/mscan.php:1849 admin/mscan/mscan.php:1852
8299
  msgid "MScan Log File Size: "
8300
  msgstr ""
8301
 
8302
- #: admin/mscan/mscan.php:1852
8303
  msgid ""
8304
  "The S-Monitor Email Logging options will only send log files up to 2MB in "
8305
  "size."
8306
  msgstr ""
8307
 
8308
- #: admin/mscan/mscan.php:1852
8309
  msgid ""
8310
  "Copy and paste the MScan Log file contents into a Notepad text file on your "
8311
  "computer and save it."
8312
  msgstr ""
8313
 
8314
- #: admin/mscan/mscan.php:1865
8315
  msgid "MScan Log Last Modified Time:"
8316
  msgstr ""
8317
 
8318
- #: admin/mscan/mscan.php:1867
8319
  msgid "Last Modified Time in File:"
8320
  msgstr ""
8321
 
8322
- #: admin/mscan/mscan.php:1886
8323
  msgid ""
8324
  "Success! Your MScan Log has been deleted and replaced with a new blank MScan "
8325
  "Log file."
8326
  msgstr ""
8327
 
8328
- #: admin/mscan/mscan.php:1896
8329
  msgid "Clicking OK will delete the contents of your MScan Log file."
8330
  msgstr ""
8331
 
8332
- #: admin/mscan/mscan.php:1915
8333
  msgid ""
8334
  "The MScan Log File Was Not Found! Check that the file really exists here - /"
8335
  msgstr ""
8336
 
8337
- #: admin/mscan/mscan.php:1915
8338
  msgid "/bps-backup/logs/mscan_log.txt and is named correctly."
8339
  msgstr ""
8340
 
8341
- #: admin/mscan/mscan.php:1934
8342
  msgid "File Open and Write test successful! Your MScan Log file is writable."
8343
  msgstr ""
8344
 
8345
- #: admin/mscan/mscan.php:1946 admin/mscan/mscan.php:1950
8346
  msgid "Success! Your MScan Log file has been updated."
8347
  msgstr ""
8348
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8349
  #: admin/security-log/security-log.php:40
8350
  msgid "BulletProof Security ~ Security Log"
8351
  msgstr ""
@@ -8782,9 +9278,9 @@ msgid ""
8782
  msgstr ""
8783
 
8784
  #: admin/security-log/security-log.php:383
8785
- #: admin/security-log/security-log.php:516 admin/wizard/wizard.php:297
8786
- #: admin/wizard/wizard.php:303 admin/wizard/wizard.php:309
8787
- #: admin/wizard/wizard.php:315 admin/wizard/wizard.php:321
8788
  msgid "Error: The "
8789
  msgstr ""
8790
 
@@ -10743,7 +11239,7 @@ msgstr ""
10743
  msgid "Link Whisper Premium Plugin wp-admin BPSQSE AutoWhitelist successful"
10744
  msgstr ""
10745
 
10746
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10747
  msgid ""
10748
  "Custom additional htaccess code was found in your current root htaccess "
10749
  "file. Your root and wp-admin htaccess files have been backed up and zipped "
@@ -10752,19 +11248,19 @@ msgid ""
10752
  "files.zip file to your computer."
10753
  msgstr ""
10754
 
10755
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10756
  msgid "Click this forum link: "
10757
  msgstr ""
10758
 
10759
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10760
  msgid "Setup Wizard Root and wp-admin htaccess File Backup"
10761
  msgstr ""
10762
 
10763
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10764
  msgid " for help information about what this means and what to do."
10765
  msgstr ""
10766
 
10767
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10768
  msgid ""
10769
  " and select the Zip File Download Fix On setting for the Zile File Download "
10770
  "Fix option. You should now be able to download the htaccess-files.zip file. "
@@ -10772,19 +11268,19 @@ msgid ""
10772
  "above for what to do next."
10773
  msgstr ""
10774
 
10775
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10776
  msgid "Download htaccess-files.zip File"
10777
  msgstr ""
10778
 
10779
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10780
  msgid "Additional Plain Text htaccess file backups: "
10781
  msgstr ""
10782
 
10783
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10784
  msgid "Root htaccess File: "
10785
  msgstr ""
10786
 
10787
- #: admin/wizard/wizard-backup.php:244 admin/wizard/wizard-backup.php:285
10788
  msgid "wp-admin htaccess File: "
10789
  msgstr ""
10790
 
@@ -10810,7 +11306,7 @@ msgid ""
10810
  msgstr ""
10811
 
10812
  #: admin/wizard/wizard-functions.php:111 admin/wizard/wizard-functions.php:633
10813
- #: admin/wizard/wizard-functions.php:728
10814
  msgid ""
10815
  "If your Server configuration is DSO you must first make some one-time manual "
10816
  "changes to your website before running the Setup Wizard. Please click this "
@@ -10818,10 +11314,10 @@ msgid ""
10818
  msgstr ""
10819
 
10820
  #: admin/wizard/wizard-functions.php:111 admin/wizard/wizard-functions.php:633
10821
- #: admin/wizard/wizard-functions.php:728 admin/wizard/wizard.php:221
10822
- #: admin/wizard/wizard.php:297 admin/wizard/wizard.php:303
10823
- #: admin/wizard/wizard.php:309 admin/wizard/wizard.php:315
10824
- #: admin/wizard/wizard.php:321
10825
  msgid "DSO Setup Steps"
10826
  msgstr ""
10827
 
@@ -10862,10 +11358,10 @@ msgid ""
10862
  msgstr ""
10863
 
10864
  #: admin/wizard/wizard-functions.php:607 admin/wizard/wizard-functions.php:616
10865
- #: admin/wizard/wizard-functions.php:824 admin/wizard/wizard.php:643
10866
- #: admin/wizard/wizard.php:681 admin/wizard/wizard.php:739
10867
- #: admin/wizard/wizard.php:779 admin/wizard/wizard.php:831
10868
- #: admin/wizard/wizard.php:929 includes/general-functions.php:1008
10869
  msgid " DB Option created or updated Successfully!"
10870
  msgstr ""
10871
 
@@ -10901,33 +11397,33 @@ msgid ""
10901
  "allow wp-admin htaccess files."
10902
  msgstr ""
10903
 
10904
- #: admin/wizard/wizard-functions.php:665
10905
  msgid " wp-admin .htaccess File backup Successful!"
10906
  msgstr ""
10907
 
10908
- #: admin/wizard/wizard-functions.php:726
10909
  msgid "The default.htaccess Master htaccess file was created successfully."
10910
  msgstr ""
10911
 
10912
- #: admin/wizard/wizard-functions.php:728
10913
  msgid "Error: The default.htaccess Master htaccess file cannot be created."
10914
  msgstr ""
10915
 
10916
- #: admin/wizard/wizard-functions.php:825 admin/wizard/wizard.php:458
10917
  msgid " Folder created Successfully!"
10918
  msgstr ""
10919
 
10920
- #: admin/wizard/wizard-functions.php:932
10921
  msgid ""
10922
  "Security Log User Agent Filter Check Successful! 0 User Agent Filters to "
10923
  "update."
10924
  msgstr ""
10925
 
10926
- #: admin/wizard/wizard-functions.php:942
10927
  msgid "Security Log User Agent Filter "
10928
  msgstr ""
10929
 
10930
- #: admin/wizard/wizard-functions.php:942
10931
  msgid " created or updated Successfully!"
10932
  msgstr ""
10933
 
@@ -10949,7 +11445,7 @@ msgid ""
10949
  "file, but was NOT found in BPS Custom Code. "
10950
  msgstr ""
10951
 
10952
- #: admin/wizard/wizard.php:160 includes/hud-dismiss-functions.php:353
10953
  msgid ""
10954
  " for the steps to fix this Wordfence problem before running the Setup Wizard."
10955
  msgstr ""
@@ -10960,11 +11456,11 @@ msgid ""
10960
  "Code"
10961
  msgstr ""
10962
 
10963
- #: admin/wizard/wizard.php:194 admin/wizard/wizard.php:353
10964
  msgid " DB Table created Successfully!"
10965
  msgstr ""
10966
 
10967
- #: admin/wizard/wizard.php:197 admin/wizard/wizard.php:356
10968
  msgid "Error: Unable to create DB Table "
10969
  msgstr ""
10970
 
@@ -11035,41 +11531,41 @@ msgid ""
11035
  "maximum memory limit setting allowed by your Host."
11036
  msgstr ""
11037
 
11038
- #: admin/wizard/wizard.php:258 includes/functions.php:1204
11039
  msgid ""
11040
  "mod_authz_core is Loaded|Order, Allow, Deny directives are supported|BC: Yes|"
11041
  "IfModule: Yes"
11042
  msgstr ""
11043
 
11044
- #: admin/wizard/wizard.php:265
11045
  msgid ""
11046
  "Enable|Disable htaccess Files Option set to Enabled: mod_access_compat "
11047
  "htaccess files will be created."
11048
  msgstr ""
11049
 
11050
- #: admin/wizard/wizard.php:267
11051
  msgid ""
11052
  "mod_access_compat is Loaded|Order, Allow, Deny directives are supported|"
11053
  "IfModule: No"
11054
  msgstr ""
11055
 
11056
- #: admin/wizard/wizard.php:271
11057
  msgid ""
11058
  "Enable|Disable htaccess Files Option set to Disabled: All BPS htaccess "
11059
  "features will be disabled."
11060
  msgstr ""
11061
 
11062
- #: admin/wizard/wizard.php:295 admin/wizard/wizard.php:301
11063
- #: admin/wizard/wizard.php:307 admin/wizard/wizard.php:313
11064
- #: admin/wizard/wizard.php:319
11065
  msgid "Pass! The "
11066
  msgstr ""
11067
 
11068
- #: admin/wizard/wizard.php:295 admin/wizard/wizard.php:301
11069
  msgid " Folder is writable."
11070
  msgstr ""
11071
 
11072
- #: admin/wizard/wizard.php:297 admin/wizard/wizard.php:303
11073
  msgid ""
11074
  " Folder is NOT writable. If your Server type is DSO and the WP Filesystem "
11075
  "API Method is NOT \"direct\" you can use the Setup Wizard, but you must "
@@ -11077,19 +11573,19 @@ msgid ""
11077
  "Setup Wizard. Please click this Forum Link for instructions: "
11078
  msgstr ""
11079
 
11080
- #: admin/wizard/wizard.php:297 admin/wizard/wizard.php:303
11081
  msgid ""
11082
  " If your Server type is CGI check the folder permissions. Folder permissions "
11083
  "should be either 755 or 705."
11084
  msgstr ""
11085
 
11086
- #: admin/wizard/wizard.php:307 admin/wizard/wizard.php:313
11087
- #: admin/wizard/wizard.php:319
11088
  msgid " File is writable."
11089
  msgstr ""
11090
 
11091
- #: admin/wizard/wizard.php:309 admin/wizard/wizard.php:315
11092
- #: admin/wizard/wizard.php:321
11093
  msgid ""
11094
  " File is NOT writable. If your Server type is DSO and the WP Filesystem API "
11095
  "Method is NOT \"direct\" you can use the Setup Wizard, but you must first "
@@ -11097,111 +11593,111 @@ msgid ""
11097
  "Wizard. Please click this Forum Link for instructions: "
11098
  msgstr ""
11099
 
11100
- #: admin/wizard/wizard.php:309 admin/wizard/wizard.php:315
11101
- #: admin/wizard/wizard.php:321
11102
  msgid ""
11103
  " If your Server type is CGI check the file permissions. File permissions "
11104
  "should be either 644 or 604."
11105
  msgstr ""
11106
 
11107
- #: admin/wizard/wizard.php:395
11108
  msgid "BPS Setup Verification & Error Checks"
11109
  msgstr ""
11110
 
11111
- #: admin/wizard/wizard.php:397
11112
  msgid ""
11113
  "If you see all Green font messages displayed below, the Setup Wizard setup "
11114
  "completed successfully."
11115
  msgstr ""
11116
 
11117
- #: admin/wizard/wizard.php:397
11118
  msgid ""
11119
  "If you see any Red font or Blue font messages displayed below, click the "
11120
  "Read Me help button above and read the \"Notes\" help section."
11121
  msgstr ""
11122
 
11123
- #: admin/wizard/wizard.php:397
11124
  msgid ""
11125
  "Click the Read Me help button above for a list of recommended BPS Video "
11126
  "Tutorials to watch."
11127
  msgstr ""
11128
 
11129
- #: admin/wizard/wizard.php:404 admin/wizard/wizard.php:1188
11130
  msgid "AutoFix (AutoWhitelist|AutoSetup|AutoCleanup)"
11131
  msgstr ""
11132
 
11133
- #: admin/wizard/wizard.php:426
11134
  msgid "BulletProof Security Database Tables Setup"
11135
  msgstr ""
11136
 
11137
- #: admin/wizard/wizard.php:455
11138
  msgid "BulletProof Security Core Folders Setup"
11139
  msgstr ""
11140
 
11141
- #: admin/wizard/wizard.php:459
11142
  msgid "Error: Unable to create Folder "
11143
  msgstr ""
11144
 
11145
- #: admin/wizard/wizard.php:487
11146
  msgid "BulletProof Security Core Files Setup"
11147
  msgstr ""
11148
 
11149
- #: admin/wizard/wizard.php:490
11150
  msgid " File created or updated Successfully!"
11151
  msgstr ""
11152
 
11153
- #: admin/wizard/wizard.php:491
11154
  msgid "Error: Unable to create or update File "
11155
  msgstr ""
11156
 
11157
- #: admin/wizard/wizard.php:638
11158
  msgid "BulletProof Security MScan Malware Scanner Setup"
11159
  msgstr ""
11160
 
11161
- #: admin/wizard/wizard.php:659
11162
  msgid "BulletProof Security DB Backup Setup"
11163
  msgstr ""
11164
 
11165
- #: admin/wizard/wizard.php:678
11166
  msgid "BulletProof Security Hidden Plugin Folders|Files (HPF) Setup"
11167
  msgstr ""
11168
 
11169
- #: admin/wizard/wizard.php:711
11170
  msgid ""
11171
  "Hidden Plugin Folders|Files (HPF) DB Options created or updated Successfully!"
11172
  msgstr ""
11173
 
11174
- #: admin/wizard/wizard.php:714
11175
  msgid "BulletProof Security Security Log User Agent Filter Setup"
11176
  msgstr ""
11177
 
11178
- #: admin/wizard/wizard.php:735
11179
  msgid "BulletProof Security Email Alerting & Log File Options Setup"
11180
  msgstr ""
11181
 
11182
- #: admin/wizard/wizard.php:776
11183
  msgid "BulletProof Security Login Security & Monitoring Options Setup"
11184
  msgstr ""
11185
 
11186
- #: admin/wizard/wizard.php:826
11187
  msgid "BulletProof Security JTC-Lite Options Setup"
11188
  msgstr ""
11189
 
11190
- #: admin/wizard/wizard.php:926
11191
  msgid "BulletProof Security Force Strong Passwords Options Setup"
11192
  msgstr ""
11193
 
11194
- #: admin/wizard/wizard.php:980
11195
  msgid "The Setup Wizard has completed BPS Setup."
11196
  msgstr ""
11197
 
11198
- #: admin/wizard/wizard.php:980
11199
  msgid ""
11200
  "Check the \"BPS Setup Verification & Error Checks\" section below for any "
11201
  "errors in Red Font."
11202
  msgstr ""
11203
 
11204
- #: admin/wizard/wizard.php:980
11205
  msgid ""
11206
  "Your existing root htaccess file has been backed up here: /wp-content/bps-"
11207
  "backup/master-backups/root.htaccess-[Date-Timestamp]. If you run into a "
@@ -11209,64 +11705,64 @@ msgid ""
11209
  "forum topic: "
11210
  msgstr ""
11211
 
11212
- #: admin/wizard/wizard.php:980
11213
  msgid "Setup Wizard Root htaccess File Backup"
11214
  msgstr ""
11215
 
11216
- #: admin/wizard/wizard.php:1000
11217
  msgid "Setup Wizard Completion Time: "
11218
  msgstr ""
11219
 
11220
- #: admin/wizard/wizard.php:1017
11221
  msgid "BulletProof Security ~ Setup Wizard"
11222
  msgstr ""
11223
 
11224
- #: admin/wizard/wizard.php:1072 admin/wizard/wizard.php:1682
11225
- #: admin/wizard/wizard.php:1684
11226
  msgid "Setup Wizard Export|Import"
11227
  msgstr ""
11228
 
11229
- #: admin/wizard/wizard.php:1083
11230
  msgid "htaccess Files Disabled Notice: "
11231
  msgstr ""
11232
 
11233
- #: admin/wizard/wizard.php:1083
11234
  msgid ""
11235
  "BPS has detected that htaccess files cannot be used on your website/server. "
11236
  "Click this "
11237
  msgstr ""
11238
 
11239
- #: admin/wizard/wizard.php:1083
11240
  msgid ""
11241
  " link for more information before running the Wizards. If you intentionally "
11242
  "disabled htaccess files then disregard this Notice."
11243
  msgstr ""
11244
 
11245
- #: admin/wizard/wizard.php:1095
11246
  msgid "Setup Wizard ~ "
11247
  msgstr ""
11248
 
11249
- #: admin/wizard/wizard.php:1095
11250
  msgid "One-Click Complete Setup"
11251
  msgstr ""
11252
 
11253
- #: admin/wizard/wizard.php:1112
11254
  msgid "Recommended Video Tutorials: "
11255
  msgstr ""
11256
 
11257
- #: admin/wizard/wizard.php:1117
11258
  msgid "Security Log Video Tutorial"
11259
  msgstr ""
11260
 
11261
- #: admin/wizard/wizard.php:1120
11262
  msgid "Setup Wizard Steps: "
11263
  msgstr ""
11264
 
11265
- #: admin/wizard/wizard.php:1120
11266
  msgid "1. Click the Setup Wizard button."
11267
  msgstr ""
11268
 
11269
- #: admin/wizard/wizard.php:1124
11270
  msgid ""
11271
  "Setup Wizard Pre-Installation Checks are automatically performed and "
11272
  "displayed on the Setup Wizard page. Green font messages mean everything is "
@@ -11277,67 +11773,67 @@ msgid ""
11277
  "to be fixed before running the Setup Wizard."
11278
  msgstr ""
11279
 
11280
- #: admin/wizard/wizard.php:1124
11281
  msgid ""
11282
  "You can re-run the Setup Wizard again at any time. Your existing settings "
11283
  "will NOT be overwritten and will be re-saved. Any new or additional settings "
11284
  "that the Setup Wizard finds on your website will be saved/setup."
11285
  msgstr ""
11286
 
11287
- #: admin/wizard/wizard.php:1124
11288
  msgid ""
11289
  "When the Setup Wizard has completed you will see \"The Setup Wizard has "
11290
  "completed BPS Setup.\""
11291
  msgstr ""
11292
 
11293
- #: admin/wizard/wizard.php:1124
11294
  msgid ""
11295
  "Your existing Root and wp-admin htaccess files are backed up before new Root "
11296
  "and wp-admin htaccess files are created by the Setup Wizard. The BPS backup "
11297
  "folder is here: "
11298
  msgstr ""
11299
 
11300
- #: admin/wizard/wizard.php:1127
11301
  msgid ""
11302
  " and the backed up htaccess file names are: root.htaccess and wpadmin."
11303
  "htaccess."
11304
  msgstr ""
11305
 
11306
- #: admin/wizard/wizard.php:1137
11307
  msgid "Setup Wizard & Overview Video Tutorial"
11308
  msgstr ""
11309
 
11310
- #: admin/wizard/wizard.php:1164
11311
  msgid "Setup Wizard Options ~ "
11312
  msgstr ""
11313
 
11314
- #: admin/wizard/wizard.php:1164
11315
  msgid ""
11316
  "Click the Setup Wizard Options Read Me help button for help info about each "
11317
  "option setting"
11318
  msgstr ""
11319
 
11320
- #: admin/wizard/wizard.php:1178
11321
  msgid "Forum Help Links:"
11322
  msgstr ""
11323
 
11324
- #: admin/wizard/wizard.php:1182
11325
  msgid "Go Daddy Managed WordPress Hosting (GDMW)"
11326
  msgstr ""
11327
 
11328
- #: admin/wizard/wizard.php:1183 admin/wizard/wizard.php:1188
11329
  msgid "Enable|Disable htaccess Files"
11330
  msgstr ""
11331
 
11332
- #: admin/wizard/wizard.php:1184
11333
  msgid "AutoFix Forum Topic"
11334
  msgstr ""
11335
 
11336
- #: admin/wizard/wizard.php:1185
11337
  msgid "GDPR Compliance Forum Topic"
11338
  msgstr ""
11339
 
11340
- #: admin/wizard/wizard.php:1188
11341
  msgid ""
11342
  "Setup Wizard AutoFix is turned On by default. When AutoFix is turned On the "
11343
  "Setup Wizard will automatically create htaccess whitelist rules in BPS "
@@ -11358,11 +11854,11 @@ msgid ""
11358
  "AutoFix Debug information so that we can figure out what the problem is."
11359
  msgstr ""
11360
 
11361
- #: admin/wizard/wizard.php:1188
11362
  msgid "GDPR Compliance (IP Address Logging On|Off)"
11363
  msgstr ""
11364
 
11365
- #: admin/wizard/wizard.php:1188
11366
  msgid ""
11367
  "The GDPR Compliance option setting is set to Off by default. Choosing the "
11368
  "GDPR Compliance On option setting will disable IP address logging in all BPS "
@@ -11376,11 +11872,11 @@ msgid ""
11376
  "at the top of this Read Me help window."
11377
  msgstr ""
11378
 
11379
- #: admin/wizard/wizard.php:1188 admin/wizard/wizard.php:1230
11380
  msgid "Go Daddy Managed WordPress Hosting (GDMW):"
11381
  msgstr ""
11382
 
11383
- #: admin/wizard/wizard.php:1188
11384
  msgid ""
11385
  "This option is ONLY for a special type of Go Daddy Hosting account called "
11386
  "\"Managed WordPress Hosting\" and is NOT for regular/standard Go Daddy "
@@ -11389,15 +11885,15 @@ msgid ""
11389
  "section above for more information."
11390
  msgstr ""
11391
 
11392
- #: admin/wizard/wizard.php:1188 admin/wizard/wizard.php:1244
11393
  msgid "Enable|Disable htaccess Files:"
11394
  msgstr ""
11395
 
11396
- #: admin/wizard/wizard.php:1188
11397
  msgid "Before changing this option setting, click the "
11398
  msgstr ""
11399
 
11400
- #: admin/wizard/wizard.php:1188
11401
  msgid ""
11402
  " Forum Help Link at the top of this Read Me help window to find out exactly "
11403
  "what this option setting does and when it should or should not be used. "
@@ -11405,22 +11901,22 @@ msgid ""
11405
  "htaccess Files Enabled: Will enable all BPS htaccess freatures and files."
11406
  msgstr ""
11407
 
11408
- #: admin/wizard/wizard.php:1188
11409
  msgid "Enable|Disable wp-admin BulletProof Mode"
11410
  msgstr ""
11411
 
11412
- #: admin/wizard/wizard.php:1188
11413
  msgid ""
11414
  "The default setting is already set to: wp-admin BulletProof Mode Enabled. If "
11415
  "you would like to disable wp-admin BulletProof Mode select wp-admin "
11416
  "BulletProof Mode Disabled."
11417
  msgstr ""
11418
 
11419
- #: admin/wizard/wizard.php:1188 admin/wizard/wizard.php:1273
11420
  msgid "Zip File Download Fix (Incapsula, Proxy, Other Cause):"
11421
  msgstr ""
11422
 
11423
- #: admin/wizard/wizard.php:1188
11424
  msgid ""
11425
  "This option should only be set to On if you are seeing a 403 error and/or "
11426
  "unable to download these Zip files: Custom Code Export Zip file, Login "
@@ -11436,11 +11932,11 @@ msgid ""
11436
  "Firewall again."
11437
  msgstr ""
11438
 
11439
- #: admin/wizard/wizard.php:1188 admin/wizard/wizard.php:1287
11440
  msgid "Multisite Hide|Display System Info Page for Subsites:"
11441
  msgstr ""
11442
 
11443
- #: admin/wizard/wizard.php:1188
11444
  msgid ""
11445
  "This option is for Network|Multisite sites only. Choosing Hide System Info "
11446
  "Page will hide the System Info menu link under the BPS navigational menus. "
@@ -11448,11 +11944,11 @@ msgid ""
11448
  "under the BPS navigational mensus."
11449
  msgstr ""
11450
 
11451
- #: admin/wizard/wizard.php:1188 admin/wizard/wizard.php:1298
11452
  msgid "Network|Multisite Sitewide Login Security Settings"
11453
  msgstr ""
11454
 
11455
- #: admin/wizard/wizard.php:1188
11456
  msgid ""
11457
  "This option is for Network|Multisite sites only. This is an independent "
11458
  "option Form that creates and saves Login Security DB option settings for all "
@@ -11469,11 +11965,11 @@ msgid ""
11469
  "Reset, Sort DB Rows: Ascending - Show Oldest Login First."
11470
  msgstr ""
11471
 
11472
- #: admin/wizard/wizard.php:1188
11473
  msgid "Network|Multisite Sitewide JTC-Lite Settings"
11474
  msgstr ""
11475
 
11476
- #: admin/wizard/wizard.php:1188
11477
  msgid ""
11478
  "This option is for Network|Multisite sites only. This is an independent "
11479
  "option Form that creates and saves JTC-Lite DB option settings for all "
@@ -11488,11 +11984,11 @@ msgid ""
11488
  "box on the Login Form."
11489
  msgstr ""
11490
 
11491
- #: admin/wizard/wizard.php:1188 admin/wizard/wizard.php:1316
11492
  msgid "Network|Multisite Sitewide Force Strong Passwords Settings"
11493
  msgstr ""
11494
 
11495
- #: admin/wizard/wizard.php:1188
11496
  msgid ""
11497
  "This option is for Network|Multisite sites ONLY. This is an independent "
11498
  "option Form that creates and saves FSP DB option settings for all Network "
@@ -11505,84 +12001,84 @@ msgid ""
11505
  "all checked and Displayed Message/Error Message: default FSP message."
11506
  msgstr ""
11507
 
11508
- #: admin/wizard/wizard.php:1202
11509
  msgid "AutoFix (AutoWhitelist|AutoSetup|AutoCleanup):"
11510
  msgstr ""
11511
 
11512
- #: admin/wizard/wizard.php:1204
11513
  msgid "AutoFix On"
11514
  msgstr ""
11515
 
11516
- #: admin/wizard/wizard.php:1205
11517
  msgid "AutoFix Off"
11518
  msgstr ""
11519
 
11520
- #: admin/wizard/wizard.php:1216
11521
  msgid "GDPR Compliance (IP Address Logging On|Off):"
11522
  msgstr ""
11523
 
11524
- #: admin/wizard/wizard.php:1218
11525
  msgid "GDPR Compliance Off"
11526
  msgstr ""
11527
 
11528
- #: admin/wizard/wizard.php:1219
11529
  msgid "GDPR Compliance On"
11530
  msgstr ""
11531
 
11532
- #: admin/wizard/wizard.php:1232
11533
  msgid "No (default setting)"
11534
  msgstr ""
11535
 
11536
- #: admin/wizard/wizard.php:1233
11537
  msgid "Yes (ONLY if you have Managed WordPress Hosting)"
11538
  msgstr ""
11539
 
11540
- #: admin/wizard/wizard.php:1245
11541
  msgid ""
11542
  "CAUTION: Click the Read Me help button before changing this option setting"
11543
  msgstr ""
11544
 
11545
- #: admin/wizard/wizard.php:1247
11546
  msgid "htaccess Files Enabled"
11547
  msgstr ""
11548
 
11549
- #: admin/wizard/wizard.php:1248
11550
  msgid "htaccess Files Disabled"
11551
  msgstr ""
11552
 
11553
- #: admin/wizard/wizard.php:1259
11554
  msgid "Enable|Disable wp-admin BulletProof Mode:"
11555
  msgstr ""
11556
 
11557
- #: admin/wizard/wizard.php:1261
11558
  msgid "wp-admin BulletProof Mode Enabled"
11559
  msgstr ""
11560
 
11561
- #: admin/wizard/wizard.php:1262
11562
  msgid "wp-admin BulletProof Mode Disabled"
11563
  msgstr ""
11564
 
11565
- #: admin/wizard/wizard.php:1275
11566
  msgid "Zip File Download Fix Off"
11567
  msgstr ""
11568
 
11569
- #: admin/wizard/wizard.php:1276
11570
  msgid "Zip File Download Fix On"
11571
  msgstr ""
11572
 
11573
- #: admin/wizard/wizard.php:1289
11574
  msgid "Display System Info Page"
11575
  msgstr ""
11576
 
11577
- #: admin/wizard/wizard.php:1290
11578
  msgid "Hide System Info Page"
11579
  msgstr ""
11580
 
11581
- #: admin/wizard/wizard.php:1307
11582
  msgid "Network|Multisite Sitewide JTC Anti-Spam|Anti-Hacker Settings"
11583
  msgstr ""
11584
 
11585
- #: admin/wizard/wizard.php:1348
11586
  msgid ""
11587
  "The Zip File Download Fix option is set to On. This option should only be "
11588
  "set to On if you are unable to download these Zip files: Custom Code Export "
@@ -11590,15 +12086,15 @@ msgid ""
11590
  "htaccess file backup Zip file."
11591
  msgstr ""
11592
 
11593
- #: admin/wizard/wizard.php:1361
11594
  msgid "The Zip File Download Fix option is set to Off."
11595
  msgstr ""
11596
 
11597
- #: admin/wizard/wizard.php:1385
11598
  msgid "Multisite Hide|Display System Info Page for Subsites option saved."
11599
  msgstr ""
11600
 
11601
- #: admin/wizard/wizard.php:1400
11602
  msgid ""
11603
  "Error: Your Network site exceeds the default WP criteria for a large network "
11604
  "site. Either you have more than 10,000 users or more than 10,000 sites. "
@@ -11606,11 +12102,11 @@ msgid ""
11606
  "org for assistance."
11607
  msgstr ""
11608
 
11609
- #: admin/wizard/wizard.php:1407
11610
  msgid " LSM DB Options created or updated Successfully!"
11611
  msgstr ""
11612
 
11613
- #: admin/wizard/wizard.php:1480 admin/wizard/wizard.php:1603
11614
  msgid ""
11615
  "Error: Your Network site exceeds the default WP criteria for a large network "
11616
  "site. Either you have more than 10,000 users or more than 10,000 sites. "
@@ -11618,31 +12114,31 @@ msgid ""
11618
  "line: Setup Wizard Options Large Network Site Help."
11619
  msgstr ""
11620
 
11621
- #: admin/wizard/wizard.php:1487
11622
  msgid " JTC DB Options created or updated Successfully!"
11623
  msgstr ""
11624
 
11625
- #: admin/wizard/wizard.php:1610
11626
  msgid " FSP DB Options created or updated Successfully!"
11627
  msgstr ""
11628
 
11629
- #: admin/wizard/wizard.php:1677
11630
  msgid "Setup Wizard Export|Import ~ "
11631
  msgstr ""
11632
 
11633
- #: admin/wizard/wizard.php:1677
11634
  msgid "Export or Import BPS plugin option settings."
11635
  msgstr ""
11636
 
11637
- #: admin/wizard/wizard.php:1694
11638
  msgid "GDMW Hosting"
11639
  msgstr ""
11640
 
11641
- #: admin/wizard/wizard.php:1696
11642
  msgid "Setup Wizard Export"
11643
  msgstr ""
11644
 
11645
- #: admin/wizard/wizard.php:1696
11646
  msgid ""
11647
  "The Setup Wizard Export feature exports all BPS plugin option settings "
11648
  "except for website specific settings that need to be setup by running the "
@@ -11650,11 +12146,11 @@ msgid ""
11650
  "new website. The name of the exported zip file is: bps-settings-export.zip"
11651
  msgstr ""
11652
 
11653
- #: admin/wizard/wizard.php:1696
11654
  msgid "Setup Wizard Import"
11655
  msgstr ""
11656
 
11657
- #: admin/wizard/wizard.php:1696
11658
  msgid ""
11659
  "To import BPS plugin option settings click the Choose File button, navigate "
11660
  "to where you downloaded/saved the bps-settings-export.zip file on your "
@@ -11668,11 +12164,11 @@ msgid ""
11668
  "code or remove it from BPS Custom Code."
11669
  msgstr ""
11670
 
11671
- #: admin/wizard/wizard.php:1696
11672
  msgid "Network|Multisite Help Info"
11673
  msgstr ""
11674
 
11675
- #: admin/wizard/wizard.php:1696
11676
  msgid ""
11677
  "Setup Wizard Export|Import works for Network|Multisite site types, but only "
11678
  "the Primary site's BPS plugin option settings are exported and imported. BPS "
@@ -11684,17 +12180,17 @@ msgid ""
11684
  "option settings from the Primary site to all Subsites."
11685
  msgstr ""
11686
 
11687
- #: admin/wizard/wizard.php:1703
11688
  msgid ""
11689
  "Clicking OK will Import BPS plugin settings from the bps-settings-export.zip "
11690
  "file on your computer."
11691
  msgstr ""
11692
 
11693
- #: admin/wizard/wizard.php:1703
11694
  msgid "Click OK to Import BPS plugin settings or click Cancel."
11695
  msgstr ""
11696
 
11697
- #: admin/wizard/wizard.php:1712
11698
  msgid ""
11699
  "Clicking OK will Export your BPS plugin settings into the bps-settings-"
11700
  "export.zip file, which you can then download to your computer by clicking "
@@ -11702,33 +12198,33 @@ msgid ""
11702
  "message."
11703
  msgstr ""
11704
 
11705
- #: admin/wizard/wizard.php:1712
11706
  msgid "Click OK to Export BPS plugin settings or click Cancel."
11707
  msgstr ""
11708
 
11709
- #: admin/wizard/wizard.php:1847
11710
  msgid ""
11711
  "BPS plugin option settings exported successfully. Click the Download Zip "
11712
  "Export button to download the Setup Wizard Export zip file: bps-settings-"
11713
  "export.zip."
11714
  msgstr ""
11715
 
11716
- #: admin/wizard/wizard.php:1847
11717
  msgid ""
11718
  " and select the Zip File Download Fix On setting for the Zile File Download "
11719
  "Fix option. You should now be able to download the bps-settings-export.zip "
11720
  "file."
11721
  msgstr ""
11722
 
11723
- #: admin/wizard/wizard.php:2023 admin/wizard/wizard.php:2055
11724
  msgid "BPS plugin settings imported successfully."
11725
  msgstr ""
11726
 
11727
- #: admin/wizard/wizard.php:2023 admin/wizard/wizard.php:2055
11728
  msgid "IMPORTANT: Run the BPS Setup Wizard now."
11729
  msgstr ""
11730
 
11731
- #: admin/wizard/wizard.php:2023 admin/wizard/wizard.php:2055
11732
  msgid ""
11733
  "After running the Setup Wizard go to the BPS Security > htaccess Core > "
11734
  "Custom Code tab page and check all of your custom htaccess code for any "
@@ -11738,28 +12234,28 @@ msgid ""
11738
  "code or remove it from BPS Custom Code."
11739
  msgstr ""
11740
 
11741
- #: admin/wizard/wizard.php:2069
11742
  msgid ""
11743
  "Either the bps-settings-export.zip file has not been selected yet for Import "
11744
  "or the file "
11745
  msgstr ""
11746
 
11747
- #: admin/wizard/wizard.php:2069
11748
  msgid ""
11749
  " is not a valid Setup Wizard Export file or file name. The BPS Setup Wizard "
11750
  "Import feature only allows the bps-settings-export.zip file to be Uploaded/"
11751
  "Imported. The filename MUST be named: bps-settings-export.zip."
11752
  msgstr ""
11753
 
11754
- #: bulletproof-security.php:151
11755
  msgid "Uninstall Options"
11756
  msgstr ""
11757
 
11758
- #: bulletproof-security.php:173
11759
  msgid "Forum - Support"
11760
  msgstr ""
11761
 
11762
- #: bulletproof-security.php:174
11763
  msgid "Upgrade"
11764
  msgstr ""
11765
 
@@ -11801,7 +12297,7 @@ msgstr ""
11801
 
11802
  #: includes/functions.php:349 includes/functions.php:587
11803
  #: includes/functions.php:654 includes/hud-autofix-setup.php:70
11804
- #: includes/hud-dismiss-functions.php:553
11805
  msgid "Go to the "
11806
  msgstr ""
11807
 
@@ -11847,14 +12343,14 @@ msgid ""
11847
  msgstr ""
11848
 
11849
  #: includes/functions.php:387 includes/hud-autofix-setup.php:70
11850
- #: includes/hud-dismiss-functions.php:73 includes/hud-dismiss-functions.php:107
11851
- #: includes/hud-dismiss-functions.php:140
11852
- #: includes/hud-dismiss-functions.php:353
11853
- #: includes/hud-dismiss-functions.php:358
11854
- #: includes/hud-dismiss-functions.php:397
11855
- #: includes/hud-dismiss-functions.php:402
11856
- #: includes/hud-dismiss-functions.php:460
11857
- #: includes/hud-dismiss-functions.php:502
11858
  msgid ""
11859
  "To Dismiss this Notice click the Dismiss Notice button below. To Reset "
11860
  "Dismiss Notices click the Reset|Recheck Dismiss Notices button on the Custom "
@@ -11862,29 +12358,29 @@ msgid ""
11862
  msgstr ""
11863
 
11864
  #: includes/functions.php:387 includes/hud-autofix-setup.php:70
11865
- #: includes/hud-dismiss-functions.php:73 includes/hud-dismiss-functions.php:107
11866
- #: includes/hud-dismiss-functions.php:140
11867
- #: includes/hud-dismiss-functions.php:205
11868
- #: includes/hud-dismiss-functions.php:220
11869
- #: includes/hud-dismiss-functions.php:226
11870
- #: includes/hud-dismiss-functions.php:232
11871
- #: includes/hud-dismiss-functions.php:238
11872
- #: includes/hud-dismiss-functions.php:252
11873
- #: includes/hud-dismiss-functions.php:258
11874
- #: includes/hud-dismiss-functions.php:263
11875
- #: includes/hud-dismiss-functions.php:353
11876
- #: includes/hud-dismiss-functions.php:358
11877
- #: includes/hud-dismiss-functions.php:397
11878
- #: includes/hud-dismiss-functions.php:402
11879
- #: includes/hud-dismiss-functions.php:460
11880
- #: includes/hud-dismiss-functions.php:502
11881
- #: includes/hud-dismiss-functions.php:592
11882
- #: includes/hud-dismiss-functions.php:627
11883
- #: includes/hud-dismiss-functions.php:664
11884
- #: includes/hud-dismiss-functions.php:707
11885
- #: includes/hud-dismiss-functions.php:745
11886
- #: includes/hud-dismiss-functions.php:783
11887
- #: includes/hud-dismiss-functions.php:835
11888
  msgid "Dismiss Notice"
11889
  msgstr ""
11890
 
@@ -11989,63 +12485,59 @@ msgid ""
11989
  "ERROR: wp_remote_get() function is blocked or unable to get the URL path"
11990
  msgstr ""
11991
 
11992
- #: includes/functions.php:1178
11993
- msgid "mod_access_compat and mod_authz_core or mod_rewrite are not Loaded"
11994
- msgstr ""
11995
-
11996
- #: includes/functions.php:1188
11997
  msgid ""
11998
  "mod_access_compat is Loaded|Order, Allow, Deny directives are supported|"
11999
  "IfModule: Yes"
12000
  msgstr ""
12001
 
12002
- #: includes/functions.php:1196
12003
  msgid "mod_access_compat is not Loaded|IfModule: Yes"
12004
  msgstr ""
12005
 
12006
- #: includes/functions.php:1209
12007
  msgid ""
12008
  "mod_authz_core is Loaded|Order, Allow, Deny directives are not supported|BC: "
12009
  "No|IfModule: Yes"
12010
  msgstr ""
12011
 
12012
- #: includes/functions.php:1214
12013
  msgid "mod_authz_core is not Loaded|IfModule: Yes"
12014
  msgstr ""
12015
 
12016
- #: includes/functions.php:1223
12017
  msgid ""
12018
  "mod_authz_host is Loaded|Order, Allow, Deny directives are supported|BC: Yes|"
12019
  "IfModule: Yes"
12020
  msgstr ""
12021
 
12022
- #: includes/functions.php:1228
12023
  msgid ""
12024
  "mod_authz_host is Loaded|Order, Allow, Deny directives are not supported|BC: "
12025
  "No|IfModule: Yes"
12026
  msgstr ""
12027
 
12028
- #: includes/functions.php:1233
12029
  msgid "mod_authz_host is not Loaded|IfModule: Yes"
12030
  msgstr ""
12031
 
12032
- #: includes/functions.php:1240
12033
  msgid "mod_rewrite Module is Loaded|IfModule: Yes"
12034
  msgstr ""
12035
 
12036
- #: includes/functions.php:1245
12037
  msgid "mod_rewrite Inconclusive: Status is not 200, 301, 302, 403 or 404"
12038
  msgstr ""
12039
 
12040
- #: includes/functions.php:1274
12041
  msgid "mod_security Module is Loaded|Enabled|IfModule: Yes"
12042
  msgstr ""
12043
 
12044
- #: includes/functions.php:1277
12045
  msgid "mod_security2 Module is Loaded|Enabled|IfModule: Yes"
12046
  msgstr ""
12047
 
12048
- #: includes/functions.php:1289
12049
  msgid "mod_security Module is not Loaded|Enabled|IfModule: Yes"
12050
  msgstr ""
12051
 
@@ -12320,7 +12812,7 @@ msgid ""
12320
  "file."
12321
  msgstr ""
12322
 
12323
- #: includes/general-functions.php:1009
12324
  msgid " Hosting Account Root Folder Option setup or updated Successfully!"
12325
  msgstr ""
12326
 
@@ -13243,7 +13735,7 @@ msgid ""
13243
  msgstr ""
13244
 
13245
  #: includes/hud-autofix-whitelist.php:821
13246
- #: includes/hud-dismiss-functions.php:783
13247
  msgid "Click this "
13248
  msgstr ""
13249
 
@@ -13289,505 +13781,482 @@ msgstr ""
13289
  msgid "No Plugin or Theme AutoFix Custom Code Whitelist Rules were found"
13290
  msgstr ""
13291
 
13292
- #: includes/hud-dismiss-functions.php:51
13293
  msgid ""
13294
  "WARNING! BPS requires at least PHP5 to function correctly. Your PHP version "
13295
  "is: "
13296
  msgstr ""
13297
 
13298
- #: includes/hud-dismiss-functions.php:51
13299
  msgid "BPS Guide - PHP5 Solution"
13300
  msgstr ""
13301
 
13302
- #: includes/hud-dismiss-functions.php:51
13303
  msgid ""
13304
  "The BPS Guide will open in a new browser window. You will not be directed "
13305
  "away from your WordPress Dashboard."
13306
  msgstr ""
13307
 
13308
- #: includes/hud-dismiss-functions.php:73
13309
  msgid ""
13310
  "WARNING! BPS has detected that Safe Mode is set to On in your php.ini file."
13311
  msgstr ""
13312
 
13313
- #: includes/hud-dismiss-functions.php:73
13314
  msgid ""
13315
  "If you see errors that BPS was unable to automatically create the backup "
13316
  "folders this is probably the reason why."
13317
  msgstr ""
13318
 
13319
- #: includes/hud-dismiss-functions.php:107
13320
  msgid "HUD Check: Custom Permalinks are NOT being used."
13321
  msgstr ""
13322
 
13323
- #: includes/hud-dismiss-functions.php:107
13324
  msgid "It is recommended that you use Custom Permalinks: "
13325
  msgstr ""
13326
 
13327
- #: includes/hud-dismiss-functions.php:107
13328
  msgid "How to setup Custom Permalinks"
13329
  msgstr ""
13330
 
13331
- #: includes/hud-dismiss-functions.php:140
13332
  msgid ""
13333
  "WARNING! BPS has detected that your Server is a Windows IIS Server that does "
13334
  "not support htaccess rewriting."
13335
  msgstr ""
13336
 
13337
- #: includes/hud-dismiss-functions.php:140
13338
  msgid "Do NOT activate BulletProof Modes unless you know what you are doing."
13339
  msgstr ""
13340
 
13341
- #: includes/hud-dismiss-functions.php:140
13342
  msgid "Your Server Type is: "
13343
  msgstr ""
13344
 
13345
- #: includes/hud-dismiss-functions.php:140
13346
  msgid "WordPress Codex - Using Permalinks - see IIS section"
13347
  msgstr ""
13348
 
13349
- #: includes/hud-dismiss-functions.php:163
13350
- #: includes/hud-dismiss-functions.php:168
13351
  msgid "WARNING! BPS was unable to automatically create the /"
13352
  msgstr ""
13353
 
13354
- #: includes/hud-dismiss-functions.php:163
13355
  msgid "/bps-backup folder."
13356
  msgstr ""
13357
 
13358
- #: includes/hud-dismiss-functions.php:163
13359
- #: includes/hud-dismiss-functions.php:168
13360
  msgid "You will need to create the /"
13361
  msgstr ""
13362
 
13363
- #: includes/hud-dismiss-functions.php:163
13364
  msgid ""
13365
  "/bps-backup folder manually via FTP. The folder permissions for the bps-"
13366
  "backup folder need to be set to 755 in order to successfully perform "
13367
  "permanent online backups."
13368
  msgstr ""
13369
 
13370
- #: includes/hud-dismiss-functions.php:163
13371
- #: includes/hud-dismiss-functions.php:168
13372
  msgid "To remove this message permanently click "
13373
  msgstr ""
13374
 
13375
- #: includes/hud-dismiss-functions.php:163
13376
- #: includes/hud-dismiss-functions.php:168
13377
  msgid "here."
13378
  msgstr ""
13379
 
13380
- #: includes/hud-dismiss-functions.php:168
13381
  msgid "/bps-backup/master-backups folder."
13382
  msgstr ""
13383
 
13384
- #: includes/hud-dismiss-functions.php:168
13385
  msgid ""
13386
  "/bps-backup/master-backups folder manually via FTP. The folder permissions "
13387
  "for the master-backups folder need to be set to 755 in order to successfully "
13388
  "perform permanent online backups."
13389
  msgstr ""
13390
 
13391
- #: includes/hud-dismiss-functions.php:202
13392
- #: includes/hud-dismiss-functions.php:214
13393
  msgid "Bonus Custom Code:"
13394
  msgstr ""
13395
 
13396
- #: includes/hud-dismiss-functions.php:202
13397
- #: includes/hud-dismiss-functions.php:214
13398
  msgid ""
13399
  "Click the links below to get Bonus Custom Code or click the Dismiss Notice "
13400
  "links or click this "
13401
  msgstr ""
13402
 
13403
- #: includes/hud-dismiss-functions.php:202
13404
- #: includes/hud-dismiss-functions.php:214
13405
  msgid "Dismiss All Notices"
13406
  msgstr ""
13407
 
13408
- #: includes/hud-dismiss-functions.php:202
13409
- #: includes/hud-dismiss-functions.php:214
13410
  msgid ""
13411
  " link. To Reset Dismiss Notices click the Reset|Recheck Dismiss Notices "
13412
  "button on the Custom Code page."
13413
  msgstr ""
13414
 
13415
- #: includes/hud-dismiss-functions.php:205
13416
- #: includes/hud-dismiss-functions.php:220
13417
- #: includes/hud-dismiss-functions.php:226
13418
- #: includes/hud-dismiss-functions.php:232
13419
- #: includes/hud-dismiss-functions.php:238
13420
- #: includes/hud-dismiss-functions.php:252
13421
- #: includes/hud-dismiss-functions.php:258
13422
- #: includes/hud-dismiss-functions.php:263
13423
  msgid "Get "
13424
  msgstr ""
13425
 
13426
- #: includes/hud-dismiss-functions.php:205
13427
- #: includes/hud-dismiss-functions.php:252
13428
  msgid "POST Request Attack Protection Code"
13429
  msgstr ""
13430
 
13431
- #: includes/hud-dismiss-functions.php:205
13432
- #: includes/hud-dismiss-functions.php:220
13433
- #: includes/hud-dismiss-functions.php:226
13434
- #: includes/hud-dismiss-functions.php:232
13435
- #: includes/hud-dismiss-functions.php:238
13436
- #: includes/hud-dismiss-functions.php:252
13437
- #: includes/hud-dismiss-functions.php:258
13438
- #: includes/hud-dismiss-functions.php:263
13439
  msgid " or "
13440
  msgstr ""
13441
 
13442
- #: includes/hud-dismiss-functions.php:220
13443
  msgid "Brute Force Login Protection Code"
13444
  msgstr ""
13445
 
13446
- #: includes/hud-dismiss-functions.php:226
13447
  msgid "Speed Boost Cache Code"
13448
  msgstr ""
13449
 
13450
- #: includes/hud-dismiss-functions.php:232
13451
  msgid "Author Enumeration BOT Probe Code"
13452
  msgstr ""
13453
 
13454
- #: includes/hud-dismiss-functions.php:238
13455
  msgid "XML-RPC DDoS Protection Code"
13456
  msgstr ""
13457
 
13458
- #: includes/hud-dismiss-functions.php:258
13459
  msgid "Mime Sniffing|Drive-by Download Attack Protection Code"
13460
  msgstr ""
13461
 
13462
- #: includes/hud-dismiss-functions.php:263
13463
  msgid "External iFrame|Clickjacking Protection Code"
13464
  msgstr ""
13465
 
13466
- #: includes/hud-dismiss-functions.php:353
13467
- #: includes/hud-dismiss-functions.php:397
13468
  msgid "HUD Check: Wordfence PHP/php.ini handler htaccess code detected"
13469
  msgstr ""
13470
 
13471
- #: includes/hud-dismiss-functions.php:353
13472
- #: includes/hud-dismiss-functions.php:397
13473
  msgid ""
13474
  "Wordfence PHP/php.ini handler htaccess code was found in your root .htaccess "
13475
  "file, but was NOT found in BPS Custom Code."
13476
  msgstr ""
13477
 
13478
- #: includes/hud-dismiss-functions.php:353
13479
- #: includes/hud-dismiss-functions.php:397
13480
  msgid ""
13481
  "Using the Wordfence WAF Firewall may cause serious/critical problems for "
13482
  "your website and BPS."
13483
  msgstr ""
13484
 
13485
- #: includes/hud-dismiss-functions.php:358
13486
- #: includes/hud-dismiss-functions.php:402
13487
  msgid "HUD Check: PHP/php.ini handler htaccess code check"
13488
  msgstr ""
13489
 
13490
- #: includes/hud-dismiss-functions.php:358
13491
- #: includes/hud-dismiss-functions.php:402
13492
  msgid ""
13493
  "PHP/php.ini handler htaccess code was found in your root .htaccess file, but "
13494
  "was NOT found in BPS Custom Code."
13495
  msgstr ""
13496
 
13497
- #: includes/hud-dismiss-functions.php:358
13498
- #: includes/hud-dismiss-functions.php:402
13499
  msgid "To automatically fix this click here: "
13500
  msgstr ""
13501
 
13502
- #: includes/hud-dismiss-functions.php:358
13503
- #: includes/hud-dismiss-functions.php:402
13504
  msgid ""
13505
  "The Setup Wizard Pre-Installation Checks feature will automatically fix this "
13506
  "just by visiting the Setup Wizard page."
13507
  msgstr ""
13508
 
13509
- #: includes/hud-dismiss-functions.php:397
13510
  msgid " for the steps to fix this Wordfence problem."
13511
  msgstr ""
13512
 
13513
- #: includes/hud-dismiss-functions.php:460
13514
  msgid ""
13515
  "An htaccess file has been detected in the wp-content folder that breaks BPS "
13516
  "features and functionality"
13517
  msgstr ""
13518
 
13519
- #: includes/hud-dismiss-functions.php:460
13520
  msgid ""
13521
  "If you have or had the Sucuri, Defender or iThemes Security plugins "
13522
  "installed, they create a wp-content htaccess file that breaks several things "
13523
  "in BPS Pro and other plugins as well."
13524
  msgstr ""
13525
 
13526
- #: includes/hud-dismiss-functions.php:460
13527
  msgid ""
13528
  "To fix the Sucuri problem go to the Sucuri Settings page, click the "
13529
  "Hardening tab and click the Revert Hardening button for the Block PHP Files "
13530
  "in WP-CONTENT Directory option setting."
13531
  msgstr ""
13532
 
13533
- #: includes/hud-dismiss-functions.php:460
13534
  msgid ""
13535
  "To fix the Defender Security problem go to the Security Tweaks page, click "
13536
  "the PHP Execution option setting and click the Revert button."
13537
  msgstr ""
13538
 
13539
- #: includes/hud-dismiss-functions.php:460
13540
  msgid ""
13541
  "o fix the iThemes problem go to the System Tweaks page, uncheck the Disable "
13542
  "PHP in Plugins option setting."
13543
  msgstr ""
13544
 
13545
- #: includes/hud-dismiss-functions.php:502
13546
  msgid "The WordPress Firewall 2 plugin is installed and activated"
13547
  msgstr ""
13548
 
13549
- #: includes/hud-dismiss-functions.php:502
13550
  msgid "It is recommended that you delete the WordPress Firewall 2 plugin."
13551
  msgstr ""
13552
 
13553
- #: includes/hud-dismiss-functions.php:502
13554
  msgid " for more information."
13555
  msgstr ""
13556
 
13557
- #: includes/hud-dismiss-functions.php:534
13558
  msgid "Notice: BPS Query String Exploits Code Changes"
13559
  msgstr ""
13560
 
13561
- #: includes/hud-dismiss-functions.php:534
13562
  msgid ""
13563
  "Older BPS Query String Exploits code was found in BPS Custom Code. Several "
13564
  "Query String Exploits rules were changed/added/modified in the root ."
13565
  "htaccess file in BPS .49.6, .50.2 & .50.3."
13566
  msgstr ""
13567
 
13568
- #: includes/hud-dismiss-functions.php:534
13569
  msgid ""
13570
  "Copy the new Query String Exploits section of code from your root .htaccess "
13571
  "file and paste it into this BPS Custom Code text box: CUSTOM CODE BPSQSE BPS "
13572
  "QUERY STRING EXPLOITS and click the Save Root Custom Code button."
13573
  msgstr ""
13574
 
13575
- #: includes/hud-dismiss-functions.php:534
13576
  msgid ""
13577
  "This Notice will go away once you have copied the new Query String Exploits "
13578
  "code to BPS Custom Code and clicked the Save Root Custom Code button."
13579
  msgstr ""
13580
 
13581
- #: includes/hud-dismiss-functions.php:553
13582
  msgid "BPS Alert! A BPS htaccess file was NOT found in the BPS Backup folder: "
13583
  msgstr ""
13584
 
13585
- #: includes/hud-dismiss-functions.php:553
13586
  msgid " and click the BPS Backup Folder BulletProof Mode Activate button."
13587
  msgstr ""
13588
 
13589
- #: includes/hud-dismiss-functions.php:592
13590
  msgid "New Improved BPS Speed Boost Cache Code"
13591
  msgstr ""
13592
 
13593
- #: includes/hud-dismiss-functions.php:592
13594
  msgid ""
13595
  "Older BPS Speed Boost Cache Code was found saved in this BPS Custom Code "
13596
  "text box: CUSTOM CODE TOP PHP/PHP.INI HANDLER/CACHE CODE"
13597
  msgstr ""
13598
 
13599
- #: includes/hud-dismiss-functions.php:592
13600
  msgid ""
13601
  "Newer improved BPS Speed Boost Cache Code has been created, which should "
13602
  "improve website load speed performance even more."
13603
  msgstr ""
13604
 
13605
- #: includes/hud-dismiss-functions.php:592
13606
  msgid "Get The New Improved BPS Speed Boost Cache Code"
13607
  msgstr ""
13608
 
13609
- #: includes/hud-dismiss-functions.php:592
13610
  msgid ". To dismiss this Notice click the Dismiss Notice button below."
13611
  msgstr ""
13612
 
13613
- #: includes/hud-dismiss-functions.php:592
13614
  msgid ""
13615
  "To Reset Dismiss Notices click the Reset|Recheck Dismiss Notices button on "
13616
  "the Custom Code page."
13617
  msgstr ""
13618
 
13619
- #: includes/hud-dismiss-functions.php:599
13620
  msgid "BPS Speed Boost Cache Custom Code Notice"
13621
  msgstr ""
13622
 
13623
- #: includes/hud-dismiss-functions.php:599
13624
  msgid ""
13625
  "BPS Speed Boost Cache Code was found in this BPS Custom Code text box: "
13626
  "CUSTOM CODE TOP PHP/PHP.INI HANDLER/CACHE CODE"
13627
  msgstr ""
13628
 
13629
- #: includes/hud-dismiss-functions.php:599
13630
  msgid ""
13631
  "and another caching plugin's Marker text was also found in this BPS Custom "
13632
  "Code text box."
13633
  msgstr ""
13634
 
13635
- #: includes/hud-dismiss-functions.php:599
13636
  msgid "Click this link: "
13637
  msgstr ""
13638
 
13639
- #: includes/hud-dismiss-functions.php:599
13640
  msgid "BPS Speed Boost Cache Custom Code Notice Forum Topic"
13641
  msgstr ""
13642
 
13643
- #: includes/hud-dismiss-functions.php:599
13644
  msgid " for help information on what this Notice means and what to do next."
13645
  msgstr ""
13646
 
13647
- #: includes/hud-dismiss-functions.php:627
13648
- msgid "MScan First Run Notice"
13649
- msgstr ""
13650
-
13651
- #: includes/hud-dismiss-functions.php:627
13652
- msgid ""
13653
- "Please take a few minutes to read the \"Basic Info|Recommendations|"
13654
- "Limitations|Restrictions\" help section in the"
13655
- msgstr ""
13656
-
13657
- #: includes/hud-dismiss-functions.php:627
13658
- msgid "before running a scan."
13659
- msgstr ""
13660
-
13661
- #: includes/hud-dismiss-functions.php:627
13662
- msgid ""
13663
- "It is highly recommended that you use the Scan Time Estimate Tool before "
13664
- "running an actual scan. The Scan Time Estimate Tool calculates the total "
13665
- "estimated time of a scan based on your MScan Option settings without "
13666
- "actually running a scan. To Dismiss this Notice click the Dismiss Notice "
13667
- "button below. To Reset Dismiss Notices click the Reset|Recheck Dismiss "
13668
- "Notices button on the BPS Custom Code page."
13669
- msgstr ""
13670
-
13671
- #: includes/hud-dismiss-functions.php:664
13672
  msgid "BPS New Feature Notice: JTC-Lite"
13673
  msgstr ""
13674
 
13675
- #: includes/hud-dismiss-functions.php:664
13676
  msgid ""
13677
  "JTC-Lite protects the WordPress Login page Form against automated SpamBot "
13678
  "and HackerBot Brute Force Login attacks"
13679
  msgstr ""
13680
 
13681
- #: includes/hud-dismiss-functions.php:664
13682
  msgid ""
13683
  "and also prevents User Accounts from being locked repeatedly by Brute Force "
13684
  "Login Bot attacks on your Login page Form."
13685
  msgstr ""
13686
 
13687
- #: includes/hud-dismiss-functions.php:664
13688
  msgid "To enable/turn On JTC-Lite, click this "
13689
  msgstr ""
13690
 
13691
- #: includes/hud-dismiss-functions.php:664
13692
  msgid ""
13693
  ". Click/check the Login Form Checkbox and click the Save Options button."
13694
  msgstr ""
13695
 
13696
- #: includes/hud-dismiss-functions.php:664
13697
- #: includes/hud-dismiss-functions.php:745
13698
- #: includes/hud-dismiss-functions.php:783
13699
- #: includes/hud-dismiss-functions.php:835
 
13700
  msgid ""
13701
  "To Dismiss this Notice click the Dismiss Notice button below. To Reset "
13702
  "Dismiss Notices click the Reset|Recheck Dismiss Notices button on the BPS "
13703
  "Custom Code page."
13704
  msgstr ""
13705
 
13706
- #: includes/hud-dismiss-functions.php:707
13707
  msgid "BPS Plugin Star Rating Request"
13708
  msgstr ""
13709
 
13710
- #: includes/hud-dismiss-functions.php:707
13711
  msgid ""
13712
  "A BPS star rating only takes a couple of minutes and would be very much "
13713
  "appreciated. We are looking for 5 star ratings and not \"fancy\" reviews."
13714
  msgstr ""
13715
 
13716
- #: includes/hud-dismiss-functions.php:707
13717
  msgid ""
13718
  "A simple review like \"works great\" or \"has been protecting my website for "
13719
  "X months or X years\" is perfect."
13720
  msgstr ""
13721
 
13722
- #: includes/hud-dismiss-functions.php:707
13723
  msgid "Click this link to submit a BPS Plugin Star Rating: "
13724
  msgstr ""
13725
 
13726
- #: includes/hud-dismiss-functions.php:707
13727
  msgid "BPS Plugin Star Rating"
13728
  msgstr ""
13729
 
13730
- #: includes/hud-dismiss-functions.php:707
13731
  msgid ""
13732
  "login to the WordPress.org site and scroll to the bottom of the Reviews page."
13733
  msgstr ""
13734
 
13735
- #: includes/hud-dismiss-functions.php:707
13736
  msgid ""
13737
  "To Dismiss this one-time Notice click the Dismiss Notice button below. To "
13738
  "Reset Dismiss Notices click the Reset|Recheck Dismiss Notices button on the "
13739
  "BPS Custom Code page."
13740
  msgstr ""
13741
 
13742
- #: includes/hud-dismiss-functions.php:745
13743
  msgid "BPS Notice: Mod Security Module is Loaded|Enabled"
13744
  msgstr ""
13745
 
13746
- #: includes/hud-dismiss-functions.php:745
13747
  msgid "Please take a minute to view this Mod Security help forum topic: "
13748
  msgstr ""
13749
 
13750
- #: includes/hud-dismiss-functions.php:745
13751
  msgid "Mod Security Common Known Problems"
13752
  msgstr ""
13753
 
13754
- #: includes/hud-dismiss-functions.php:745
13755
  msgid ""
13756
  "If you are not experiencing any of the problems listed in the Mod Security "
13757
  "help forum topic then you can dismiss this Dismiss Notice."
13758
  msgstr ""
13759
 
13760
- #: includes/hud-dismiss-functions.php:783
13761
  msgid "BPS GDPR Compliance Notice"
13762
  msgstr ""
13763
 
13764
- #: includes/hud-dismiss-functions.php:783
13765
  msgid ""
13766
  "A new Setup Wizard Option has been created which allows you to turn off all "
13767
  "IP address logging in BPS to make your website GDPR Compliant."
13768
  msgstr ""
13769
 
13770
- #: includes/hud-dismiss-functions.php:783
13771
  msgid "GDPR Compliance Setup Wizard Option link"
13772
  msgstr ""
13773
 
13774
- #: includes/hud-dismiss-functions.php:783
13775
  msgid "Choose the GDPR Compliance On setting."
13776
  msgstr ""
13777
 
13778
- #: includes/hud-dismiss-functions.php:783
13779
  msgid "For more information about GDPR Compliance click this "
13780
  msgstr ""
13781
 
13782
- #: includes/hud-dismiss-functions.php:783
13783
  msgid "GDPR Compliance Forum Topic link"
13784
  msgstr ""
13785
 
13786
- #: includes/hud-dismiss-functions.php:835
13787
  msgid "BPS wp-config.php file WP Automatic Update constants detected"
13788
  msgstr ""
13789
 
13790
- #: includes/hud-dismiss-functions.php:835
13791
  msgid ""
13792
  "You are using the BPS MU Tools plugin option settings to handle WP Automatic "
13793
  "Updates. BPS detected that you are also using one or both of these WP "
@@ -13798,6 +14267,25 @@ msgid ""
13798
  "Notice after you have commented them out."
13799
  msgstr ""
13800
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13801
  #: includes/login-security.php:124 includes/login-security.php:130
13802
  #: includes/login-security.php:343 includes/login-security.php:485
13803
  #: includes/login-security.php:491 includes/login-security.php:617
3
  msgstr ""
4
  "Project-Id-Version: bulletproof-security\n"
5
  "Report-Msgid-Bugs-To: \n"
6
+ "POT-Creation-Date: 2021-05-09 13:52-0700\n"
7
  "PO-Revision-Date: 2015-06-20 19:13-0800\n"
8
  "Last-Translator: Ed Alexander <edward@ait-pro.com>\n"
9
  "Language-Team: AITpro <info@ait-pro.com>\n"
261
  msgstr ""
262
 
263
  #: admin/core/core-custom-code.php:472 admin/core/core-custom-code.php:844
264
+ #: admin/core/core.php:1991
265
  msgid "Click the Custom Code Read Me help button for more help info."
266
  msgstr ""
267
 
361
  msgstr ""
362
 
363
  #: admin/core/core-export-import.php:115 admin/login/lsm-export.php:49
364
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
365
+ #: admin/wizard/wizard.php:1859
366
  msgid ""
367
  "If you see a 403 error and/or are unable to download the zip file then click "
368
  "here: "
369
  msgstr ""
370
 
371
  #: admin/core/core-export-import.php:115 admin/login/lsm-export.php:49
372
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
373
+ #: admin/wizard/wizard.php:1083 admin/wizard/wizard.php:1182
374
+ #: admin/wizard/wizard.php:1184 admin/wizard/wizard.php:1859
375
  #: includes/hud-autofix-whitelist.php:821
376
  msgid "Setup Wizard Options"
377
  msgstr ""
383
  msgstr ""
384
 
385
  #: admin/core/core-export-import.php:115 admin/login/lsm-export.php:49
386
+ #: admin/wizard/wizard.php:1859
387
  msgid "Download Zip Export"
388
  msgstr ""
389
 
390
+ #: admin/core/core-export-import.php:144 admin/wizard/wizard.php:2019
391
  msgid "Zip File Upload Successful."
392
  msgstr ""
393
 
394
+ #: admin/core/core-export-import.php:155 admin/wizard/wizard.php:2030
395
  msgid "Zip File Exraction Successful. Method: ZipArchive class."
396
  msgstr ""
397
 
421
  msgid "3. Click the wp-admin Folder BulletProof Mode Activate button."
422
  msgstr ""
423
 
424
+ #: admin/core/core-export-import.php:169 admin/wizard/wizard.php:2041
425
  msgid "ERROR: Zip File Extraction Failed. Method: ZipArchive class."
426
  msgstr ""
427
 
428
+ #: admin/core/core-export-import.php:189 admin/wizard/wizard.php:2061
429
  msgid "Zip File Extraction Successful. Method: PclZip."
430
  msgstr ""
431
 
432
+ #: admin/core/core-export-import.php:203 admin/wizard/wizard.php:2073
433
  msgid "ERROR: Zip File Extraction Failed. Method: PclZip."
434
  msgstr ""
435
 
436
+ #: admin/core/core-export-import.php:211 admin/wizard/wizard.php:2081
437
  msgid "ERROR: Zip File Upload Failed."
438
  msgstr ""
439
 
464
  msgstr ""
465
 
466
  #: admin/core/core-forms.php:18 admin/core/core-forms.php:98
467
+ #: admin/core/core.php:1266
468
  msgid "htaccess Files Disabled: wp-admin htaccess file writing is disabled. "
469
  msgstr ""
470
 
474
  #: admin/core/core-forms.php:364 admin/core/core-forms.php:430
475
  #: admin/core/core-htaccess-code.php:426 admin/core/core-htaccess-code.php:510
476
  #: admin/core/core-htaccess-code.php:579 admin/core/core-htaccess-code.php:663
477
+ #: admin/core/core.php:873 admin/core/core.php:963 admin/core/core.php:1077
478
+ #: admin/core/core.php:1167 admin/core/core.php:1266
479
  #: admin/maintenance/maintenance.php:869 admin/maintenance/maintenance.php:1185
480
  #: admin/maintenance/maintenance.php:1694
481
  #: admin/maintenance/maintenance.php:1824
489
  #: admin/core/core-forms.php:364 admin/core/core-forms.php:430
490
  #: admin/core/core-htaccess-code.php:426 admin/core/core-htaccess-code.php:510
491
  #: admin/core/core-htaccess-code.php:579 admin/core/core-htaccess-code.php:663
492
+ #: admin/core/core.php:873 admin/core/core.php:963 admin/core/core.php:1077
493
+ #: admin/core/core.php:1167 admin/core/core.php:1266
494
  #: admin/maintenance/maintenance.php:869 admin/maintenance/maintenance.php:1185
495
  #: admin/maintenance/maintenance.php:1694
496
  #: admin/maintenance/maintenance.php:1824
497
  #: admin/maintenance/maintenance.php:2015 admin/wizard/wizard-functions.php:44
498
+ #: admin/wizard/wizard.php:1095
499
  msgid "htaccess Files Disabled Forum Topic"
500
  msgstr ""
501
 
828
  msgid "Success! The New Improved BPS Speed Boost Cache Code Notice is reset."
829
  msgstr ""
830
 
 
 
 
 
 
 
 
 
831
  #: admin/core/core-forms.php:654
832
  msgid "The JTC-Lite New Feature Notice is NOT set. Nothing to reset."
833
  msgstr ""
1006
  "Read Me help file for BPS troubleshooting steps."
1007
  msgstr ""
1008
 
1009
+ #: admin/core/core-help-text.php:15 admin/wizard/wizard.php:1136
1010
  msgid "Notes: "
1011
  msgstr ""
1012
 
1073
  "Send Email Alerts."
1074
  msgstr ""
1075
 
1076
+ #: admin/core/core-help-text.php:18 admin/core/core.php:522
1077
  msgid "HPF Cron Check Frequency:"
1078
  msgstr ""
1079
 
1085
  "Options button to save your settings."
1086
  msgstr ""
1087
 
1088
+ #: admin/core/core-help-text.php:18 admin/core/core.php:533
1089
  msgid "HPF Cron On|Off:"
1090
  msgstr ""
1091
 
1095
  "HPF Cron Off. Click the Save HPF Cron Options button to save your settings."
1096
  msgstr ""
1097
 
1098
+ #: admin/core/core-help-text.php:18 admin/core/core.php:555
1099
  msgid "Ignore Hidden Plugin Folders & Files:"
1100
  msgstr ""
1101
 
1197
  "permanently. To save any new htaccess code permanently use BPS Custom Code."
1198
  msgstr ""
1199
 
1200
+ #: admin/core/core-help-text.php:30 admin/core/core.php:234
1201
+ #: admin/core/core.php:356 admin/core/core.php:457 admin/core/core.php:585
1202
+ #: admin/core/core.php:673 admin/core/core.php:761 admin/core/core.php:1858
1203
  #: admin/db-backup-security/db-backup-help-text.php:12
1204
  #: admin/db-backup-security/db-backup-help-text.php:15
1205
  #: admin/db-backup-security/db-backup-security.php:303
1206
  #: admin/email-log-settings/email-log-settings.php:89 admin/login/login.php:215
1207
  #: admin/login/login.php:842 admin/login/login.php:1178
1208
  #: admin/login/login.php:1715 admin/maintenance/maintenance.php:207
1209
+ #: admin/mscan/mscan-help-text.php:65 admin/mscan/mscan-help-text.php:78
1210
+ #: admin/mscan/mscan-help-text.php:85 admin/mscan/mscan.php:221
1211
  #: admin/security-log/security-log.php:229 admin/system-info/system-info.php:86
1212
+ #: admin/theme-skin/theme-skin.php:93 admin/wizard/wizard.php:1122
1213
+ #: admin/wizard/wizard.php:1190 admin/wizard/wizard.php:1699
1214
  msgid ""
1215
  "This Read Me Help window is draggable (top) and resizable (bottom right "
1216
  "corner)"
1732
 
1733
  #: admin/core/core-htaccess-code.php:426 admin/core/core-htaccess-code.php:510
1734
  #: admin/core/core-htaccess-code.php:579 admin/core/core-htaccess-code.php:663
1735
+ #: admin/core/core.php:1167
1736
  msgid "htaccess Files Disabled: Root htaccess file writing is disabled. "
1737
  msgstr ""
1738
 
1739
  #: admin/core/core-htaccess-code.php:448 admin/core/core-htaccess-code.php:601
1740
+ #: admin/core/core.php:1010
1741
  msgid "Failed to copy your Custom default.htaccess file: "
1742
  msgstr ""
1743
 
1744
  #: admin/core/core-htaccess-code.php:448 admin/core/core-htaccess-code.php:601
1745
+ #: admin/core/core.php:1010
1746
  msgid " to: "
1747
  msgstr ""
1748
 
1778
 
1779
  #: admin/core/core.php:42 admin/db-backup-security/db-backup-security.php:40
1780
  #: admin/email-log-settings/email-log-settings.php:35 admin/login/login.php:35
1781
+ #: admin/maintenance/maintenance.php:35 admin/mscan/mscan.php:20
1782
  #: admin/security-log/security-log.php:35 admin/system-info/system-info.php:35
1783
  #: admin/theme-skin/theme-skin.php:40 admin/wizard/wizard.php:84
1784
  msgid "Rate BPS"
1785
  msgstr ""
1786
 
1787
+ #: admin/core/core.php:151 admin/includes/admin.php:413
1788
+ #: admin/includes/admin.php:414
1789
  msgid "BulletProof Security ~ htaccess Core"
1790
  msgstr ""
1791
 
1792
+ #: admin/core/core.php:180 admin/db-backup-security/db-backup-security.php:52
1793
  #: admin/email-log-settings/email-log-settings.php:47 admin/login/login.php:148
1794
+ #: admin/maintenance/maintenance.php:57 admin/mscan/mscan.php:69
1795
  #: admin/security-log/security-log.php:47 admin/system-info/system-info.php:47
1796
  #: admin/theme-skin/theme-skin.php:52 admin/wizard/wizard.php:182
1797
  msgid "Settings Saved"
1798
  msgstr ""
1799
 
1800
+ #: admin/core/core.php:205
1801
  msgid "Security Modes"
1802
  msgstr ""
1803
 
1804
+ #: admin/core/core.php:206
1805
  msgid "htaccess File Editor"
1806
  msgstr ""
1807
 
1808
+ #: admin/core/core.php:207 admin/core/core.php:1842 admin/core/core.php:1855
1809
  msgid "Custom Code"
1810
  msgstr ""
1811
 
1812
+ #: admin/core/core.php:208
1813
  msgid "My Notes"
1814
  msgstr ""
1815
 
1816
+ #: admin/core/core.php:209
1817
  msgid "Whats New"
1818
  msgstr ""
1819
 
1820
+ #: admin/core/core.php:210 admin/db-backup-security/db-backup-security.php:284
1821
  #: admin/db-backup-security/db-backup-security.php:1739
1822
  #: admin/email-log-settings/email-log-settings.php:70 admin/login/login.php:187
1823
+ #: admin/maintenance/maintenance.php:171 admin/mscan/mscan.php:203
1824
+ #: admin/mscan/mscan.php:3493 admin/security-log/security-log.php:210
1825
  #: admin/system-info/system-info.php:73 admin/theme-skin/theme-skin.php:75
1826
  #: admin/theme-skin/theme-skin.php:251
1827
  msgid "Help &amp; FAQ"
1828
  msgstr ""
1829
 
1830
+ #: admin/core/core.php:211 bulletproof-security.php:182
1831
  msgid "BPS Pro Features"
1832
  msgstr ""
1833
 
1834
+ #: admin/core/core.php:219
1835
  msgid "htaccess File Security Modes ~ "
1836
  msgstr ""
1837
 
1838
+ #: admin/core/core.php:219
1839
  msgid "RBM, WBM, HPF, MBM & BBM BulletProof Modes"
1840
  msgstr ""
1841
 
1842
+ #: admin/core/core.php:219 admin/core/core.php:801 admin/core/core.php:1836
1843
+ #: admin/core/core.php:1970 admin/core/core.php:2076
1844
  #: admin/db-backup-security/db-backup-security.php:292
1845
  #: admin/db-backup-security/db-backup-security.php:1242
1846
  #: admin/db-backup-security/db-backup-security.php:1398
1847
  #: admin/email-log-settings/email-log-settings.php:78 admin/login/login.php:204
1848
  #: admin/login/login.php:831 admin/maintenance/maintenance.php:191
1849
+ #: admin/maintenance/maintenance.php:193
1850
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1851
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
1852
  msgid "Want even more security protection?"
1853
  msgstr ""
1854
 
1855
+ #: admin/core/core.php:219 admin/core/core.php:801 admin/core/core.php:1836
1856
+ #: admin/core/core.php:1970 admin/core/core.php:2076
1857
  #: admin/email-log-settings/email-log-settings.php:78
1858
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1859
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1860
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
1861
  msgid ""
1862
  "Protect all of your Plugins (plugin folders and files) with an IP Firewall: "
1863
  msgstr ""
1864
 
1865
+ #: admin/core/core.php:219 admin/core/core.php:801 admin/core/core.php:1836
1866
+ #: admin/core/core.php:1970 admin/core/core.php:2076
1867
  #: admin/email-log-settings/email-log-settings.php:78
1868
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1869
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1870
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
1871
  msgid "Get BPS Pro Plugin Firewall"
1872
  msgstr ""
1873
 
1874
+ #: admin/core/core.php:219 admin/core/core.php:801 admin/core/core.php:1836
1875
+ #: admin/core/core.php:1970 admin/core/core.php:2076
1876
  #: admin/email-log-settings/email-log-settings.php:78
1877
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1878
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1879
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
1880
  msgid ""
1881
  "Protect your WordPress uploads folder against remote access or execution of "
1882
  "files: "
1883
  msgstr ""
1884
 
1885
+ #: admin/core/core.php:219 admin/core/core.php:801 admin/core/core.php:1836
1886
+ #: admin/core/core.php:1970 admin/core/core.php:2076
1887
  #: admin/email-log-settings/email-log-settings.php:78
1888
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
1889
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
1890
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
1891
  msgid "Get BPS Pro Uploads Anti-Exploit Guard"
1892
  msgstr ""
1893
 
1894
+ #: admin/core/core.php:225 admin/core/core.php:813 admin/core/core.php:1877
1895
+ #: admin/core/core.php:1913 admin/core/core.php:1930 admin/login/login.php:164
1896
  #: admin/login/login.php:222 admin/login/login.php:944
1897
  #: admin/login/login.php:1199 admin/system-info/system-info.php:99
1898
  #: admin/system-info/system-info.php:1059
1899
  msgid "Permission Denied"
1900
  msgstr ""
1901
 
1902
+ #: admin/core/core.php:227
1903
  msgid "Activate|Deactivate Security Modes"
1904
  msgstr ""
1905
 
1906
+ #: admin/core/core.php:229 admin/core/core.php:231 admin/core/core.php:353
1907
  msgid "Root Folder BulletProof Mode (RBM)"
1908
  msgstr ""
1909
 
1910
+ #: admin/core/core.php:229 admin/core/core.php:351 admin/core/core.php:452
1911
+ #: admin/core/core.php:580 admin/core/core.php:668 admin/core/core.php:756
1912
+ #: admin/core/core.php:807 admin/core/core.php:1842
1913
  #: admin/db-backup-security/db-backup-security.php:298
1914
  #: admin/db-backup-security/db-backup-security.php:1248
1915
  #: admin/db-backup-security/db-backup-security.php:1404
1916
  #: admin/email-log-settings/email-log-settings.php:84 admin/login/login.php:210
1917
  #: admin/login/login.php:837 admin/login/login.php:1169
1918
  #: admin/login/login.php:1709 admin/maintenance/maintenance.php:202
1919
+ #: admin/mscan/mscan.php:216 admin/mscan/mscan.php:1997
1920
+ #: admin/mscan/mscan.php:2204 admin/mscan/mscan.php:2890
1921
  #: admin/security-log/security-log.php:224 admin/system-info/system-info.php:81
1922
+ #: admin/theme-skin/theme-skin.php:90 admin/wizard/wizard.php:1113
1923
+ #: admin/wizard/wizard.php:1182 admin/wizard/wizard.php:1694
1924
  msgid "Read Me"
1925
  msgstr ""
1926
 
1927
+ #: admin/core/core.php:236 admin/core/core.php:358 admin/core/core.php:1860
1928
  #: admin/db-backup-security/db-backup-security.php:306
1929
  #: admin/email-log-settings/email-log-settings.php:92
1930
  #: admin/login/login.php:1181 admin/maintenance/maintenance.php:210
1931
+ #: admin/mscan/mscan.php:223 admin/system-info/system-info.php:89
1932
  msgid "Forum Help Links: "
1933
  msgstr ""
1934
 
1935
+ #: admin/core/core.php:239 admin/core/core.php:361
1936
  msgid "Setup Wizard & Other Video Tutorials"
1937
  msgstr ""
1938
 
1939
+ #: admin/core/core.php:240 admin/core/core.php:362
1940
+ #: admin/email-log-settings/email-log-settings.php:95
1941
  #: admin/security-log/security-log.php:235
1942
  msgid "BPS Troubleshooting Steps"
1943
  msgstr ""
1944
 
1945
+ #: admin/core/core.php:274 admin/core/core.php:277 admin/core/core.php:280
1946
+ #: admin/core/core.php:283 admin/core/core.php:291 admin/core/core.php:294
1947
+ #: admin/core/core.php:297 admin/core/core.php:300
1948
  msgid "RBM Status: "
1949
  msgstr ""
1950
 
1951
+ #: admin/core/core.php:274 admin/core/core.php:291 admin/core/core.php:401
1952
+ #: admin/core/core.php:415 admin/core/core.php:616 admin/core/core.php:630
1953
+ #: admin/core/core.php:704 admin/core/core.php:718
1954
  msgid "Disabled"
1955
  msgstr ""
1956
 
1957
+ #: admin/core/core.php:277 admin/core/core.php:294
1958
  msgid "Root htaccess File Does Not Exist"
1959
  msgstr ""
1960
 
1961
+ #: admin/core/core.php:280 admin/core/core.php:297 admin/core/core.php:407
1962
+ #: admin/core/core.php:421 admin/core/core.php:622 admin/core/core.php:636
1963
+ #: admin/core/core.php:710 admin/core/core.php:724
1964
  #: admin/system-info/system-info.php:238 admin/system-info/system-info.php:279
1965
  msgid "Activated"
1966
  msgstr ""
1967
 
1968
+ #: admin/core/core.php:283 admin/core/core.php:300 admin/core/core.php:404
1969
+ #: admin/core/core.php:418 admin/core/core.php:619 admin/core/core.php:633
1970
+ #: admin/core/core.php:707 admin/core/core.php:721
1971
  #: admin/system-info/system-info.php:247 admin/system-info/system-info.php:281
1972
  msgid "Deactivated"
1973
  msgstr ""
1974
 
1975
+ #: admin/core/core.php:317 admin/core/core.php:335
1976
  msgid "Click OK to Activate Root Folder BulletProof Mode or click Cancel."
1977
  msgstr ""
1978
 
1979
+ #: admin/core/core.php:325 admin/core/core.php:343
1980
  msgid "Click OK to Deactivate Root Folder BulletProof Mode or click Cancel."
1981
  msgstr ""
1982
 
1983
+ #: admin/core/core.php:351
1984
  msgid "wp-admin Folder BulletProof Mode (WBM)"
1985
  msgstr ""
1986
 
1987
+ #: admin/core/core.php:401 admin/core/core.php:404 admin/core/core.php:407
1988
+ #: admin/core/core.php:415 admin/core/core.php:418 admin/core/core.php:421
1989
  msgid "WBM Status: "
1990
  msgstr ""
1991
 
1992
+ #: admin/core/core.php:436
1993
  msgid "Click OK to Activate wp-admin Folder BulletProof Mode or click Cancel."
1994
  msgstr ""
1995
 
1996
+ #: admin/core/core.php:444
1997
  msgid ""
1998
  "Click OK to Deactivate wp-admin Folder BulletProof Mode or click Cancel."
1999
  msgstr ""
2000
 
2001
+ #: admin/core/core.php:452 admin/core/core.php:454
2002
  msgid "Hidden Plugin Folders|Files Cron (HPF)"
2003
  msgstr ""
2004
 
2005
+ #: admin/core/core.php:487 admin/core/core.php:490 admin/core/core.php:498
2006
+ #: admin/core/core.php:501
2007
  msgid "HPF Status: "
2008
  msgstr ""
2009
 
2010
+ #: admin/core/core.php:487 admin/core/core.php:498 admin/core/core.php:535
2011
  msgid "HPF Cron On"
2012
  msgstr ""
2013
 
2014
+ #: admin/core/core.php:490 admin/core/core.php:501 admin/core/core.php:536
2015
  msgid "HPF Cron Off"
2016
  msgstr ""
2017
 
2018
+ #: admin/core/core.php:524
2019
  msgid "Run Check Every 1 Minute"
2020
  msgstr ""
2021
 
2022
+ #: admin/core/core.php:525
2023
  msgid "Run Check Every 5 Minutes"
2024
  msgstr ""
2025
 
2026
+ #: admin/core/core.php:526
2027
  msgid "Run Check Every 10 Minutes"
2028
  msgstr ""
2029
 
2030
+ #: admin/core/core.php:527
2031
  msgid "Run Check Every 15 Minutes"
2032
  msgstr ""
2033
 
2034
+ #: admin/core/core.php:528
2035
  msgid "Run Check Every 30 Minutes"
2036
  msgstr ""
2037
 
2038
+ #: admin/core/core.php:529
2039
  msgid "Run Check Every 60 Minutes"
2040
  msgstr ""
2041
 
2042
+ #: admin/core/core.php:530
2043
  msgid "Run Check Once Daily"
2044
  msgstr ""
2045
 
2046
+ #: admin/core/core.php:539
2047
  msgid "Save HPF Cron Options"
2048
  msgstr ""
2049
 
2050
+ #: admin/core/core.php:539
2051
  msgid ""
2052
  "The default Cron Frequency is: Run Check Every 15 Minutes. This is a "
2053
  "lightweight check that uses an insignificant amount of resources/memory so 4 "
2059
  "OK to proceed or click Cancel"
2060
  msgstr ""
2061
 
2062
+ #: admin/core/core.php:556
2063
  msgid "Add Ignore rules using plugin folder names or file names."
2064
  msgstr ""
2065
 
2066
+ #: admin/core/core.php:556
2067
  msgid "Use a comma and a space between folder and/or file names."
2068
  msgstr ""
2069
 
2070
+ #: admin/core/core.php:556
2071
  msgid "Example: plugin-folder-name, example-file-name.php"
2072
  msgstr ""
2073
 
2074
+ #: admin/core/core.php:562
2075
  msgid ""
2076
  "This option is for adding ignore rules for Hidden or Empty Plugin Folders "
2077
  "Detected by BPS or Non-standard WP files detected by BPS in your /plugins/ "
2078
  "folder."
2079
  msgstr ""
2080
 
2081
+ #: admin/core/core.php:562
2082
  msgid ""
2083
  "This is an independent option setting that does not require clicking any "
2084
  "other buttons."
2085
  msgstr ""
2086
 
2087
+ #: admin/core/core.php:562 admin/maintenance/maintenance.php:696
2088
  #: admin/security-log/security-log.php:448
2089
  #: admin/security-log/security-log.php:463
2090
  #: admin/security-log/security-log.php:681
2092
  msgid "Click OK to proceed or click Cancel."
2093
  msgstr ""
2094
 
2095
+ #: admin/core/core.php:580
2096
  msgid "Master htaccess Folder BulletProof Mode (MBM)"
2097
  msgstr ""
2098
 
2099
+ #: admin/core/core.php:582
2100
  msgid "MBM BulletProof Modes"
2101
  msgstr ""
2102
 
2103
+ #: admin/core/core.php:616 admin/core/core.php:619 admin/core/core.php:622
2104
+ #: admin/core/core.php:630 admin/core/core.php:633 admin/core/core.php:636
2105
  msgid "MBM Status: "
2106
  msgstr ""
2107
 
2108
+ #: admin/core/core.php:651
2109
  msgid "Click OK to Activate MBM BulletProof Mode or click Cancel."
2110
  msgstr ""
2111
 
2112
+ #: admin/core/core.php:659
2113
  msgid "Click OK to Deactivate MBM BulletProof Mode or click Cancel."
2114
  msgstr ""
2115
 
2116
+ #: admin/core/core.php:668
2117
  msgid "BPS Backup Folder BulletProof Mode (BBM)"
2118
  msgstr ""
2119
 
2120
+ #: admin/core/core.php:670
2121
  msgid "BBM BulletProof Modes"
2122
  msgstr ""
2123
 
2124
+ #: admin/core/core.php:704 admin/core/core.php:707 admin/core/core.php:710
2125
+ #: admin/core/core.php:718 admin/core/core.php:721 admin/core/core.php:724
2126
  msgid "BBM Status: "
2127
  msgstr ""
2128
 
2129
+ #: admin/core/core.php:739
2130
  msgid "Click OK to Activate BBM BulletProof Mode or click Cancel."
2131
  msgstr ""
2132
 
2133
+ #: admin/core/core.php:747
2134
  msgid ""
2135
  "Caution: BPS Backup Folder BulletProof Mode (BBM) should only be deactivated "
2136
  "for testing or troubleshooting. Be sure to activate BBM BulletProof Mode "
2137
  "after you are done testing or troubleshooting."
2138
  msgstr ""
2139
 
2140
+ #: admin/core/core.php:747
2141
  msgid "Click OK to Deactivate BBM BulletProof Mode or click Cancel."
2142
  msgstr ""
2143
 
2144
+ #: admin/core/core.php:756 admin/core/core.php:758
2145
  msgid "Backup & Restore BPS htaccess Files"
2146
  msgstr ""
2147
 
2148
+ #: admin/core/core.php:774
2149
  msgid "Click OK to Backup BPS htaccess files or click Cancel."
2150
  msgstr ""
2151
 
2152
+ #: admin/core/core.php:782
2153
  msgid "Click OK to Restore BPS htaccess files or click Cancel."
2154
  msgstr ""
2155
 
2156
+ #: admin/core/core.php:801
2157
  msgid "htaccess File Editor ~ "
2158
  msgstr ""
2159
 
2160
+ #: admin/core/core.php:801
2161
  msgid ""
2162
  "Check or edit BPS htaccess files/code manually/directly for testing. Use BPS "
2163
  "Custom Code to save htaccess code permanently"
2164
  msgstr ""
2165
 
2166
+ #: admin/core/core.php:807 admin/core/core.php:809
2167
  msgid "htaccess File Editing"
2168
  msgstr ""
2169
 
2170
+ #: admin/core/core.php:840
2171
  msgid "htaccess Files Disabled: secure.htaccess Master file is disabled."
2172
  msgstr ""
2173
 
2174
+ #: admin/core/core.php:844
2175
  msgid "ERROR: A secure.htaccess Master file was NOT found."
2176
  msgstr ""
2177
 
2178
+ #: admin/core/core.php:853
2179
  msgid ""
2180
  "File Open and Write test successful! The secure.htaccess Master file is "
2181
  "writable."
2182
  msgstr ""
2183
 
2184
+ #: admin/core/core.php:858 admin/core/core.php:948 admin/core/core.php:1061
2185
+ #: admin/core/core.php:1250 admin/security-log/security-log.php:744
2186
  msgid "Cannot write to file: "
2187
  msgstr ""
2188
 
2189
+ #: admin/core/core.php:873
2190
  msgid ""
2191
  "htaccess Files Disabled: secure.htaccess Master file writing is disabled. "
2192
  msgstr ""
2193
 
2194
+ #: admin/core/core.php:893
2195
  msgid "Error: Unable to write to the secure.htaccess Master file."
2196
  msgstr ""
2197
 
2198
+ #: admin/core/core.php:908
2199
  msgid "The secure.htaccess Master file has been updated."
2200
  msgstr ""
2201
 
2202
+ #: admin/core/core.php:930
2203
  msgid "htaccess Files Disabled: default.htaccess Master file is disabled."
2204
  msgstr ""
2205
 
2206
+ #: admin/core/core.php:934
2207
  msgid "ERROR: A default.htaccess Master file was NOT found."
2208
  msgstr ""
2209
 
2210
+ #: admin/core/core.php:943
2211
  msgid ""
2212
  "File Open and Write test successful! The default.htaccess Master file is "
2213
  "writable."
2214
  msgstr ""
2215
 
2216
+ #: admin/core/core.php:963
2217
  msgid ""
2218
  "htaccess Files Disabled: default.htaccess Master file writing is disabled. "
2219
  msgstr ""
2220
 
2221
+ #: admin/core/core.php:983
2222
  msgid "Error: Unable to write to the default.htaccess Master file."
2223
  msgstr ""
2224
 
2225
+ #: admin/core/core.php:998
2226
  msgid "The default.htaccess Master file has been updated."
2227
  msgstr ""
2228
 
2229
+ #: admin/core/core.php:1010
2230
  msgid ""
2231
  " Check that the /bps-backup/ and /master-backups/ folders exist and the "
2232
  "folder permissions or Ownership for these folders."
2233
  msgstr ""
2234
 
2235
+ #: admin/core/core.php:1015
2236
  msgid ""
2237
  "Your Custom default.htaccess Master file has been successfully saved to: "
2238
  msgstr ""
2239
 
2240
+ #: admin/core/core.php:1037
2241
  msgid "wpadmin-secure.htaccess file writing is disabled."
2242
  msgstr ""
2243
 
2244
+ #: admin/core/core.php:1043
2245
  msgid ""
2246
  "htaccess Files Disabled: wpadmin-secure.htaccess Master file is disabled."
2247
  msgstr ""
2248
 
2249
+ #: admin/core/core.php:1047
2250
  msgid "ERROR: A wpadmin-secure.htaccess Master file was NOT found."
2251
  msgstr ""
2252
 
2253
+ #: admin/core/core.php:1056
2254
  msgid ""
2255
  "File Open and Write test successful! The wpadmin-secure.htaccess Master file "
2256
  "is writable."
2257
  msgstr ""
2258
 
2259
+ #: admin/core/core.php:1077
2260
  msgid ""
2261
  "htaccess Files Disabled: wpadmin-secure.htaccess Master file writing is "
2262
  "disabled. "
2263
  msgstr ""
2264
 
2265
+ #: admin/core/core.php:1097
2266
  msgid "Error: Unable to write to the wpadmin-secure.htaccess Master file."
2267
  msgstr ""
2268
 
2269
+ #: admin/core/core.php:1112
2270
  msgid "The wpadmin-secure.htaccess Master file has been updated."
2271
  msgstr ""
2272
 
2273
+ #: admin/core/core.php:1134
2274
  msgid "htaccess Files Disabled: Root htaccess file does not exist."
2275
  msgstr ""
2276
 
2277
+ #: admin/core/core.php:1138
2278
  msgid "ERROR: An htaccess file was NOT found in your root folder"
2279
  msgstr ""
2280
 
2281
+ #: admin/core/core.php:1147
2282
  msgid ""
2283
  "File Open and Write test successful! Your currently active root htaccess "
2284
  "file is writable."
2285
  msgstr ""
2286
 
2287
+ #: admin/core/core.php:1152
2288
  msgid "Your root htaccess file is Locked with Read Only Permissions."
2289
  msgstr ""
2290
 
2291
+ #: admin/core/core.php:1152
2292
  msgid ""
2293
  "Use the Lock and Unlock buttons below to Lock or Unlock your root htaccess "
2294
  "file for editing."
2295
  msgstr ""
2296
 
2297
+ #: admin/core/core.php:1187
2298
  msgid ""
2299
  "Error: Unable to write to the Root htaccess file. If your Root htaccess file "
2300
  "is locked you must unlock first."
2301
  msgstr ""
2302
 
2303
+ #: admin/core/core.php:1202
2304
  msgid "Your currently active root htaccess file has been updated."
2305
  msgstr ""
2306
 
2307
+ #: admin/core/core.php:1226
2308
  msgid "wp-admin active htaccess file writing is disabled."
2309
  msgstr ""
2310
 
2311
+ #: admin/core/core.php:1232
2312
  msgid "htaccess Files Disabled: wp-admin folder htaccess file does not exist."
2313
  msgstr ""
2314
 
2315
+ #: admin/core/core.php:1236
2316
  msgid "ERROR: An htaccess file was NOT found in your wp-admin folder"
2317
  msgstr ""
2318
 
2319
+ #: admin/core/core.php:1245
2320
  msgid ""
2321
  "File Open and Write test successful! Your currently active wp-admin htaccess "
2322
  "file is writable."
2323
  msgstr ""
2324
 
2325
+ #: admin/core/core.php:1286
2326
  msgid "Error: Unable to write to the wp-admin htaccess file."
2327
  msgstr ""
2328
 
2329
+ #: admin/core/core.php:1301
2330
  msgid "Your currently active wp-admin htaccess file has been updated."
2331
  msgstr ""
2332
 
2333
+ #: admin/core/core.php:1318
2334
  msgid "Your Root htaccess file has been Locked."
2335
  msgstr ""
2336
 
2337
+ #: admin/core/core.php:1323
2338
  msgid "Unable to Lock your Root htaccess file."
2339
  msgstr ""
2340
 
2341
+ #: admin/core/core.php:1337
2342
  msgid "Your Root htaccess file has been Unlocked."
2343
  msgstr ""
2344
 
2345
+ #: admin/core/core.php:1342
2346
  msgid "Unable to Unlock your Root htaccess file."
2347
  msgstr ""
2348
 
2349
+ #: admin/core/core.php:1365
2350
  msgid "Click OK to Lock your Root htaccess file or click Cancel."
2351
  msgstr ""
2352
 
2353
+ #: admin/core/core.php:1365
2354
  msgid ""
2355
  "Note: The File Open and Write Test window will still display the last status "
2356
  "of the file as Unlocked. To see the current status refresh your browser."
2357
  msgstr ""
2358
 
2359
+ #: admin/core/core.php:1373
2360
  msgid "Click OK to Unlock your Root htaccess file or click Cancel."
2361
  msgstr ""
2362
 
2363
+ #: admin/core/core.php:1373
2364
  msgid ""
2365
  "Note: The File Open and Write Test window will still display the last status "
2366
  "of the file as Locked. To see the current status refresh your browser."
2367
  msgstr ""
2368
 
2369
+ #: admin/core/core.php:1382
2370
  msgid ""
2371
  "Turning AutoLock On will allow BPS Pro to automatically lock your Root ."
2372
  "htaccess file. For some folks this causes a problem because their Web Hosts "
2374
  "BPS Pro to AutoLock the Root .htaccess file works fine."
2375
  msgstr ""
2376
 
2377
+ #: admin/core/core.php:1382
2378
  msgid "Click OK to Turn AutoLock On or click Cancel."
2379
  msgstr ""
2380
 
2381
+ #: admin/core/core.php:1384 admin/system-info/system-info.php:776
2382
  #: admin/system-info/system-info.php:792 admin/system-info/system-info.php:800
2383
  #: admin/system-info/system-info.php:808 admin/system-info/system-info.php:816
2384
  #: admin/system-info/system-info.php:824 admin/system-info/system-info.php:832
2390
  msgid "On"
2391
  msgstr ""
2392
 
2393
+ #: admin/core/core.php:1394
2394
  msgid ""
2395
  "Turning AutoLock Off will prevent BPS Pro from automatically locking your "
2396
  "Root .htaccess file. For some folks this is necessary because their Web "
2398
  "allowing BPS Pro to AutoLock the Root .htaccess file works fine."
2399
  msgstr ""
2400
 
2401
+ #: admin/core/core.php:1394
2402
  msgid "Click OK to Turn AutoLock Off or click Cancel."
2403
  msgstr ""
2404
 
2405
+ #: admin/core/core.php:1396 admin/system-info/system-info.php:552
2406
  #: admin/system-info/system-info.php:795 admin/system-info/system-info.php:803
2407
  #: admin/system-info/system-info.php:811 admin/system-info/system-info.php:819
2408
  #: admin/system-info/system-info.php:827 admin/system-info/system-info.php:835
2414
  msgid "Off"
2415
  msgstr ""
2416
 
2417
+ #: admin/core/core.php:1411
2418
  msgid "secure.htaccess"
2419
  msgstr ""
2420
 
2421
+ #: admin/core/core.php:1412
2422
  msgid "default.htaccess"
2423
  msgstr ""
2424
 
2425
+ #: admin/core/core.php:1413
2426
  msgid "wpadmin-secure.htaccess"
2427
  msgstr ""
2428
 
2429
+ #: admin/core/core.php:1414
2430
  msgid "Your Current Root htaccess File"
2431
  msgstr ""
2432
 
2433
+ #: admin/core/core.php:1415
2434
  msgid "Your Current wp-admin htaccess File"
2435
  msgstr ""
2436
 
2437
+ #: admin/core/core.php:1438 admin/core/core.php:1510 admin/core/core.php:1582
2438
+ #: admin/core/core.php:1685 admin/core/core.php:1759
2439
  msgid ""
2440
  "If you see an error or are unable to save your editing changes then click "
2441
  "the Encrypt htaccess Code button first and then click the Update File "
2442
  "button. Mouse over the question mark image to the right for help info."
2443
  msgstr ""
2444
 
2445
+ #: admin/core/core.php:1438 admin/core/core.php:1510 admin/core/core.php:1582
2446
+ #: admin/core/core.php:1685 admin/core/core.php:1759
2447
  msgid ""
2448
  "If your web host currently has ModSecurity installed or installs ModSecurity "
2449
  "at a later time then ModSecurity will prevent you from saving your htaccess "
2451
  "button."
2452
  msgstr ""
2453
 
2454
+ #: admin/core/core.php:1438 admin/core/core.php:1510 admin/core/core.php:1582
2455
+ #: admin/core/core.php:1685 admin/core/core.php:1759
2456
  msgid ""
2457
  "If you click the Encrypt htaccess Code button and then want to edit your "
2458
  "code again click the Decrypt htaccess Code button. After you are done "
2460
  "File button."
2461
  msgstr ""
2462
 
2463
+ #: admin/core/core.php:1438 admin/core/core.php:1510 admin/core/core.php:1582
2464
+ #: admin/core/core.php:1685 admin/core/core.php:1759
2465
  msgid "Click the htaccess File Editing Read Me help button for more help info."
2466
  msgstr ""
2467
 
2468
+ #: admin/core/core.php:1681
2469
  msgid "YOUR ROOT HTACCESS FILE IS LOCKED."
2470
  msgstr ""
2471
 
2472
+ #: admin/core/core.php:1681
2473
  msgid "YOUR FILE EDITS|CHANGES CANNOT BE SAVED."
2474
  msgstr ""
2475
 
2476
+ #: admin/core/core.php:1681
2477
  msgid ""
2478
  "Click Cancel, copy the file editing changes you made to save them and then "
2479
  "click the Unlock .htaccess File button to unlock your Root .htaccess file. "
2482
  "to save your file edits/changes."
2483
  msgstr ""
2484
 
2485
+ #: admin/core/core.php:1836
2486
  msgid "htaccess File Custom Code ~ "
2487
  msgstr ""
2488
 
2489
+ #: admin/core/core.php:1836
2490
  msgid ""
2491
  "Save custom htaccess code for your Root and wp-admin htaccess Files "
2492
  "permanently"
2493
  msgstr ""
2494
 
2495
+ #: admin/core/core.php:1848
2496
  msgid "Reset|Recheck Dismiss Notices: "
2497
  msgstr ""
2498
 
2499
+ #: admin/core/core.php:1863
2500
  msgid "Brute Force Login Page Protection code"
2501
  msgstr ""
2502
 
2503
+ #: admin/core/core.php:1871 admin/core/core.php:2119
2504
+ #: admin/wizard/wizard.php:1128
2505
  msgid "Custom Code Video Tutorial"
2506
  msgstr ""
2507
 
2508
+ #: admin/core/core.php:1872
2509
  msgid "BulletProof Security Forum"
2510
  msgstr ""
2511
 
2512
+ #: admin/core/core.php:1889
2513
  msgid ""
2514
  "Clicking OK will Import all of your Root and wp-admin Custom Code from the "
2515
  "cc-master.zip file on your computer."
2516
  msgstr ""
2517
 
2518
+ #: admin/core/core.php:1889
2519
  msgid "Click OK to Import Custom Code or click Cancel."
2520
  msgstr ""
2521
 
2522
+ #: admin/core/core.php:1898
2523
  msgid ""
2524
  "Clicking OK will Export (copy) all of your Root and wp-admin Custom Code "
2525
  "into the cc-master.zip file, which you can then download to your computer by "
2527
  "success message."
2528
  msgstr ""
2529
 
2530
+ #: admin/core/core.php:1898
2531
  msgid "Click OK to Export Custom Code or click Cancel."
2532
  msgstr ""
2533
 
2534
+ #: admin/core/core.php:1906
2535
  msgid ""
2536
  "Clicking OK will delete all of your Root and wp-admin Custom Code from all "
2537
  "of the Custom Code text boxes."
2538
  msgstr ""
2539
 
2540
+ #: admin/core/core.php:1906
2541
  msgid "Click OK to Delete Custom Code or click Cancel."
2542
  msgstr ""
2543
 
2544
+ #: admin/core/core.php:1957
2545
  msgid ""
2546
  "Your My Notes Personal Notes and/or htaccess Code Notes saved successfully "
2547
  "to your WordPress Database."
2548
  msgstr ""
2549
 
2550
+ #: admin/core/core.php:1970
2551
  msgid "My Notes ~ "
2552
  msgstr ""
2553
 
2554
+ #: admin/core/core.php:1970
2555
  msgid "Save Personal Notes and htaccess Code Notes to your WordPress Database"
2556
  msgstr ""
2557
 
2558
+ #: admin/core/core.php:1991
2559
  msgid ""
2560
  "If you are unable to save custom htaccess code and/or see an error message "
2561
  "when trying to save custom htaccess code, "
2562
  msgstr ""
2563
 
2564
+ #: admin/core/core.php:1991
2565
  msgid ""
2566
  "click the Encrypt My Notes button first and then click the Save My Notes "
2567
  "button."
2568
  msgstr ""
2569
 
2570
+ #: admin/core/core.php:1991
2571
  msgid "Mouse over the question mark image to the right for help info."
2572
  msgstr ""
2573
 
2574
+ #: admin/core/core.php:1991
2575
  msgid ""
2576
  "If your web host currently has ModSecurity installed or installs ModSecurity "
2577
  "at a later time then ModSecurity will prevent you from saving your custom "
2579
  "button."
2580
  msgstr ""
2581
 
2582
+ #: admin/core/core.php:1991
2583
  msgid ""
2584
  "If you click the Encrypt My Notes button, but then want to add or edit "
2585
  "additional custom code click the Decrypt My Notes button. After you are done "
2587
  "clicking the Save My Notes button."
2588
  msgstr ""
2589
 
2590
+ #: admin/core/core.php:2063
2591
  #: admin/db-backup-security/db-backup-security.php:1743
2592
+ #: admin/mscan/mscan.php:3497 admin/theme-skin/theme-skin.php:255
2593
  msgid "Whats New in "
2594
  msgstr ""
2595
 
2596
+ #: admin/core/core.php:2063
2597
  msgid " and General Help Info & Tips"
2598
  msgstr ""
2599
 
2600
+ #: admin/core/core.php:2068
2601
  msgid "The BPS Changelog|Whats New page has been moved to the "
2602
  msgstr ""
2603
 
2604
+ #: admin/core/core.php:2068
2605
  msgid "Reasons for this Changelog|Whats New page change: "
2606
  msgstr ""
2607
 
2608
+ #: admin/core/core.php:2068
2609
  msgid ""
2610
  "The BPS Changelog|Whats New page will not have to be translated by the "
2611
  "WordPress PolyGlots Language Packs Team for each new version release of BPS, "
2614
  "BPS version changes through the years and other beneficial reasons."
2615
  msgstr ""
2616
 
2617
+ #: admin/core/core.php:2076 admin/db-backup-security/db-backup-security.php:292
2618
  #: admin/db-backup-security/db-backup-security.php:1242
2619
  #: admin/db-backup-security/db-backup-security.php:1398
2620
  #: admin/email-log-settings/email-log-settings.php:78
2621
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2622
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2623
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
2624
  msgid ""
2625
  "Protect all of your website files with AutoRestore|Quarantine Intrusion "
2626
  "Detection & Prevention System: "
2627
  msgstr ""
2628
 
2629
+ #: admin/core/core.php:2076 admin/db-backup-security/db-backup-security.php:292
2630
  #: admin/db-backup-security/db-backup-security.php:1242
2631
  #: admin/db-backup-security/db-backup-security.php:1398
2632
  #: admin/email-log-settings/email-log-settings.php:78
2633
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2634
+ #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2635
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
 
2636
  msgid "Get BPS Pro ARQ IDPS"
2637
  msgstr ""
2638
 
2639
+ #: admin/core/core.php:2076 admin/email-log-settings/email-log-settings.php:78
2640
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2641
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2642
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
2643
  msgid ""
2644
  "Protect against SpamBot & HackerBot (auto-registering, auto-logins, auto-"
2645
  "posting, auto-commenting): "
2646
  msgstr ""
2647
 
2648
+ #: admin/core/core.php:2076 admin/email-log-settings/email-log-settings.php:78
2649
  #: admin/login/login.php:204 admin/login/login.php:831
2650
  #: admin/maintenance/maintenance.php:191 admin/maintenance/maintenance.php:193
2651
  #: admin/security-log/security-log.php:218 admin/theme-skin/theme-skin.php:84
2652
+ #: admin/wizard/wizard.php:1107 admin/wizard/wizard.php:1176
2653
  msgid "Get BPS Pro JTC Anti-Spam|Anti-Hacker"
2654
  msgstr ""
2655
 
2656
+ #: admin/core/core.php:2081
2657
  msgid "General Help Info & Tips:"
2658
  msgstr ""
2659
 
2660
+ #: admin/core/core.php:2085
2661
  msgid "If BPS plugin pages are not displaying visually correct you can "
2662
  msgstr ""
2663
 
2664
+ #: admin/core/core.php:2089
2665
  msgid "BPS Video Tutorials|Setup Wizard: "
2666
  msgstr ""
2667
 
2668
+ #: admin/core/core.php:2097
2669
  msgid "Troubleshooting Steps & The BPS Security Log: "
2670
  msgstr ""
2671
 
2672
+ #: admin/core/core.php:2097
2673
  msgid ""
2674
  "All BPS plugin features can be turned Off/On individually to confirm, "
2675
  "eliminate or isolate a problem or issue that may or may not be caused by BPS."
2676
  msgstr ""
2677
 
2678
+ #: admin/core/core.php:2097
2679
  msgid ""
2680
  "The BPS Security Log is a primary troubleshooting tool. If BPS is blocking "
2681
  "something legitimate in another plugin or theme then a Security Log entry "
2684
  "being blocked."
2685
  msgstr ""
2686
 
2687
+ #: admin/core/core.php:2097
2688
  msgid ""
2689
  "Search the Forum site to see if a known issue or problem is already posted "
2690
  "with a solution/whitelist rule in the Forum."
2691
  msgstr ""
2692
 
2693
+ #: admin/core/core.php:2110 admin/maintenance/maintenance.php:2133
2694
  msgid "Help & FAQ"
2695
  msgstr ""
2696
 
2697
+ #: admin/core/core.php:2114 admin/email-log-settings/email-log-settings.php:215
2698
  #: admin/login/login.php:1829 admin/maintenance/maintenance.php:2138
2699
  #: admin/security-log/security-log.php:811
2700
  #: admin/system-info/system-info.php:1134
2701
  msgid "Contributors Page"
2702
  msgstr ""
2703
 
2704
+ #: admin/core/core.php:2115
2705
  msgid "WP Permalinks - Custom Permalink Structure Help Info"
2706
  msgstr ""
2707
 
2708
+ #: admin/core/core.php:2116 admin/email-log-settings/email-log-settings.php:214
2709
  #: admin/login/login.php:1828 admin/maintenance/maintenance.php:2139
2710
  #: admin/security-log/security-log.php:810
2711
  #: admin/system-info/system-info.php:1133
2712
  msgid "Security Log Event Codes"
2713
  msgstr ""
2714
 
2715
+ #: admin/core/core.php:2117
2716
  msgid "Adding a Custom 403 Forbidden Page For Your Website"
2717
  msgstr ""
2718
 
2719
+ #: admin/core/core.php:2118
2720
  #: admin/db-backup-security/db-backup-security.php:1747
2721
  #: admin/email-log-settings/email-log-settings.php:216
2722
  #: admin/login/login.php:1830 admin/maintenance/maintenance.php:2140
2723
+ #: admin/mscan/mscan.php:3500 admin/security-log/security-log.php:812
2724
  #: admin/system-info/system-info.php:1135 admin/theme-skin/theme-skin.php:258
2725
  msgid "Forum: Search, Troubleshooting Steps & Post Questions For Assistance"
2726
  msgstr ""
2727
 
2728
+ #: admin/core/core.php:2131
2729
  msgid "BulletProof Security Pro Feature Highlights"
2730
  msgstr ""
2731
 
2732
+ #: admin/core/core.php:2141
2733
  msgid "The Ultimate Security Protection"
2734
  msgstr ""
2735
 
2736
+ #: admin/core/core.php:2144
2737
  msgid "BPS Pro One-Click Setup Wizard & Demo Video Tutorial"
2738
  msgstr ""
2739
 
2740
+ #: admin/core/core.php:2145
2741
  msgid "View All BPS Pro Features"
2742
  msgstr ""
2743
 
2744
+ #: admin/core/core.php:2152
2745
  msgid ""
2746
  "The Complete Website Security Solution for Hacker and Spammer Protection"
2747
  msgstr ""
2748
 
2749
+ #: admin/core/core.php:2152
2750
  msgid ""
2751
  "BulletProof Security Pro has an amazing track record. BPS Pro has been "
2752
  "publicly available for 9+ years and is installed on over 50,000 websites "
2754
  "hacked."
2755
  msgstr ""
2756
 
2757
+ #: admin/core/core.php:2152
2758
  msgid ""
2759
  "Why pay 10 times or more for other premium WordPress Security Plugins with "
2760
  "recurring yearly subscriptions when you can get the best WordPress Security "
2761
  "Plugin for an extremely low one-time purchase price?"
2762
  msgstr ""
2763
 
2764
+ #: admin/core/core.php:2152
2765
  msgid "View Cost Comparison"
2766
  msgstr ""
2767
 
2768
+ #: admin/core/core.php:2152
2769
  msgid ""
2770
  "30-Day Money-Back Guarantee: If you are dissatisfied with BulletProof "
2771
  "Security Pro for any reason. We offer a no questions asked full refund."
2772
  msgstr ""
2773
 
2774
+ #: admin/core/core.php:2155
2775
  msgid "One-Click Setup Wizard Installation: "
2776
  msgstr ""
2777
 
2778
+ #: admin/core/core.php:2155
2779
  msgid ""
2780
  "Fast, simple and complete BPS Pro installation and setup in less than 1 "
2781
  "minute."
2782
  msgstr ""
2783
 
2784
+ #: admin/core/core.php:2157
2785
  msgid "One-Click Upgrade: "
2786
  msgstr ""
2787
 
2788
+ #: admin/core/core.php:2157
2789
  msgid "One-click plugin upgrade on the WordPress Plugins page."
2790
  msgstr ""
2791
 
2792
+ #: admin/core/core.php:2159
2793
  msgid ""
2794
  "AutoRestore|Quarantine Intrusion Detection and Prevention System (ARQ IDPS): "
2795
  msgstr ""
2796
 
2797
+ #: admin/core/core.php:2159
2798
  msgid ""
2799
  "ARQ IDPS is a real-time file scanner that automatically quarantines "
2800
  "malicious hacker files and autorestores legitimate website files if they "
2808
  "Plugin and Theme Automatic, Manual and Shiny installations and updates."
2809
  msgstr ""
2810
 
2811
+ #: admin/core/core.php:2161
2812
  msgid "MScan Malware Scanner: "
2813
  msgstr ""
2814
 
2815
+ #: admin/core/core.php:2161
2816
  msgid ""
2817
  "MScan Scheduled Scans are available in BPS Pro only. The BPS Pro ARQ IDPS "
2818
  "scanner is far superior to malware scanners including MScan, but both the "
2820
  "website if someone would like to do that."
2821
  msgstr ""
2822
 
2823
+ #: admin/core/core.php:2163
2824
  msgid "Plugin Firewall|Plugin Firewall AutoPilot Mode: "
2825
  msgstr ""
2826
 
2827
+ #: admin/core/core.php:2163
2828
  msgid ""
2829
  "The Plugin Firewall protects all of your Plugins (plugin folders and files) "
2830
  "with an IP Address Firewall, which prevents/blocks/forbids Remote Access to "
2838
  "firewall whitelist rules."
2839
  msgstr ""
2840
 
2841
+ #: admin/core/core.php:2165
2842
  msgid "JTC Anti-Spam|Anti-Hacker (JTC): "
2843
  msgstr ""
2844
 
2845
+ #: admin/core/core.php:2165
2846
  #, php-format
2847
  msgid ""
2848
  "Blocks 100% of all SpamBot and HackerBot Brute Force Login attacks (auto-"
2856
  "includes a SpamBot Trap."
2857
  msgstr ""
2858
 
2859
+ #: admin/core/core.php:2167
2860
  msgid "Uploads Folder Anti-Exploit Guard (UAEG): "
2861
  msgstr ""
2862
 
2863
+ #: admin/core/core.php:2167
2864
  msgid ""
2865
  "Protects the WordPress Uploads folder. ONLY safe image files with valid "
2866
  "image file extensions such as jpg, gif, png, etc. can be accessed, opened or "
2870
  "executed in the WordPress Uploads folder."
2871
  msgstr ""
2872
 
2873
+ #: admin/core/core.php:2169
2874
  msgid "DB Monitor Intrusion Detection System (IDS): "
2875
  msgstr ""
2876
 
2877
+ #: admin/core/core.php:2169
2878
  msgid ""
2879
  "The DB Monitor is an automated Intrusion Detection System (IDS) that alerts "
2880
  "you via email anytime a change/modification occurs in your WordPress "
2885
  "help info."
2886
  msgstr ""
2887
 
2888
+ #: admin/core/core.php:2171
2889
  msgid "DB Diff Tool: "
2890
  msgstr ""
2891
 
2892
+ #: admin/core/core.php:2171
2893
  msgid ""
2894
  "The DB Diff Tool compares old database tables from DB backups to current "
2895
  "database tables and displays any differences in the data/content of those 2 "
2897
  "not only just DB data."
2898
  msgstr ""
2899
 
2900
+ #: admin/core/core.php:2173
2901
  msgid "DB Status & Info: "
2902
  msgstr ""
2903
 
2904
+ #: admin/core/core.php:2173
2905
  msgid ""
2906
  "General DB Info shows commonly checked DB status and info about your "
2907
  "WordPress database at a glance. Extensive DB Info shows extensive DB status "
2910
  "SHOW GLOBAL VARIABLES and SHOW SESSION VARIABLES."
2911
  msgstr ""
2912
 
2913
+ #: admin/core/core.php:2175
2914
  msgid "S-Monitor: "
2915
  msgstr ""
2916
 
2917
+ #: admin/core/core.php:2175
2918
  msgid ""
2919
  "S-Monitor is the centralized Security Monitoring and Alerting Core where you "
2920
  "can manage and choose BPS Pro settings for Dashboard Alerts, Dashboard "
2924
  "easy to change all/any BPS Pro settings to your particular preferences."
2925
  msgstr ""
2926
 
2927
+ #: admin/core/core.php:2177
2928
  msgid "Advanced Real-Time Alerting & Heads Up Dashboard Status Display: "
2929
  msgstr ""
2930
 
2931
+ #: admin/core/core.php:2177
2932
  msgid ""
2933
  "BPS Pro checks and displays error, warning, notifications and alert messages "
2934
  "in real time. You can choose how you want these messages displayed to you "
2936
  "Dashboard, BPS Pro pages only, Turned off, Email Alerts, Logging..."
2937
  msgstr ""
2938
 
2939
+ #: admin/core/core.php:2180
2940
  msgid "Custom php.ini|ini_set Options: "
2941
  msgstr ""
2942
 
2943
+ #: admin/core/core.php:2180
2944
  msgid ""
2945
  "Quickly create a custom php.ini file for your website or use ini_set Options "
2946
  "to increase security and performance with just a few clicks. Additional P-"
2948
  "Protected PHP Error Log, PHP Error Alerts, Secure phpinfo Viewer..."
2949
  msgstr ""
2950
 
2951
+ #: admin/core/core.php:2182
2952
  msgid "Pro Tools: 16 mini-plugins: "
2953
  msgstr ""
2954
 
2955
+ #: admin/core/core.php:2182
2956
  msgid ""
2957
  "Online Base64 Decoder, Offline Base64 Decode|Encode, Mcrypt ~ Decrypt|"
2958
  "Encrypt, Crypt Encryption, Scheduled Crons (display and reschedule/reset "
2971
  "vulnerable to an XML-RPC exploit)."
2972
  msgstr ""
2973
 
2974
+ #: admin/core/core.php:2190
2975
  msgid "BPS Pro Version Release Dates"
2976
  msgstr ""
2977
 
 
2978
  #: admin/core/core.php:2194 admin/core/core.php:2195 admin/core/core.php:2196
2979
+ #: admin/core/core.php:2197 admin/core/core.php:2198 admin/core/core.php:2199
2980
+ #: admin/core/core.php:2200 admin/core/core.php:2201 admin/core/core.php:2207
2981
+ #: admin/core/core.php:2208 admin/core/core.php:2209 admin/core/core.php:2210
2982
+ #: admin/core/core.php:2211 admin/core/core.php:2212 admin/core/core.php:2218
2983
+ #: admin/core/core.php:2219 admin/core/core.php:2220 admin/core/core.php:2221
2984
+ #: admin/core/core.php:2226 admin/core/core.php:2227 admin/core/core.php:2228
2985
+ #: admin/core/core.php:2229 admin/core/core.php:2230 admin/core/core.php:2235
2986
  #: admin/core/core.php:2236 admin/core/core.php:2237 admin/core/core.php:2238
2987
+ #: admin/core/core.php:2239 admin/core/core.php:2240 admin/core/core.php:2241
2988
+ #: admin/core/core.php:2242 admin/core/core.php:2243 admin/core/core.php:2248
2989
  #: admin/core/core.php:2249 admin/core/core.php:2250 admin/core/core.php:2251
2990
  #: admin/core/core.php:2252 admin/core/core.php:2253 admin/core/core.php:2254
2991
+ #: admin/core/core.php:2255 admin/core/core.php:2256 admin/core/core.php:2257
2992
+ #: admin/core/core.php:2258 admin/core/core.php:2259 admin/core/core.php:2260
2993
  #: admin/core/core.php:2266 admin/core/core.php:2267 admin/core/core.php:2268
2994
  #: admin/core/core.php:2269 admin/core/core.php:2270 admin/core/core.php:2271
2995
  #: admin/core/core.php:2272 admin/core/core.php:2273 admin/core/core.php:2274
2996
+ #: admin/core/core.php:2275 admin/core/core.php:2276 admin/core/core.php:2277
2997
+ #: admin/core/core.php:2278 admin/core/core.php:2279 admin/core/core.php:2285
2998
  #: admin/core/core.php:2286 admin/core/core.php:2287 admin/core/core.php:2288
2999
  #: admin/core/core.php:2289 admin/core/core.php:2290 admin/core/core.php:2291
3000
+ #: admin/core/core.php:2292 admin/core/core.php:2293 admin/core/core.php:2294
3001
+ #: admin/core/core.php:2295 admin/core/core.php:2296 admin/core/core.php:2297
3002
  #: admin/core/core.php:2303 admin/core/core.php:2304 admin/core/core.php:2305
3003
  #: admin/core/core.php:2306 admin/core/core.php:2307 admin/core/core.php:2308
3004
+ #: admin/core/core.php:2309 admin/core/core.php:2310 admin/core/core.php:2311
3005
+ #: admin/core/core.php:2312 admin/core/core.php:2318 admin/core/core.php:2319
3006
  #: admin/core/core.php:2320 admin/core/core.php:2321 admin/core/core.php:2322
3007
+ #: admin/core/core.php:2323 admin/core/core.php:2324 admin/core/core.php:2325
3008
+ #: admin/core/core.php:2326 admin/core/core.php:2327
3009
  #, php-format
3010
  msgid ""
3011
  "<a href=\"%2$s\" target=\"_blank\" title=\"Link Opens in New Browser Window"
3530
  msgstr ""
3531
 
3532
  #: admin/db-backup-security/db-backup-help-text.php:12
3533
+ #: admin/mscan/mscan-help-text.php:75 admin/security-log/security-log.php:238
3534
  msgid "Delete Log Button"
3535
  msgstr ""
3536
 
3662
  #: admin/db-backup-security/db-backup-security.php:281
3663
  #: admin/db-backup-security/db-backup-security.php:298
3664
  #: admin/db-backup-security/db-backup-security.php:300
3665
+ #: admin/includes/admin.php:419
3666
  msgid "DB Backup"
3667
  msgstr ""
3668
 
3748
  #: admin/db-backup-security/db-backup-security.php:896
3749
  #: admin/login/login.php:580 admin/login/login.php:609
3750
  #: admin/login/login.php:681 admin/login/login.php:710
3751
+ #: admin/mscan/mscan.php:1630 admin/mscan/mscan.php:3013
3752
  msgid "Delete"
3753
  msgstr ""
3754
 
3847
  msgstr ""
3848
 
3849
  #: admin/db-backup-security/db-backup-security.php:992
3850
+ #: admin/mscan/mscan.php:930
3851
  msgid "All"
3852
  msgstr ""
3853
 
4314
  msgstr ""
4315
 
4316
  #: admin/db-backup-security/db-backup-security.php:1267
4317
+ #: admin/mscan/mscan.php:2049
4318
  msgid ""
4319
  "Then click the Delete Log button to delete the contents of this Log file."
4320
  msgstr ""
4334
  msgstr ""
4335
 
4336
  #: admin/db-backup-security/db-backup-security.php:1304
4337
+ #: admin/mscan/mscan.php:2093 admin/security-log/security-log.php:492
4338
  msgid "Click OK to Delete the Log file contents or click Cancel."
4339
  msgstr ""
4340
 
4484
  msgstr ""
4485
 
4486
  #: admin/db-backup-security/db-backup-security.php:1744
4487
+ #: admin/mscan/mscan.php:3498 admin/theme-skin/theme-skin.php:256
4488
  msgid "BPS Pro Features & Version Release Dates"
4489
  msgstr ""
4490
 
4491
  #: admin/db-backup-security/db-backup-security.php:1745
4492
+ #: admin/mscan/mscan.php:3499 admin/theme-skin/theme-skin.php:257
4493
  msgid "Video Tutorials"
4494
  msgstr ""
4495
 
4515
 
4516
  #: admin/email-log-settings/email-log-settings.php:84
4517
  #: admin/email-log-settings/email-log-settings.php:86
4518
+ #: admin/includes/admin.php:430
4519
  msgid "Email|Log Settings"
4520
  msgstr ""
4521
 
4674
  msgid "WordPress Automatic Update Help Forum Topic"
4675
  msgstr ""
4676
 
4677
+ #: admin/includes/admin.php:392
4678
  msgid "BulletProof Security Settings"
4679
  msgstr ""
4680
 
4681
+ #: admin/includes/admin.php:392 admin/includes/admin.php:413
4682
  msgid "BPS Security"
4683
  msgstr ""
4684
 
4685
+ #: admin/includes/admin.php:393 admin/includes/admin.php:394
4686
  msgid "Login Security ~ JTC-Lite"
4687
  msgstr ""
4688
 
4689
+ #: admin/includes/admin.php:393 admin/includes/admin.php:416
4690
  msgid "Login Security"
4691
  msgstr ""
4692
 
4693
+ #: admin/includes/admin.php:394 admin/includes/admin.php:417
4694
  #: admin/login/login.php:180 admin/login/login.php:837
4695
  #: admin/login/login.php:839
4696
  msgid "JTC-Lite"
4697
  msgstr ""
4698
 
4699
+ #: admin/includes/admin.php:400 admin/includes/admin.php:426
4700
  #: admin/maintenance/maintenance.php:170 admin/maintenance/maintenance.php:202
4701
  #: admin/maintenance/maintenance.php:204
4702
  msgid "Maintenance Mode"
4703
  msgstr ""
4704
 
4705
+ #: admin/includes/admin.php:406 admin/includes/admin.php:429
4706
  #: admin/system-info/system-info.php:71
4707
  msgid "System Info"
4708
  msgstr ""
4709
 
4710
+ #: admin/includes/admin.php:409 admin/includes/admin.php:431
4711
  #: admin/theme-skin/theme-skin.php:74 admin/theme-skin/theme-skin.php:90
4712
  #: admin/theme-skin/theme-skin.php:92
4713
  msgid "UI|UX Settings"
4714
  msgstr ""
4715
 
4716
+ #: admin/includes/admin.php:414
4717
  msgid "htaccess Core"
4718
  msgstr ""
4719
 
4720
+ #: admin/includes/admin.php:415
4721
  msgid "MScan ~ Malware Scanner"
4722
  msgstr ""
4723
 
4724
+ #: admin/includes/admin.php:415
 
4725
  msgid "MScan"
4726
  msgstr ""
4727
 
4728
+ #: admin/includes/admin.php:416 admin/includes/admin.php:417
4729
+ #: admin/includes/admin.php:418
4730
  msgid "Login Security ~ JTC-Lite ~ ISL ~ ACE"
4731
  msgstr ""
4732
 
4733
+ #: admin/includes/admin.php:418
4734
  msgid "Idle Session Logout<br>Cookie Expiration"
4735
  msgstr ""
4736
 
4737
+ #: admin/includes/admin.php:419
4738
  msgid "DB Backup & Security"
4739
  msgstr ""
4740
 
4741
+ #: admin/includes/admin.php:420 admin/security-log/security-log.php:209
4742
  #: admin/security-log/security-log.php:224
4743
  #: admin/security-log/security-log.php:226
4744
  msgid "Security Log"
4745
  msgstr ""
4746
 
4747
+ #: admin/includes/admin.php:432 admin/wizard/wizard.php:1082
4748
+ #: admin/wizard/wizard.php:1113 admin/wizard/wizard.php:1115
4749
+ #: bulletproof-security.php:157 bulletproof-security.php:160
4750
  msgid "Setup Wizard"
4751
  msgstr ""
4752
 
4753
+ #: admin/includes/admin.php:434
4754
+ msgid "MScan Iframe"
4755
+ msgstr ""
4756
+
4757
+ #: admin/includes/admin.php:437 admin/includes/admin.php:445
4758
  #: admin/includes/uninstall.php:45
4759
  msgid "BPS Plugin Uninstall Options"
4760
  msgstr ""
4761
 
4762
+ #: admin/includes/admin.php:484
4763
  msgid "BPS UI|UX Debug: SLF: CSS Script Loaded"
4764
  msgstr ""
4765
 
4766
+ #: admin/includes/admin.php:517
4767
  msgid "BPS UI|UX Debug: SLF: js Script Loaded"
4768
  msgstr ""
4769
 
4770
+ #: admin/includes/admin.php:600
4771
  msgid "BPS UI|UX Debug: Scripts|Styles Dequeued"
4772
  msgstr ""
4773
 
4774
+ #: admin/includes/admin.php:612
4775
  msgid "Script Dequeued: "
4776
  msgstr ""
4777
 
4778
+ #: admin/includes/admin.php:618
4779
  msgid ""
4780
  "No additional plugin or theme Scripts were found that needed to be Dequeued."
4781
  msgstr ""
4782
 
4783
+ #: admin/includes/admin.php:630
4784
  msgid "Style Dequeued: "
4785
  msgstr ""
4786
 
4787
+ #: admin/includes/admin.php:636
4788
  msgid ""
4789
  "No additional plugin or theme Styles were found that needed to be Dequeued."
4790
  msgstr ""
4791
 
4792
+ #: admin/includes/admin.php:674 admin/includes/admin.php:707
4793
  msgid "BPS UI|UX Debug: WP Toolbar nodes|menu items Removed"
4794
  msgstr ""
4795
 
4796
+ #: admin/includes/admin.php:686 admin/includes/admin.php:719
4797
  msgid "WP Toolbar node|menu item Removed: "
4798
  msgstr ""
4799
 
4800
+ #: admin/includes/admin.php:694 admin/includes/admin.php:727
4801
  msgid "No WP Toolbar nodes|menu items were Removed in BPS plugin pages"
4802
  msgstr ""
4803
 
4821
  "click the Save Option button."
4822
  msgstr ""
4823
 
4824
+ #: admin/includes/uninstall.php:54
4825
  msgid "BPS Plugin Uninstall Options:"
4826
  msgstr ""
4827
 
4828
+ #: admin/includes/uninstall.php:56
4829
  msgid "BPS Pro Upgrade Uninstall"
4830
  msgstr ""
4831
 
4832
+ #: admin/includes/uninstall.php:57
4833
  msgid "Complete BPS Plugin Uninstall"
4834
  msgstr ""
4835
 
4889
 
4890
  #: admin/login/login.php:232 admin/login/login.php:329
4891
  #: admin/login/login.php:649 admin/login/login.php:750
4892
+ #: admin/mscan/mscan.php:1438 admin/mscan/mscan.php:1660
4893
+ #: admin/mscan/mscan.php:1782 admin/mscan/mscan.php:1941
4894
  msgid "Submit"
4895
  msgstr ""
4896
 
5119
  msgstr ""
5120
 
5121
  #: admin/login/login.php:649 admin/login/login.php:750
5122
+ #: admin/mscan/mscan.php:1661 admin/mscan/mscan.php:1942
5123
  msgid "Clear|Refresh"
5124
  msgstr ""
5125
 
5783
  msgstr ""
5784
 
5785
  #: admin/login/lsm-help-text.php:10 admin/maintenance/maintenance.php:583
5786
+ #: includes/hud-dismiss-functions.php:354
5787
+ #: includes/hud-dismiss-functions.php:398
5788
  msgid "CAUTION: "
5789
  msgstr ""
5790
 
6903
 
6904
  #: admin/maintenance/maintenance.php:418 admin/maintenance/maintenance.php:438
6905
  #: admin/wizard/wizard.php:160 includes/general-functions.php:509
6906
+ #: includes/hud-dismiss-functions.php:354
6907
+ #: includes/hud-dismiss-functions.php:398
6908
+ #: includes/hud-dismiss-functions.php:503
6909
  msgid "Click Here"
6910
  msgstr ""
6911
 
7312
  msgid "BackEnd Maintenance Mode has been Turned Off."
7313
  msgstr ""
7314
 
7315
+ #: admin/mscan/mscan-help-text.php:10
7316
  msgid ""
7317
  "For more extensive help info and answers to common issues or problems click "
7318
  "the MScan Malware Scanner Guide link above. For troubleshooting help or to "
7320
  "above."
7321
  msgstr ""
7322
 
7323
+ #: admin/mscan/mscan-help-text.php:12
7324
+ msgid "MScan 2.0 General Info"
7325
+ msgstr ""
7326
+
7327
+ #: admin/mscan/mscan-help-text.php:12
7328
+ msgid ""
7329
+ "MScan 2.0 scans WP Core, Plugin and Theme files using file hash comparisons, "
7330
+ "which is 100% accurate vs conventional pattern matching, which is typically "
7331
+ "around 75% - 85% accurate. MScan scans all other website files (non-"
7332
+ "WordPress files) using conventional pattern matching scanning. The pattern "
7333
+ "matching code is much more extensive in MScan 2.0 and will hopefully achieve "
7334
+ "a 95% or higher detection rate. False positives are inevitable when using "
7335
+ "conventional pattern matching scanning, but since MScan 2.0 uses file hash "
7336
+ "comparison scanning for all WP Core, Plugin and Theme files then there will "
7337
+ "not be any false positives detected for any/all WordPress files (WP Core, "
7338
+ "Plugins and Themes). MScan 2.0 automatically downloads WordPress, Plugin and "
7339
+ "Theme zip files, extracts the zip files, creates file hashes for all files "
7340
+ "and then deletes the zip files. WP Core, Plugin and Theme zip downloads only "
7341
+ "occur on the first MScan scan or when a new WordPress, Plugin or Theme "
7342
+ "version is installed/updated on a website."
7343
+ msgstr ""
7344
+
7345
+ #: admin/mscan/mscan-help-text.php:14
7346
+ msgid "Scanning Other WordPress Sites"
7347
+ msgstr ""
7348
+
7349
+ #: admin/mscan/mscan-help-text.php:14
7350
+ msgid ""
7351
+ "Website folder checkboxes cannot be checked for other WordPress sites under "
7352
+ "your hosting account. To scan other WordPress sites under your hosting "
7353
+ "account run MScan 2.0 from each site. There are several technical reasons "
7354
+ "for doing this: Each site may have a different version of WordPress "
7355
+ "installed and different Plugins and Themes installed. MScan 2.0 now uses "
7356
+ "file hash comparisons for each individual site based on the WordPress, "
7357
+ "Plugin and Theme versions installed on each individual website."
7358
+ msgstr ""
7359
+
7360
+ #: admin/mscan/mscan-help-text.php:16
7361
+ msgid "Estimated Scan Time Exceeded"
7362
+ msgstr ""
7363
+
7364
+ #: admin/mscan/mscan-help-text.php:16
7365
+ msgid ""
7366
+ "If you see \"Estimated Scan Time Exceeded: Still scanning files\" that means "
7367
+ "that the current scan that you are running is taking longer than the "
7368
+ "estimated scan time. The scan will complete successfully."
7369
+ msgstr ""
7370
+
7371
+ #: admin/mscan/mscan-help-text.php:18
7372
+ msgid "Processing Total File Count"
7373
+ msgstr ""
7374
+
7375
+ #: admin/mscan/mscan-help-text.php:18
7376
+ msgid ""
7377
+ "If you see \"Processing Total File Count: Still scanning files\" that means "
7378
+ "that the current scan that you are running has not yet processed the total "
7379
+ "number of files to scan yet. The scan will complete successfully."
7380
+ msgstr ""
7381
+
7382
+ #: admin/mscan/mscan-help-text.php:20
7383
+ msgid "New Hash Files Created: Run A New Scan"
7384
+ msgstr ""
7385
+
7386
+ #: admin/mscan/mscan-help-text.php:20
7387
+ msgid ""
7388
+ "If you see \"Total Files Scanned: New Hash Files Created: Run A New Scan\" "
7389
+ "that means that the current scan that you are running will create new Plugin "
7390
+ "or Theme Hash files and not scan any files. You will see this message "
7391
+ "instead of the total number of files scanned whenever new or updated Plugins "
7392
+ "or Themes need new Hash files created. Run another scan to scan the new/"
7393
+ "updated Plugin and Theme files. Note: This safety precaution ensures that "
7394
+ "Plugin and Theme hash files are not being created at the same time Plugin "
7395
+ "and Theme files are being scanned, which could result in false positive file "
7396
+ "hash comparison results for Plugin and Theme files."
7397
+ msgstr ""
7398
+
7399
+ #: admin/mscan/mscan-help-text.php:22
7400
+ msgid "Error: Files found in the plugin-hashes folder"
7401
+ msgstr ""
7402
+
7403
+ #: admin/mscan/mscan-help-text.php:22
7404
+ msgid ""
7405
+ "If you see \"Total Files Scanned: Error: Files found in the plugin-hashes "
7406
+ "folder\" that means that files (and probably folders too) were found in the /"
7407
+ "wp-content/bps-backup/plugin-hashes/ folder. This problem could be caused by "
7408
+ "uploading a plugin zip file that does not extract the entire plugin folder "
7409
+ "and instead extracts individual plugin folders and files. To fix this "
7410
+ "problem you will need to use FTP or your web host control panel file manager "
7411
+ "and delete all folders and files in the /plugin-hashes/ folder except for "
7412
+ "this file: plugin-hashes.php. To correctly make a plugin zip file that "
7413
+ "extracts the entire plugin folder you would right mouse click on the plugin "
7414
+ "folder, click \"send to\" and then click \"Compressed (zipped) folder\" on "
7415
+ "Windows."
7416
+ msgstr ""
7417
+
7418
+ #: admin/mscan/mscan-help-text.php:24
7419
+ msgid "Error: Files found in the theme-hashes folder"
7420
+ msgstr ""
7421
+
7422
+ #: admin/mscan/mscan-help-text.php:24
7423
+ msgid ""
7424
+ "If you see \"Total Files Scanned: Error: Files found in the theme-hashes "
7425
+ "folder\" that means that files (and probably folders too) were found in the /"
7426
+ "wp-content/bps-backup/theme-hashes/ folder. This problem could be caused by "
7427
+ "uploading a theme zip file that does not extract the entire theme folder and "
7428
+ "instead extracts individual theme folders and files. To fix this problem you "
7429
+ "will need to use FTP or your web host control panel file manager and delete "
7430
+ "all folders and files in the /theme-hashes/ folder except for this file: "
7431
+ "theme-hashes.php. To correctly make a theme zip file that extracts the "
7432
+ "entire theme folder you would right mouse click on the theme folder, click "
7433
+ "\"send to\" and then click \"Compressed (zipped) folder\" on Windows."
7434
+ msgstr ""
7435
+
7436
+ #: admin/mscan/mscan-help-text.php:26
7437
  msgid "Start Scan"
7438
  msgstr ""
7439
 
7440
+ #: admin/mscan/mscan-help-text.php:26
7441
  msgid "Clicking the Start Scan button starts a scan."
7442
  msgstr ""
7443
 
7444
+ #: admin/mscan/mscan-help-text.php:28
7445
  msgid "Stop Scan"
7446
  msgstr ""
7447
 
7448
+ #: admin/mscan/mscan-help-text.php:28
7449
+ msgid ""
7450
+ "Clicking the Stop Scan button stops a scan. You can also deactivate and "
7451
+ "activate the BPS Pro plugin on the WordPress Plugins page to stop a scan."
7452
  msgstr ""
7453
 
7454
+ #: admin/mscan/mscan-help-text.php:30
7455
+ msgid "Reset MScan"
7456
  msgstr ""
7457
 
7458
+ #: admin/mscan/mscan-help-text.php:30
7459
  msgid ""
7460
+ "The Reset MScan button resets/deletes these things: MScan Status option "
7461
+ "values: The Scan Completed timestamp, Total Scan Time, Total Files Scanned, "
7462
+ "Skipped Files, Suspicious Files and Suspicious DB Entries status values will "
7463
+ "be deleted and will either display blank or 0. The scan data in the View|"
7464
+ "Ignore|Delete Suspicious Files and View|Ignore Suspicious DB Entries Forms "
7465
+ "will be deleted."
7466
  msgstr ""
7467
 
7468
+ #: admin/mscan/mscan-help-text.php:32 admin/mscan/mscan.php:916
7469
+ msgid "Website Folders & Files To Scan"
7470
+ msgstr ""
7471
+
7472
+ #: admin/mscan/mscan-help-text.php:32
7473
+ msgid ""
7474
+ "Checking a checkbox means scan that folder. Unchecking a checkbox means do "
7475
+ "not scan that folder. \"Giving WordPress Its Own Directory\" site types: All "
7476
+ "scannable parent folders will be listed along with your WP installation "
7477
+ "folders. Both parent folders and files and WP installation folders and files "
7478
+ "that you select/check will be scanned. All other site types: All folders in "
7479
+ "your WP installation folder will be listed. All folders and files in your WP "
7480
+ "installation folder that you select/check will be scanned."
7481
+ msgstr ""
7482
+
7483
+ #: admin/mscan/mscan-help-text.php:34
7484
  msgid "Max File Size Limit to Scan"
7485
  msgstr ""
7486
 
7487
+ #: admin/mscan/mscan-help-text.php:34
7488
  msgid ""
7489
+ "Files that are larger than the default file size setting of 1000KB will be "
7490
+ "skipped by default in a regular scan and can be scanned using a Skipped File "
7491
+ "scan. You can change the max file size limit option setting to a larger max "
7492
+ "file size limit."
7493
  msgstr ""
7494
 
7495
+ #: admin/mscan/mscan-help-text.php:36
7496
  msgid "Max Time Limit to Scan"
7497
  msgstr ""
7498
 
7499
+ #: admin/mscan/mscan-help-text.php:36
7500
  msgid ""
7501
  "The default time limit for script execution on most web hosts is 300 "
7502
  "seconds. The default time limit setting for MScan scanning is also set to "
7504
  "than 300 seconds."
7505
  msgstr ""
7506
 
7507
+ #: admin/mscan/mscan-help-text.php:38 admin/mscan/mscan.php:1024
7508
  msgid "Exclude Individual Folders"
7509
  msgstr ""
7510
 
7511
+ #: admin/mscan/mscan-help-text.php:38
7512
  msgid ""
7513
  "Enter relative folder paths one folder path per line. A relative folder path "
7514
  "is this: /some-folder/some-subfolder. A literal path would be the full "
7521
  "particular cache folder under the wp-content folder."
7522
  msgstr ""
7523
 
7524
+ #: admin/mscan/mscan-help-text.php:40 admin/mscan/mscan.php:1030
7525
  msgid "Scan Database"
7526
  msgstr ""
7527
 
7528
+ #: admin/mscan/mscan-help-text.php:40
7529
  msgid ""
7530
  "When Database scan is turned on your WordPress database will be scanned for "
7531
  "suspicious code."
7532
  msgstr ""
7533
 
7534
+ #: admin/mscan/mscan-help-text.php:42 admin/mscan/mscan.php:1036
 
 
 
 
 
 
 
 
 
 
 
7535
  msgid "Scan Skipped Files Only"
7536
  msgstr ""
7537
 
7538
+ #: admin/mscan/mscan-help-text.php:42
7539
  msgid ""
7540
+ "Skipped files are files that are larger than the \"Max File Size Limit to "
7541
+ "Scan\" option setting file size. The default file size setting is 400KB. "
7542
+ "When Skipped File Scan is On only skipped files will be scanned. Note: No "
7543
+ "other MScan option settings have any effect while Skipped File Scan is set "
7544
+ "to On."
7545
  msgstr ""
7546
 
7547
+ #: admin/mscan/mscan-help-text.php:44 admin/mscan/mscan.php:1042
7548
  msgid "Automatically Delete /tmp Files"
7549
  msgstr ""
7550
 
7551
+ #: admin/mscan/mscan-help-text.php:44
7552
  msgid ""
7553
  "When Delete Tmp Files is On, all temporary files will be deleted. Hackers "
7554
  "commonly hide hacker files in the /tmp folder."
7555
  msgstr ""
7556
 
7557
+ #: admin/mscan/mscan-help-text.php:46 admin/mscan/mscan.php:1048
7558
  msgid "Exclude /tmp Files"
7559
  msgstr ""
7560
 
7561
+ #: admin/mscan/mscan-help-text.php:46
7562
  msgid ""
7563
  "Enter 1 file name per line. Some web hosts store files such as, mysql.sock, ."
7564
  "s.PGSQL.5432 and .per-user in the /tmp folder. These files cannot be deleted "
7565
  "by MScan, but attempting to delete these files will generate php errors. To "
7566
  "prevent php errors from occurring you would exclude files such as these "
7567
+ "using the MScan Exclude /tmp files option setting. You will need to ask your "
7568
+ "web host for the names of those tmp files to exclude."
7569
  msgstr ""
7570
 
7571
+ #: admin/mscan/mscan-help-text.php:48
7572
+ msgid "Scheduled Scan Frequency"
7573
  msgstr ""
7574
 
7575
+ #: admin/mscan/mscan-help-text.php:48
7576
  msgid ""
7577
  "You can choose to schedule ongoing automated scans. Note: The BPS Pro ARQ "
7578
  "IDPS scanner is far superior to any/all Malware scanners including BPS Pro "
7579
+ "MScan. You can of course use both ARQ IDPS and MScan scheduled scans "
7580
+ "together."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7581
  msgstr ""
7582
 
7583
+ #: admin/mscan/mscan-help-text.php:54
7584
+ msgid "Delete File Hashes Tool"
7585
+ msgstr ""
7586
+
7587
+ #: admin/mscan/mscan-help-text.php:54
7588
+ msgid ""
7589
+ "This tool allows you to delete the Plugin and Theme file hashes. This tool "
7590
+ "should ONLY be used if there is a problem when scanning Plugin and Theme "
7591
+ "files. Usages: If you downgrade a plugin to an older version then use this "
7592
+ "tool to delete Plugin and Theme file hashes. If the MScan file hash "
7593
+ "comparison results display a large number of Plugin or Theme files as "
7594
+ "suspicious: Example: Suspicious|Modified|Unknown Plugin or Theme file then "
7595
+ "use this tool to delete all Plugin and Theme file hashes. After using this "
7596
+ "tool, the next MScan scan that you perform will download new Plugin and "
7597
+ "Theme zip files, extract them, make new Plugin and Theme file hashes and "
7598
+ "then delete the zip files. Important Note: You should also click the MScan "
7599
+ "Reset button after using this tool to remove any old/bad scan data."
7600
+ msgstr ""
7601
+
7602
+ #: admin/mscan/mscan-help-text.php:56
7603
+ msgid "Upload Plugin Zip Files"
7604
+ msgstr ""
7605
+
7606
+ #: admin/mscan/mscan-help-text.php:56
7607
+ msgid ""
7608
+ "You can upload multiple zip files at the same time by using your Ctrl or "
7609
+ "Shift keyboard keys on Windows. This upload form allows you to upload "
7610
+ "premium, paid and custom plugin zip files that are not in the WordPress "
7611
+ "Plugin Repository on wordpress.org. MScan will automatically extract any "
7612
+ "uploaded plugin zip files, create file hashes and delete the plugin zip "
7613
+ "files on the next MScan scan. If you do not choose to upload premium, paid "
7614
+ "and custom plugin zip files then those premium, paid and custom plugin files "
7615
+ "will not be scanned. Important Note: Plugin zip files MUST be named/renamed "
7616
+ "using the version number in this exact format: plugin-name.x.x.zip where x "
7617
+ "is the actual current plugin version number. The reason for that is MScan "
7618
+ "keeps track of the version numbers for plugins in order to create new plugin "
7619
+ "file hashes for newer versions of plugins when you update them. This process "
7620
+ "is completely automated for any/all free plugins that you have installed "
7621
+ "from the WordPress Plugin Repository on wordpress.org. Important Note: Some "
7622
+ "plugin zip files in the WP Plugin Repository are not named with a version "
7623
+ "number. If you would like to scan those plugins you will need to download "
7624
+ "the plugin zip file and rename it using this exact format: plugin-name.x.x."
7625
+ "zip and then upload the renamed plugin zip file."
7626
+ msgstr ""
7627
+
7628
+ #: admin/mscan/mscan-help-text.php:58
7629
+ msgid "Upload Theme Zip Files"
7630
+ msgstr ""
7631
+
7632
+ #: admin/mscan/mscan-help-text.php:58
7633
+ msgid ""
7634
+ "You can upload multiple zip files at the same time by using your Ctrl or "
7635
+ "Shift keyboard keys on Windows. This upload form allows you to upload "
7636
+ "premium, paid and custom theme zip files that are not in the WordPress Theme "
7637
+ "Repository on wordpress.org. MScan will automatically extract any uploaded "
7638
+ "theme zip files, create file hashes and delete the theme zip files on the "
7639
+ "next MScan scan. If you do not choose to upload premium, paid and custom "
7640
+ "theme zip files then those premium, paid and custom theme files will not be "
7641
+ "scanned. Important Note: Theme zip files MUST be named/renamed using the "
7642
+ "version number in this exact format: theme-name.x.x.zip where x is the "
7643
+ "actual current theme version number. The reason for that is MScan keeps "
7644
+ "track of the version numbers for themes in order to create new theme file "
7645
+ "hashes for newer versions of themes when you update them. This process is "
7646
+ "completely automated for any/all free themes that you have installed from "
7647
+ "the WordPress Theme Repository on wordpress.org. Important Note: Some theme "
7648
+ "zip files in the WP Theme Repository are not named with a version number. If "
7649
+ "you would like to scan those themes you will need to download the theme zip "
7650
+ "file and rename it using this exact format: theme-name.x.x.zip and then "
7651
+ "upload the renamed theme zip file. Child Themes are a custom Theme. Zip a "
7652
+ "known good/clean copy of your Child Theme folder and upload it if you would "
7653
+ "like your Child Theme files scanned. Use the same zip file naming "
7654
+ "convention: tmeme-name-child.x.x.zip."
7655
+ msgstr ""
7656
+
7657
+ #: admin/mscan/mscan-help-text.php:60 admin/mscan/mscan.php:1365
7658
  msgid "View|Ignore|Delete Suspicious Files"
7659
  msgstr ""
7660
 
7661
+ #: admin/mscan/mscan-help-text.php:60
7662
  msgid ""
7663
  "This form allows you to view, ignore, unignore or delete suspicious and "
7664
  "skipped files. If you are not sure if code is malicious or safe you can copy "
7669
  "ignored file it will be scanned in future scans."
7670
  msgstr ""
7671
 
7672
+ #: admin/mscan/mscan-help-text.php:62 admin/mscan/mscan.php:1712
7673
  msgid "View|Ignore Suspicious DB Entries"
7674
  msgstr ""
7675
 
7676
+ #: admin/mscan/mscan-help-text.php:62
7677
  msgid ""
7678
  "This form allows you to view, ignore or unignore suspicious DB Entries. "
7679
  "Note: The view option displays the DB Table, Column, Row ID and the MScan "
7683
  "When you unignore an ignored DB Entry it will be scanned in future scans."
7684
  msgstr ""
7685
 
7686
+ #: admin/mscan/mscan-help-text.php:67
7687
  msgid "MScan Log General Information"
7688
  msgstr ""
7689
 
7690
+ #: admin/mscan/mscan-help-text.php:67
7691
  msgid ""
7692
  "Your MScan Log file is a plain text static file and not a dynamic file or "
7693
  "dynamic display to keep your website resource usage at a bare minimum and "
7698
  "a certain size (256KB, 500KB or 1MB)."
7699
  msgstr ""
7700
 
7701
+ #: admin/mscan/mscan-help-text.php:69
7702
  msgid "MScan Logging"
7703
  msgstr ""
7704
 
7705
+ #: admin/mscan/mscan-help-text.php:69 admin/mscan/mscan.php:1992
7706
  msgid "Logs extensive details about each scan that you run."
7707
  msgstr ""
7708
 
7709
+ #: admin/mscan/mscan-help-text.php:71
7710
  msgid "MScan Log File Size"
7711
  msgstr ""
7712
 
7713
+ #: admin/mscan/mscan-help-text.php:71
7714
  msgid ""
7715
  "Displays the size of your MScan Log file. If your log file is larger than "
7716
  "2MB then you will see a Red warning message displayed: The S-Monitor Email "
7720
  "contents of this Log file."
7721
  msgstr ""
7722
 
7723
+ #: admin/mscan/mscan-help-text.php:71
7724
  msgid "MScan Log Last Modified Time"
7725
  msgstr ""
7726
 
7727
+ #: admin/mscan/mscan-help-text.php:73
7728
  msgid ""
7729
  "The Reset Last Modified Time in DB option/feature is currently completely "
7730
  "automated and does not require any manual steps performed by you."
7731
  msgstr ""
7732
 
7733
+ #: admin/mscan/mscan-help-text.php:75
7734
  msgid ""
7735
  "Clicking the Delete Log button will delete the entire contents of your MScan "
7736
  "Log File. If you have setup S-Monitor Email Alerting & Log Options then the "
7738
  "MScan Log file exceeds 2MB in size."
7739
  msgstr ""
7740
 
7741
+ #: admin/mscan/mscan-help-text.php:80
7742
+ msgid "MScan Report General Information"
 
 
 
 
 
 
 
 
7743
  msgstr ""
7744
 
7745
+ #: admin/mscan/mscan-help-text.php:80
7746
  msgid ""
7747
+ "After running a scan your extensive scan results data is displayed on this "
7748
+ "tab page. If you would like to save your scan results data click the Save "
7749
+ "MScan Report button. You can save up to 20 scan reports. You can view or "
7750
+ "delete scan reports on the MScan Saved Reports tab page using the MScan "
7751
+ "Saved Reports Form."
7752
  msgstr ""
7753
 
7754
+ #: admin/mscan/mscan-help-text.php:82
7755
+ msgid "No File Hashes for This Plugin or No File Hashes for This Theme"
7756
  msgstr ""
7757
 
7758
+ #: admin/mscan/mscan-help-text.php:82
7759
  msgid ""
7760
+ "If you see either of these status messages under Plugin File Hashes or Theme "
7761
+ "File Hashes then go to the main MScan 2.0 tab page, click the MScan 2.0 Read "
7762
+ "Me help button and read the \"Upload Plugin Zip Files\" or \"Upload Theme "
7763
+ "Zip Files\" help section."
 
 
 
 
 
 
 
 
 
7764
  msgstr ""
7765
 
7766
+ #: admin/mscan/mscan-help-text.php:87
7767
+ msgid "MScan Saved Reports General Information"
7768
  msgstr ""
7769
 
7770
+ #: admin/mscan/mscan-help-text.php:87
7771
  msgid ""
7772
+ "You can save up to 20 scan reports. You can view or delete scan reports. If "
7773
+ "you would like to view a saved scan report select the View Report checkbox "
7774
+ "for the scan report you would like to view and click the View|Delete Reports "
7775
+ "button. Scan report data is displayed below the MScan Saved Reports Form. If "
7776
+ "you would like to delete a saved scan report select the Delete Report "
7777
+ "checkbox for the scan report you would like to delete and click the View|"
7778
+ "Delete Reports button. Refresh/reload the MScan Saved Reports tab page when "
7779
+ "deleting scan reports to see the current MScan Saved Reports Form data."
7780
  msgstr ""
7781
 
7782
+ #: admin/mscan/mscan.php:52
7783
+ msgid "The MScan pattern matching code does not exist in your database."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7784
  msgstr ""
7785
 
7786
+ #: admin/mscan/mscan.php:52
7787
  msgid ""
7788
+ "Most likely your web host saw the pattern matching code in the MScan /"
7789
+ "bulletproof-security/admin/htaccess/mscan-pattern-match.php file as "
7790
+ "malicious and has either deleted the file or made the file or folder "
7791
+ "unreadable."
 
 
 
 
 
7792
  msgstr ""
7793
 
7794
+ #: admin/mscan/mscan.php:52
 
 
7795
  msgid ""
7796
+ "Unfortunately that means you will not be able to use MScan on your website/"
7797
+ "server/web host."
7798
  msgstr ""
7799
 
7800
+ #: admin/mscan/mscan.php:193
7801
+ msgid "BulletProof Security ~ MScan 2.0 Malware Scanner"
 
 
7802
  msgstr ""
7803
 
7804
+ #: admin/mscan/mscan.php:199 admin/mscan/mscan.php:216
7805
+ #: admin/mscan/mscan.php:218
7806
+ msgid "MScan 2.0"
 
 
 
 
 
 
 
 
7807
  msgstr ""
7808
 
7809
+ #: admin/mscan/mscan.php:200 admin/mscan/mscan.php:1997
7810
+ #: admin/mscan/mscan.php:1999
7811
+ msgid "MScan Log"
7812
  msgstr ""
7813
 
7814
+ #: admin/mscan/mscan.php:201 admin/mscan/mscan.php:2204
7815
+ #: admin/mscan/mscan.php:2206
7816
+ msgid "MScan Report"
 
7817
  msgstr ""
7818
 
7819
+ #: admin/mscan/mscan.php:202 admin/mscan/mscan.php:2890
7820
+ #: admin/mscan/mscan.php:2892
7821
+ msgid "MScan Saved Reports"
 
7822
  msgstr ""
7823
 
7824
+ #: admin/mscan/mscan.php:210
7825
+ msgid "MScan 2.0 ~ "
7826
  msgstr ""
7827
 
7828
+ #: admin/mscan/mscan.php:210
7829
+ msgid "Scans website files & your database for hacker files or code"
7830
  msgstr ""
7831
 
7832
+ #: admin/mscan/mscan.php:226
7833
+ msgid "MScan Malware Scanner Guide"
7834
  msgstr ""
7835
 
7836
+ #: admin/mscan/mscan.php:227
7837
+ msgid "MScan Troubleshooting & Code Posting"
 
 
 
7838
  msgstr ""
7839
 
7840
+ #: admin/mscan/mscan.php:228
7841
+ msgid "BPS Pro Troubleshooting Steps"
7842
  msgstr ""
7843
 
7844
+ #: admin/mscan/mscan.php:343
7845
  msgid ""
7846
+ "MScan scan results and data has been deleted. Your MScan option settings "
7847
+ "have not been deleted."
 
7848
  msgstr ""
7849
 
7850
+ #: admin/mscan/mscan.php:360
 
 
 
 
7851
  msgid ""
7852
+ "MScan Plugin and Theme file hashes have been deleted. New Plugin and Theme "
7853
+ "file hashes will be created the next time you run a scan. You should also "
7854
+ "click the MScan Reset button after using this tool. Your MScan option "
7855
+ "settings have not been deleted."
7856
  msgstr ""
7857
 
7858
+ #: admin/mscan/mscan.php:402 admin/mscan/mscan.php:422
7859
+ #: admin/mscan/mscan.php:706
7860
+ msgid "Skipped file scanning is turned On. Only skipped files will be scanned."
 
7861
  msgstr ""
7862
 
7863
+ #: admin/mscan/mscan.php:406
7864
  msgid ""
7865
+ "MScan scanning has been stopped. Note: The Stop Scan button also stops the "
7866
+ "Scan Time Estimate Tool from calculating estimated scan time."
7867
  msgstr ""
7868
 
7869
+ #: admin/mscan/mscan.php:528
7870
+ msgid "First Time Scan or the Delete File Hashes Tool was used"
 
 
7871
  msgstr ""
7872
 
7873
+ #: admin/mscan/mscan.php:528
7874
  msgid ""
7875
+ "You will only see this message the first time you do a scan or if you use "
7876
+ "the Delete Files Hashes Tool. In order to make sure all Plugin and Theme "
7877
+ "hash files are created successfully no file scanning will occur during this "
7878
+ "scan. You can run a new scan after this scan has completed."
7879
  msgstr ""
7880
 
7881
+ #: admin/mscan/mscan.php:549
7882
+ msgid "Click OK to start scanning or click Cancel."
 
 
7883
  msgstr ""
7884
 
7885
+ #: admin/mscan/mscan.php:555
7886
+ msgid "Click OK to stop scanning or click Cancel."
 
 
 
 
 
7887
  msgstr ""
7888
 
7889
+ #: admin/mscan/mscan.php:567
7890
  msgid ""
7891
+ "Click OK to reset/delete all MScan scan results and data or click Cancel. "
7892
+ "Note: MScan option settings will not be reset/deleted."
 
 
 
 
 
 
 
 
 
7893
  msgstr ""
7894
 
7895
+ #: admin/mscan/mscan.php:575
7896
  msgid "MScan Options & Tools"
7897
  msgstr ""
7898
 
7899
+ #: admin/mscan/mscan.php:587
7900
  msgid "Save MScan Options"
7901
  msgstr ""
7902
 
7903
+ #: admin/mscan/mscan.php:710
7904
  msgid ""
7905
  "Skipped file scanning is turned On. There are no skipped files to be "
7906
  "scanned. Either there really are not any skipped files to scan or you have "
7907
  "not run a regular scan yet with the Skipped File Scan option turned Off."
7908
  msgstr ""
7909
 
7910
+ #: admin/mscan/mscan.php:714
7911
  msgid "Warning: "
7912
  msgstr ""
7913
 
7914
+ #: admin/mscan/mscan.php:714
7915
  msgid ""
7916
  "On some web hosts (Known host issues: SiteGround, Cyon) turning On the "
7917
  "\"Automatically Delete /tmp Files\" option setting will cause your website/"
7918
  "server to crash. If your website/server does crash contact your web host "
7919
  "support folks, tell them that you deleted /tmp files and your website/server "
7920
+ "has crashed. You can use the MScan Exclude /tmp Files option to exclude "
7921
+ "certain tmp files from being deleted. You will need to ask your web host for "
7922
+ "the names of those tmp files to exclude."
7923
  msgstr ""
7924
 
7925
+ #: admin/mscan/mscan.php:718
7926
  msgid "MScan Options saved."
7927
  msgstr ""
7928
 
7929
+ #: admin/mscan/mscan.php:916
7930
+ msgid "Files are not displayed, but will be scanned"
7931
+ msgstr ""
7932
+
7933
+ #: admin/mscan/mscan.php:917
7934
  msgid "MScan Options"
7935
  msgstr ""
7936
 
7937
+ #: admin/mscan/mscan.php:918
7938
  msgid "MScan Tools"
7939
  msgstr ""
7940
 
7941
+ #: admin/mscan/mscan.php:931
7942
  msgid "Folder Name"
7943
  msgstr ""
7944
 
7945
+ #: admin/mscan/mscan.php:950
7946
  msgid "Folder is not readable"
7947
  msgstr ""
7948
 
7949
+ #: admin/mscan/mscan.php:981
7950
  msgid ""
7951
+ "This folder contains another WordPress website. This checkbox cannot be "
7952
+ "checked. To scan that site run MScan from that site. Click the MScan Read Me "
7953
+ "help button above and read the \"Scanning Other WordPress Sites\" help "
7954
+ "section."
7955
  msgstr ""
7956
 
7957
+ #: admin/mscan/mscan.php:1015
7958
  msgid "Max File Size Limit to Scan:"
7959
  msgstr ""
7960
 
7961
+ #: admin/mscan/mscan.php:1020
7962
  msgid "Max Time Limit to Scan:"
7963
  msgstr ""
7964
 
7965
+ #: admin/mscan/mscan.php:1024
7966
  msgid "Enter one folder path per line. Include folder slashes."
7967
  msgstr ""
7968
 
7969
+ #: admin/mscan/mscan.php:1024 admin/mscan/mscan.php:1048
7970
  msgid "Example:"
7971
  msgstr ""
7972
 
7973
+ #: admin/mscan/mscan.php:1024 admin/mscan/mscan.php:1036
7974
+ #: admin/mscan/mscan.php:1048
7975
  msgid "Click the MScan Read Me help button for more help info."
7976
  msgstr ""
7977
 
7978
+ #: admin/mscan/mscan.php:1032
7979
  msgid "Database Scan On"
7980
  msgstr ""
7981
 
7982
+ #: admin/mscan/mscan.php:1033
7983
  msgid "Database Scan Off"
7984
  msgstr ""
7985
 
7986
+ #: admin/mscan/mscan.php:1036
 
 
 
 
 
 
 
 
7987
  msgid ""
7988
+ "When Skipped File Scan is On only skipped files will be scanned. Note: No "
7989
+ "other MScan option settings have any effect while Skipped File Scan is set "
7990
+ "to On."
7991
  msgstr ""
7992
 
7993
+ #: admin/mscan/mscan.php:1038
7994
  msgid "Skipped File Scan Off"
7995
  msgstr ""
7996
 
7997
+ #: admin/mscan/mscan.php:1039
7998
  msgid "Skipped File Scan On"
7999
  msgstr ""
8000
 
8001
+ #: admin/mscan/mscan.php:1044
8002
  msgid "Delete Tmp Files Off"
8003
  msgstr ""
8004
 
8005
+ #: admin/mscan/mscan.php:1045
8006
  msgid "Delete Tmp Files On"
8007
  msgstr ""
8008
 
8009
+ #: admin/mscan/mscan.php:1048
8010
  msgid "Enter one file name per line."
8011
  msgstr ""
8012
 
8013
+ #: admin/mscan/mscan.php:1054
8014
+ msgid "Scheduled Scan Frequency (BPS Pro only)"
8015
+ msgstr ""
8016
+
8017
+ #: admin/mscan/mscan.php:1056
8018
  msgid "Scheduled Scan Off"
8019
  msgstr ""
8020
 
8021
+ #: admin/mscan/mscan.php:1057
8022
  msgid "Run Scan Every 60 Minutes"
8023
  msgstr ""
8024
 
8025
+ #: admin/mscan/mscan.php:1058
8026
  msgid "Run Scan Every 3 Hours"
8027
  msgstr ""
8028
 
8029
+ #: admin/mscan/mscan.php:1059
8030
  msgid "Run Scan Every 6 Hours"
8031
  msgstr ""
8032
 
8033
+ #: admin/mscan/mscan.php:1060
8034
  msgid "Run Scan Every 12 Hours"
8035
  msgstr ""
8036
 
8037
+ #: admin/mscan/mscan.php:1061
8038
  msgid "Run Scan Every 24 Hours"
8039
  msgstr ""
8040
 
8041
+ #: admin/mscan/mscan.php:1064
8042
  msgid "Click OK to save MScan Options or click Cancel"
8043
  msgstr ""
8044
 
8045
+ #: admin/mscan/mscan.php:1080
8046
  msgid ""
8047
+ "CAUTION: Please click the MScan Read Me help button before using this tool. "
8048
+ "This tool allows you to delete the Plugin and Theme file hashes.\\n"
8049
  "\\n-------------------------------------------------------------\\n\\nThis "
8050
+ "tool should ONLY be used if there is a problem when scanning Plugin and "
8051
+ "Theme files.\\n"
 
 
 
 
 
 
 
 
8052
  "\\n-------------------------------------------------------------\\n\\nClick "
8053
+ "OK to delete Plugin and Theme file hashes or click Cancel"
8054
  msgstr ""
8055
 
8056
+ #: admin/mscan/mscan.php:1090
8057
  msgid ""
8058
+ "Clicking OK will upload Plugin Zip files to the /wp-content/bps-backup/"
8059
+ "plugin-hashes/ folder. The zip files will be extracted, MD5 file hashes will "
8060
+ "be created and the zip files will be deleted."
 
 
 
 
 
8061
  msgstr ""
8062
 
8063
+ #: admin/mscan/mscan.php:1090
8064
  msgid ""
8065
+ "Zip files MUST be named using this exact format: plugin-name.x.x.zip where x "
8066
+ "is the actual current version number of the plugin in the zip file."
8067
+ msgstr ""
8068
+
8069
+ #: admin/mscan/mscan.php:1090
8070
+ msgid "Click OK to upload Plugin Zip files or click Cancel."
8071
+ msgstr ""
8072
+
8073
+ #: admin/mscan/mscan.php:1100
8074
+ msgid ""
8075
+ "Clicking OK will upload Theme Zip files to the /wp-content/bps-backup/theme-"
8076
+ "hashes/ folder. The zip files will be extracted, MD5 file hashes will be "
8077
+ "created and the zip files will be deleted."
8078
+ msgstr ""
8079
+
8080
+ #: admin/mscan/mscan.php:1100
8081
+ msgid ""
8082
+ "Zip files MUST be named using this exact format: theme-name.x.x.zip where x "
8083
+ "is the actual current version number of the theme in the zip file."
8084
+ msgstr ""
8085
+
8086
+ #: admin/mscan/mscan.php:1100
8087
+ msgid "Click OK to upload Theme Zip files or click Cancel."
8088
+ msgstr ""
8089
+
8090
+ #: admin/mscan/mscan.php:1143
8091
+ msgid "Plugin Zip File Upload Successful: "
8092
+ msgstr ""
8093
+
8094
+ #: admin/mscan/mscan.php:1206 admin/mscan/mscan.php:1320
8095
+ msgid "Error: Zip File Upload Failed: "
8096
+ msgstr ""
8097
+
8098
+ #: admin/mscan/mscan.php:1206 admin/mscan/mscan.php:1320
8099
+ msgid "Unable to move this uploaded zip file: "
8100
+ msgstr ""
8101
+
8102
+ #: admin/mscan/mscan.php:1206 admin/mscan/mscan.php:1320
8103
+ msgid " to this folder: "
8104
+ msgstr ""
8105
+
8106
+ #: admin/mscan/mscan.php:1212 admin/mscan/mscan.php:1326
8107
+ msgid "File Extension/Type or Filename Error: "
8108
+ msgstr ""
8109
+
8110
+ #: admin/mscan/mscan.php:1212
8111
+ msgid ""
8112
+ " is either not a .zip file or the .zip file is not named correctly. Only ."
8113
+ "zip files are allowed to be uploaded. Zip files MUST be named using this "
8114
+ "exact filename format: plugin-name.x.x.zip where x is the actual current "
8115
+ "version of the plugin in the zip file."
8116
+ msgstr ""
8117
+
8118
+ #: admin/mscan/mscan.php:1218 admin/mscan/mscan.php:1332
8119
+ msgid "Error: No zip file chosen: "
8120
+ msgstr ""
8121
+
8122
+ #: admin/mscan/mscan.php:1218
8123
+ msgid ""
8124
+ "You need to choose zip files before clicking the Upload Plugin Zip Files "
8125
+ "button."
8126
  msgstr ""
8127
 
8128
+ #: admin/mscan/mscan.php:1257
8129
+ msgid "Theme Zip File Upload Successful: "
8130
+ msgstr ""
8131
+
8132
+ #: admin/mscan/mscan.php:1326
8133
+ msgid ""
8134
+ " is either not a .zip file or the .zip file is not named correctly. Only ."
8135
+ "zip files are allowed to be uploaded. Zip files MUST be named using this "
8136
+ "exact filename format: theme-name.x.x.zip where x is the actual current "
8137
+ "version of the theme in the zip file."
8138
+ msgstr ""
8139
+
8140
+ #: admin/mscan/mscan.php:1332
8141
+ msgid ""
8142
+ "You need to choose zip files before clicking the Upload Theme Zip Files "
8143
+ "button."
8144
+ msgstr ""
8145
+
8146
+ #: admin/mscan/mscan.php:1479
8147
  msgid " has been deleted."
8148
  msgstr ""
8149
 
8150
+ #: admin/mscan/mscan.php:1500
8151
  msgid ""
8152
  " Current Status has been changed to Ignored File and this file will not be "
8153
  "scanned in any future MScan Scans."
8154
  msgstr ""
8155
 
8156
+ #: admin/mscan/mscan.php:1521
8157
  msgid ""
8158
  " Ignored File Status has been removed. The previous Status of the file will "
8159
  "be displayed again and this file will be scanned in future MScan scans."
8160
  msgstr ""
8161
 
8162
+ #: admin/mscan/mscan.php:1543 admin/mscan/mscan.php:1552
8163
  msgid "Close File"
8164
  msgstr ""
8165
 
8166
+ #: admin/mscan/mscan.php:1543 admin/mscan/mscan.php:1552
8167
+ #: admin/mscan/mscan.php:1859
8168
  msgid "MScan Pattern Match"
8169
  msgstr ""
8170
 
8171
+ #: admin/mscan/mscan.php:1543
8172
  msgid ""
8173
  "Only the MScan Pattern Match is displayed for images instead of the image "
8174
  "file code."
8175
  msgstr ""
8176
 
8177
+ #: admin/mscan/mscan.php:1543
8178
  msgid ""
8179
  "Opening image files to view image file code does not work well in a Browser."
8180
  msgstr ""
8181
 
8182
+ #: admin/mscan/mscan.php:1543
8183
  msgid ""
8184
  "You can download suspicious image files and use a code editor like Notepad++ "
8185
  "to check image file code for any malicious code."
8186
  msgstr ""
8187
 
8188
+ #: admin/mscan/mscan.php:1543 admin/mscan/mscan.php:1552
8189
+ #: admin/mscan/mscan.php:1859
8190
  msgid ""
8191
  "If you are not sure what to check for or what is and is not malicious code "
8192
  "then click the MScan Read Me help button."
8193
  msgstr ""
8194
 
8195
+ #: admin/mscan/mscan.php:1552
8196
  msgid ""
8197
  "You can use your Browser's Search or Find feature to search the file "
8198
  "contents/code displayed below using the MScan Pattern Match above for the "
8199
  "suspicious code that was detected by MScan."
8200
  msgstr ""
8201
 
8202
+ #: admin/mscan/mscan.php:1552
8203
  msgid ""
8204
  "You can download suspicious files if you would like to check the file "
8205
  "contents/code more extensively with a code editor like Notepad++."
8206
  msgstr ""
8207
 
8208
+ #: admin/mscan/mscan.php:1567 admin/mscan/mscan.php:2544
8209
+ #: admin/mscan/mscan.php:3366
8210
+ msgid ""
8211
+ "File hash comparison scan results are 100% accurate. WP Core, Plugin and "
8212
+ "Theme files are scanned using file hash comparison scanning."
8213
+ msgstr ""
8214
+
8215
+ #: admin/mscan/mscan.php:1567 admin/mscan/mscan.php:2544
8216
+ #: admin/mscan/mscan.php:3366
8217
+ msgid ""
8218
+ "Pattern matching scan results are less accurate and will usually detect some "
8219
+ "false positive matches. All other files that are not WP Core, Plugin and "
8220
+ "Theme files are scanned using pattern matching scanning."
8221
+ msgstr ""
8222
+
8223
+ #: admin/mscan/mscan.php:1567
8224
+ msgid ""
8225
+ "You can View, Ignore and Delete files detected as suspicious using the Form "
8226
+ "below. Before deleting any files make a backup of those files on your "
8227
+ "computer not on your hosting account."
8228
+ msgstr ""
8229
+
8230
+ #: admin/mscan/mscan.php:1567 admin/mscan/mscan.php:2544
8231
+ #: admin/mscan/mscan.php:3366
8232
+ msgid ""
8233
+ "And of course check the file contents of suspicious files to see if they "
8234
+ "contain hacker code or are false positive matches. Use the Ignore File "
8235
+ "checkbox option to ignore false postive matches."
8236
+ msgstr ""
8237
+
8238
+ #: admin/mscan/mscan.php:1567 admin/mscan/mscan.php:2544
8239
+ #: admin/mscan/mscan.php:3366
8240
+ msgid ""
8241
+ "When you ignore a file it will no longer be scanned in any future scans. "
8242
+ "When you unignore an ignored file it will be scanned in future scans."
8243
+ msgstr ""
8244
+
8245
+ #: admin/mscan/mscan.php:1583 admin/mscan/mscan.php:1884
8246
+ #: admin/mscan/mscan.php:2559 admin/mscan/mscan.php:2637
8247
+ #: admin/mscan/mscan.php:3373 admin/mscan/mscan.php:3419
8248
  msgid "Current Status"
8249
  msgstr ""
8250
 
8251
+ #: admin/mscan/mscan.php:1584
8252
  msgid "View<br>File"
8253
  msgstr ""
8254
 
8255
+ #: admin/mscan/mscan.php:1585
8256
  msgid "Ignore<br>File"
8257
  msgstr ""
8258
 
8259
+ #: admin/mscan/mscan.php:1586
8260
  msgid "Unignore<br>File"
8261
  msgstr ""
8262
 
8263
+ #: admin/mscan/mscan.php:1587
8264
  msgid "Delete<br>File"
8265
  msgstr ""
8266
 
8267
+ #: admin/mscan/mscan.php:1588 admin/mscan/mscan.php:2560
8268
+ #: admin/mscan/mscan.php:3374 admin/system-info/system-info.php:948
8269
  #: admin/system-info/system-info.php:988
8270
  msgid "File Path"
8271
  msgstr ""
8272
 
8273
+ #: admin/mscan/mscan.php:1589
8274
+ msgid "File Hash or<br>Pattern Match"
8275
  msgstr ""
8276
 
8277
+ #: admin/mscan/mscan.php:1590 admin/mscan/mscan.php:1892
8278
  msgid "Scan<br>Time"
8279
  msgstr ""
8280
 
8281
+ #: admin/mscan/mscan.php:1603 admin/mscan/mscan.php:2575
8282
  msgid "Skipped File"
8283
  msgstr ""
8284
 
8285
+ #: admin/mscan/mscan.php:1603 admin/mscan/mscan.php:2575
8286
  msgid "Not Scanned"
8287
  msgstr ""
8288
 
8289
+ #: admin/mscan/mscan.php:1607 admin/mscan/mscan.php:1614
8290
+ #: admin/mscan/mscan.php:2579 admin/mscan/mscan.php:2586
8291
  msgid "Ignored File"
8292
  msgstr ""
8293
 
8294
+ #: admin/mscan/mscan.php:1619 admin/mscan/mscan.php:2591
8295
  msgid "Suspicious File"
8296
  msgstr ""
8297
 
8298
+ #: admin/mscan/mscan.php:1625 admin/mscan/mscan.php:1913
8299
+ #: admin/mscan/mscan.php:3012
8300
  msgid "View"
8301
  msgstr ""
8302
 
8303
+ #: admin/mscan/mscan.php:1626 admin/mscan/mscan.php:1914
8304
  msgid "Ignore"
8305
  msgstr ""
8306
 
8307
+ #: admin/mscan/mscan.php:1628 admin/mscan/mscan.php:1915
8308
  msgid "Unignore"
8309
  msgstr ""
8310
 
8311
+ #: admin/mscan/mscan.php:1646 admin/mscan/mscan.php:2614
8312
  msgid "No Suspicious Files were detected"
8313
  msgstr ""
8314
 
8315
+ #: admin/mscan/mscan.php:1660
8316
  msgid ""
8317
  "View File Option: Selecting the View File Checkbox Form option will display "
8318
  "the contents of the file that you have selected to view.\\n"
8332
  "OK to proceed or click Cancel"
8333
  msgstr ""
8334
 
8335
+ #: admin/mscan/mscan.php:1816
8336
  msgid "Current Status has been changed to Ignored for DB Row ID"
8337
  msgstr ""
8338
 
8339
+ #: admin/mscan/mscan.php:1816 admin/mscan/mscan.php:1835
8340
  msgid "in DB Column"
8341
  msgstr ""
8342
 
8343
+ #: admin/mscan/mscan.php:1816
8344
  msgid "This DB Entry will not be scanned in any future MScan Scans."
8345
  msgstr ""
8346
 
8347
+ #: admin/mscan/mscan.php:1835
8348
  msgid "The Ignored DB Entry Status has been removed for DB Row ID"
8349
  msgstr ""
8350
 
8351
+ #: admin/mscan/mscan.php:1835
8352
  msgid ""
8353
  "The previous Status of the DB Entry will be displayed again and this DB "
8354
  "Entry will be scanned in future MScan scans."
8355
  msgstr ""
8356
 
8357
+ #: admin/mscan/mscan.php:1854 admin/mscan/mscan.php:1859
8358
  msgid "Close"
8359
  msgstr ""
8360
 
8361
+ #: admin/mscan/mscan.php:1854
8362
  msgid "Pharma Hack DB Table and Column"
8363
  msgstr ""
8364
 
8365
+ #: admin/mscan/mscan.php:1854
8366
  msgid "Pharma Hack cleanup/removal steps"
8367
  msgstr ""
8368
 
8369
+ #: admin/mscan/mscan.php:1854
8370
  msgid "Edit your theme's header.php file and delete this code: "
8371
  msgstr ""
8372
 
8373
+ #: admin/mscan/mscan.php:1854
8374
  msgid ""
8375
  "Delete this file in your theme's root folder: nav.php. Login to your web "
8376
  "host control panel, login to your WP Database using phpMyAdmin and delete "
8379
  "any that you do see."
8380
  msgstr ""
8381
 
8382
+ #: admin/mscan/mscan.php:1859
8383
  msgid "DB Table, Column and Row ID"
8384
  msgstr ""
8385
 
8386
+ #: admin/mscan/mscan.php:1859
8387
  msgid "Steps to view the database data that MScan detected as suspicious"
8388
  msgstr ""
8389
 
8390
+ #: admin/mscan/mscan.php:1859
8391
  msgid ""
8392
  "Login to your web host control panel, login to your WP Database using "
8393
  "phpMyAdmin and check the data in the DB Table, Column and Row ID shown "
8394
  "above. Note: Look for code that matches the MScan Pattern Match."
8395
  msgstr ""
8396
 
8397
+ #: admin/mscan/mscan.php:1870 admin/mscan/mscan.php:2624
8398
+ #: admin/mscan/mscan.php:3410
8399
+ msgid "Database scanning uses pattern matching scanning."
8400
+ msgstr ""
8401
+
8402
+ #: admin/mscan/mscan.php:1870 admin/mscan/mscan.php:2624
8403
+ #: admin/mscan/mscan.php:3410
8404
+ msgid ""
8405
+ "Pattern matching scan results will usually detect some false positive "
8406
+ "matches."
8407
+ msgstr ""
8408
+
8409
+ #: admin/mscan/mscan.php:1870
8410
+ msgid ""
8411
+ "This form allows you to view, ignore or unignore suspicious DB Entries. "
8412
+ "Note: The view option displays the DB Table, Column, Row ID and the MScan "
8413
+ "Pattern Match that was detected by the MScan scan."
8414
+ msgstr ""
8415
+
8416
+ #: admin/mscan/mscan.php:1870
8417
+ msgid "Before deleting any database data make a backup of your database."
8418
+ msgstr ""
8419
+
8420
+ #: admin/mscan/mscan.php:1870 admin/mscan/mscan.php:2624
8421
+ #: admin/mscan/mscan.php:3410
8422
+ msgid ""
8423
+ "Use phpMyAdmin or a similar tool to check your database Row where the "
8424
+ "suspicious code was found."
8425
+ msgstr ""
8426
+
8427
+ #: admin/mscan/mscan.php:1870 admin/mscan/mscan.php:2624
8428
+ #: admin/mscan/mscan.php:3410
8429
+ msgid ""
8430
+ "When you ignore a DB Entry it will no longer be scanned in any future scans. "
8431
+ "When you unignore an ignored DB Entry it will be scanned in future scans."
8432
+ msgstr ""
8433
+
8434
+ #: admin/mscan/mscan.php:1885
8435
  msgid "View<br>DB Entry"
8436
  msgstr ""
8437
 
8438
+ #: admin/mscan/mscan.php:1886
8439
  msgid "Ignore<br>DB Entry"
8440
  msgstr ""
8441
 
8442
+ #: admin/mscan/mscan.php:1887
8443
  msgid "Unignore<br>DB Entry"
8444
  msgstr ""
8445
 
8446
+ #: admin/mscan/mscan.php:1888 admin/mscan/mscan.php:2638
8447
+ #: admin/mscan/mscan.php:3420
8448
  msgid "DB Table"
8449
  msgstr ""
8450
 
8451
+ #: admin/mscan/mscan.php:1889 admin/mscan/mscan.php:2639
8452
+ #: admin/mscan/mscan.php:3421
8453
  msgid "DB Column"
8454
  msgstr ""
8455
 
8456
+ #: admin/mscan/mscan.php:1890 admin/mscan/mscan.php:2640
8457
+ #: admin/mscan/mscan.php:3422
8458
  msgid "DB Row ID"
8459
  msgstr ""
8460
 
8461
+ #: admin/mscan/mscan.php:1891
8462
+ msgid "Pattern<br>Match"
8463
+ msgstr ""
8464
+
8465
+ #: admin/mscan/mscan.php:1903 admin/mscan/mscan.php:2653
8466
  msgid "Ignored DB Entry"
8467
  msgstr ""
8468
 
8469
+ #: admin/mscan/mscan.php:1908 admin/mscan/mscan.php:2658
8470
  msgid "Suspicious DB Entry"
8471
  msgstr ""
8472
 
8473
+ #: admin/mscan/mscan.php:1926 admin/mscan/mscan.php:2675
8474
  msgid "No Suspicious DB Entries were detected"
8475
  msgstr ""
8476
 
8477
+ #: admin/mscan/mscan.php:1941
8478
  msgid ""
8479
  "View DB Entry Option: Selecting the View DB Entry Checkbox Form option will "
8480
  "display the contents of the DB Table, Column and Row ID that you have "
8492
  "OK to proceed or click Cancel"
8493
  msgstr ""
8494
 
8495
+ #: admin/mscan/mscan.php:1992
8496
  msgid "MScan Log ~ "
8497
  msgstr ""
8498
 
8499
+ #: admin/mscan/mscan.php:2023
 
 
 
 
 
 
8500
  msgid "Click the Reset Last Modified Time in DB button"
8501
  msgstr ""
8502
 
8503
+ #: admin/mscan/mscan.php:2023
8504
  msgid "to set the"
8505
  msgstr ""
8506
 
8507
+ #: admin/mscan/mscan.php:2028 admin/mscan/mscan.php:2033
8508
  msgid "Last Modified Time in DB:"
8509
  msgstr ""
8510
 
8511
+ #: admin/mscan/mscan.php:2046 admin/mscan/mscan.php:2049
8512
  msgid "MScan Log File Size: "
8513
  msgstr ""
8514
 
8515
+ #: admin/mscan/mscan.php:2049
8516
  msgid ""
8517
  "The S-Monitor Email Logging options will only send log files up to 2MB in "
8518
  "size."
8519
  msgstr ""
8520
 
8521
+ #: admin/mscan/mscan.php:2049
8522
  msgid ""
8523
  "Copy and paste the MScan Log file contents into a Notepad text file on your "
8524
  "computer and save it."
8525
  msgstr ""
8526
 
8527
+ #: admin/mscan/mscan.php:2062
8528
  msgid "MScan Log Last Modified Time:"
8529
  msgstr ""
8530
 
8531
+ #: admin/mscan/mscan.php:2064
8532
  msgid "Last Modified Time in File:"
8533
  msgstr ""
8534
 
8535
+ #: admin/mscan/mscan.php:2083
8536
  msgid ""
8537
  "Success! Your MScan Log has been deleted and replaced with a new blank MScan "
8538
  "Log file."
8539
  msgstr ""
8540
 
8541
+ #: admin/mscan/mscan.php:2093
8542
  msgid "Clicking OK will delete the contents of your MScan Log file."
8543
  msgstr ""
8544
 
8545
+ #: admin/mscan/mscan.php:2112
8546
  msgid ""
8547
  "The MScan Log File Was Not Found! Check that the file really exists here - /"
8548
  msgstr ""
8549
 
8550
+ #: admin/mscan/mscan.php:2112
8551
  msgid "/bps-backup/logs/mscan_log.txt and is named correctly."
8552
  msgstr ""
8553
 
8554
+ #: admin/mscan/mscan.php:2131
8555
  msgid "File Open and Write test successful! Your MScan Log file is writable."
8556
  msgstr ""
8557
 
8558
+ #: admin/mscan/mscan.php:2143 admin/mscan/mscan.php:2147
8559
  msgid "Success! Your MScan Log file has been updated."
8560
  msgstr ""
8561
 
8562
+ #: admin/mscan/mscan.php:2199
8563
+ msgid "MScan Report ~ "
8564
+ msgstr ""
8565
+
8566
+ #: admin/mscan/mscan.php:2199
8567
+ msgid ""
8568
+ "Displays the current scan results data. Click the Save MScan Report button "
8569
+ "to save MScan Reports."
8570
+ msgstr ""
8571
+
8572
+ #: admin/mscan/mscan.php:2212
8573
+ msgid "Click OK to save the MScan Report or click Cancel."
8574
+ msgstr ""
8575
+
8576
+ #: admin/mscan/mscan.php:2233
8577
+ msgid ""
8578
+ "No Scan Results To Display: No scans have been run yet or you clicked the "
8579
+ "MScan Reset button."
8580
+ msgstr ""
8581
+
8582
+ #: admin/mscan/mscan.php:2247
8583
+ msgid "Scan Date|Time: "
8584
+ msgstr ""
8585
+
8586
+ #: admin/mscan/mscan.php:2250
8587
+ msgid "Website: "
8588
+ msgstr ""
8589
+
8590
+ #: admin/mscan/mscan.php:2253
8591
+ msgid "Scan Completion Time: "
8592
+ msgstr ""
8593
+
8594
+ #: admin/mscan/mscan.php:2256
8595
+ msgid "Total Files Scanned: "
8596
+ msgstr ""
8597
+
8598
+ #: admin/mscan/mscan.php:2259
8599
+ msgid "Total Skipped Files: "
8600
+ msgstr ""
8601
+
8602
+ #: admin/mscan/mscan.php:2268
8603
+ msgid "Total Suspicious Files: "
8604
+ msgstr ""
8605
+
8606
+ #: admin/mscan/mscan.php:2277
8607
+ msgid "Total Suspicious DB Entries: "
8608
+ msgstr ""
8609
+
8610
+ #: admin/mscan/mscan.php:2280 admin/mscan/mscan.php:3330
8611
+ msgid "MScan Option Settings: "
8612
+ msgstr ""
8613
+
8614
+ #: admin/mscan/mscan.php:2294 admin/mscan/mscan.php:2297
8615
+ msgid "Website Folders & Files To Scan: "
8616
+ msgstr ""
8617
+
8618
+ #: admin/mscan/mscan.php:2297 admin/mscan/mscan.php:2308
8619
+ #: admin/mscan/mscan.php:2335
8620
+ msgid "None"
8621
+ msgstr ""
8622
+
8623
+ #: admin/mscan/mscan.php:2305 admin/mscan/mscan.php:2308
8624
+ msgid "Excluded Folders: "
8625
+ msgstr ""
8626
+
8627
+ #: admin/mscan/mscan.php:2312
8628
+ msgid "Max File Size Limit to Scan: "
8629
+ msgstr ""
8630
+
8631
+ #: admin/mscan/mscan.php:2315
8632
+ msgid "Max Time Limit to Scan: "
8633
+ msgstr ""
8634
+
8635
+ #: admin/mscan/mscan.php:2318
8636
+ msgid "Scan Database: "
8637
+ msgstr ""
8638
+
8639
+ #: admin/mscan/mscan.php:2321
8640
+ msgid "Scan Skipped Files Only: "
8641
+ msgstr ""
8642
+
8643
+ #: admin/mscan/mscan.php:2324
8644
+ msgid "Automatically Delete /tmp Files: "
8645
+ msgstr ""
8646
+
8647
+ #: admin/mscan/mscan.php:2332 admin/mscan/mscan.php:2335
8648
+ msgid "Exclude /tmp Files: "
8649
+ msgstr ""
8650
+
8651
+ #: admin/mscan/mscan.php:2353
8652
+ msgid "Scheduled Scan Frequency: "
8653
+ msgstr ""
8654
+
8655
+ #: admin/mscan/mscan.php:2356 admin/mscan/mscan.php:3341
8656
+ msgid "WP Core|Plugin|Theme File Hashes: "
8657
+ msgstr ""
8658
+
8659
+ #: admin/mscan/mscan.php:2366
8660
+ msgid "WP Core Hash File Version: "
8661
+ msgstr ""
8662
+
8663
+ #: admin/mscan/mscan.php:2366
8664
+ msgid "WP Installed Version: "
8665
+ msgstr ""
8666
+
8667
+ #: admin/mscan/mscan.php:2371 admin/mscan/mscan.php:2391
8668
+ #: admin/mscan/mscan.php:2492
8669
+ msgid "Error|Problem: "
8670
+ msgstr ""
8671
+
8672
+ #: admin/mscan/mscan.php:2371
8673
+ msgid "The WP Core Hash File Does Not Exist"
8674
+ msgstr ""
8675
+
8676
+ #: admin/mscan/mscan.php:2385 admin/mscan/mscan.php:3344
8677
+ msgid "Plugin File Hashes: "
8678
+ msgstr ""
8679
+
8680
+ #: admin/mscan/mscan.php:2391
8681
+ msgid "The Plugin Hash File Does Not Exist"
8682
+ msgstr ""
8683
+
8684
+ #: admin/mscan/mscan.php:2451
8685
+ msgid ""
8686
+ "File hashes do not exist for this plugin. This plugin's files were not "
8687
+ "scanned. If you would like to scan this plugin's files then use the \"Upload "
8688
+ "Plugin Zip Files\" Form to upload a zip file for this plugin. Click the "
8689
+ "MScan 2.0 Read Me help button on the MScan 2.0 tab page and read the "
8690
+ "\"Upload Plugin Zip Files\" help section for more help info."
8691
+ msgstr ""
8692
+
8693
+ #: admin/mscan/mscan.php:2453
8694
+ msgid ""
8695
+ "File hashes do not exist for this theme. This theme's files were not "
8696
+ "scanned. If you would like to scan this themes's files then use the \"Upload "
8697
+ "Theme Zip Files\" Form to upload a zip file for this theme. Click the MScan "
8698
+ "2.0 Read Me help button on the MScan 2.0 tab page and read the \"Upload "
8699
+ "Theme Zip Files\" help section for more help info."
8700
+ msgstr ""
8701
+
8702
+ #: admin/mscan/mscan.php:2461 admin/mscan/mscan.php:2471
8703
+ #: admin/mscan/mscan.php:2477
8704
+ msgid " Plugin Hash File Version: "
8705
+ msgstr ""
8706
+
8707
+ #: admin/mscan/mscan.php:2461 admin/mscan/mscan.php:2471
8708
+ #: admin/mscan/mscan.php:2477 admin/mscan/mscan.php:2514
8709
+ #: admin/mscan/mscan.php:2523 admin/mscan/mscan.php:2529
8710
+ msgid " Installed Version: "
8711
+ msgstr ""
8712
+
8713
+ #: admin/mscan/mscan.php:2477
8714
+ msgid "No File Hashes for This Plugin"
8715
+ msgstr ""
8716
+
8717
+ #: admin/mscan/mscan.php:2486 admin/mscan/mscan.php:3352
8718
+ msgid "Theme File Hashes: "
8719
+ msgstr ""
8720
+
8721
+ #: admin/mscan/mscan.php:2492
8722
+ msgid "The Theme Hash File Does Not Exist"
8723
+ msgstr ""
8724
+
8725
+ #: admin/mscan/mscan.php:2514 admin/mscan/mscan.php:2523
8726
+ #: admin/mscan/mscan.php:2529
8727
+ msgid " Theme Hash File Version: "
8728
+ msgstr ""
8729
+
8730
+ #: admin/mscan/mscan.php:2529
8731
+ msgid "No File Hashes for This Theme"
8732
+ msgstr ""
8733
+
8734
+ #: admin/mscan/mscan.php:2541 admin/mscan/mscan.php:3363
8735
+ msgid "Scan Results "
8736
+ msgstr ""
8737
+
8738
+ #: admin/mscan/mscan.php:2544 admin/mscan/mscan.php:3366
8739
+ msgid ""
8740
+ "You can View, Ignore and Delete files detected as suspicious using the View|"
8741
+ "Ignore|Delete Suspicious Files Form on the MScan 2.0 tab page. Before "
8742
+ "deleting any files make a backup of those files on your computer not on your "
8743
+ "hosting account."
8744
+ msgstr ""
8745
+
8746
+ #: admin/mscan/mscan.php:2561 admin/mscan/mscan.php:3375
8747
+ msgid "File Hash or Pattern Match"
8748
+ msgstr ""
8749
+
8750
+ #: admin/mscan/mscan.php:2562 admin/mscan/mscan.php:2642
8751
+ #: admin/mscan/mscan.php:3376 admin/mscan/mscan.php:3424
8752
+ msgid "Scan Time"
8753
+ msgstr ""
8754
+
8755
+ #: admin/mscan/mscan.php:2624 admin/mscan/mscan.php:3410
8756
+ msgid ""
8757
+ "You can View, Ignore and Unignore suspicious DB Entries using the View|"
8758
+ "Ignore Suspicious DB Entries Form on the MScan 2.0 tab page. Before deleting "
8759
+ "any database data make a backup of your database."
8760
+ msgstr ""
8761
+
8762
+ #: admin/mscan/mscan.php:2641 admin/mscan/mscan.php:3423
8763
+ msgid "Pattern Match"
8764
+ msgstr ""
8765
+
8766
+ #: admin/mscan/mscan.php:2752 admin/mscan/mscan.php:2862
8767
+ msgid ""
8768
+ "The MScan Report was saved successfully. Saved MScan Reports can be viewed "
8769
+ "on the MScan Saved Reports tab page."
8770
+ msgstr ""
8771
+
8772
+ #: admin/mscan/mscan.php:2785
8773
+ msgid "The MScan Report was not saved"
8774
+ msgstr ""
8775
+
8776
+ #: admin/mscan/mscan.php:2785
8777
+ msgid ""
8778
+ "The maximum number of Reports that can be saved is 20 Reports. In order to "
8779
+ "save the current Report you will need to delete an older saved Report."
8780
+ msgstr ""
8781
+
8782
+ #: admin/mscan/mscan.php:2885
8783
+ msgid "MScan Saved Reports ~ "
8784
+ msgstr ""
8785
+
8786
+ #: admin/mscan/mscan.php:2885
8787
+ msgid "Saved reports can be viewed or deleted."
8788
+ msgstr ""
8789
+
8790
+ #: admin/mscan/mscan.php:2901
8791
+ msgid ""
8792
+ "No Saved MScan Reports To Display: No MScan Reports have been saved yet."
8793
+ msgstr ""
8794
+
8795
+ #: admin/mscan/mscan.php:2990
8796
+ msgid "MScan Saved Reports Form"
8797
+ msgstr ""
8798
+
8799
+ #: admin/mscan/mscan.php:2999
8800
+ msgid "Report Date"
8801
+ msgstr ""
8802
+
8803
+ #: admin/mscan/mscan.php:3000
8804
+ msgid "View Report"
8805
+ msgstr ""
8806
+
8807
+ #: admin/mscan/mscan.php:3001
8808
+ msgid "Delete Report"
8809
+ msgstr ""
8810
+
8811
+ #: admin/mscan/mscan.php:3022 admin/mscan/mscan.php:3048
8812
+ msgid "View|Delete Reports"
8813
+ msgstr ""
8814
+
8815
+ #: admin/mscan/mscan.php:3022
8816
+ msgid "Click OK to proceed or click Cancel"
8817
+ msgstr ""
8818
+
8819
+ #: admin/mscan/mscan.php:3067
8820
+ msgid "You did not select an MScan Report to view or delete"
8821
+ msgstr ""
8822
+
8823
+ #: admin/mscan/mscan.php:3067
8824
+ msgid ""
8825
+ "Click the checkbox for the MScan Report that you would like to view or "
8826
+ "delete and then click the View|Delete Reports button."
8827
+ msgstr ""
8828
+
8829
+ #: admin/mscan/mscan.php:3228
8830
+ msgid "Report: "
8831
+ msgstr ""
8832
+
8833
+ #: admin/mscan/mscan.php:3228
8834
+ msgid ""
8835
+ " has been deleted. Refresh/reload the page to see current MScan Saved "
8836
+ "Reports Form data."
8837
+ msgstr ""
8838
+
8839
+ #: admin/mscan/mscan.php:3236
8840
+ msgid ""
8841
+ "The MScan Saved Report scan data is displayed below the MScan Saved Reports "
8842
+ "Form."
8843
+ msgstr ""
8844
+
8845
  #: admin/security-log/security-log.php:40
8846
  msgid "BulletProof Security ~ Security Log"
8847
  msgstr ""
9278
  msgstr ""
9279
 
9280
  #: admin/security-log/security-log.php:383
9281
+ #: admin/security-log/security-log.php:516 admin/wizard/wizard.php:305
9282
+ #: admin/wizard/wizard.php:311 admin/wizard/wizard.php:317
9283
+ #: admin/wizard/wizard.php:323 admin/wizard/wizard.php:329
9284
  msgid "Error: The "
9285
  msgstr ""
9286
 
11239
  msgid "Link Whisper Premium Plugin wp-admin BPSQSE AutoWhitelist successful"
11240
  msgstr ""
11241
 
11242
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11243
  msgid ""
11244
  "Custom additional htaccess code was found in your current root htaccess "
11245
  "file. Your root and wp-admin htaccess files have been backed up and zipped "
11248
  "files.zip file to your computer."
11249
  msgstr ""
11250
 
11251
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11252
  msgid "Click this forum link: "
11253
  msgstr ""
11254
 
11255
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11256
  msgid "Setup Wizard Root and wp-admin htaccess File Backup"
11257
  msgstr ""
11258
 
11259
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11260
  msgid " for help information about what this means and what to do."
11261
  msgstr ""
11262
 
11263
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11264
  msgid ""
11265
  " and select the Zip File Download Fix On setting for the Zile File Download "
11266
  "Fix option. You should now be able to download the htaccess-files.zip file. "
11268
  "above for what to do next."
11269
  msgstr ""
11270
 
11271
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11272
  msgid "Download htaccess-files.zip File"
11273
  msgstr ""
11274
 
11275
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11276
  msgid "Additional Plain Text htaccess file backups: "
11277
  msgstr ""
11278
 
11279
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11280
  msgid "Root htaccess File: "
11281
  msgstr ""
11282
 
11283
+ #: admin/wizard/wizard-backup.php:249 admin/wizard/wizard-backup.php:290
11284
  msgid "wp-admin htaccess File: "
11285
  msgstr ""
11286
 
11306
  msgstr ""
11307
 
11308
  #: admin/wizard/wizard-functions.php:111 admin/wizard/wizard-functions.php:633
11309
+ #: admin/wizard/wizard-functions.php:729
11310
  msgid ""
11311
  "If your Server configuration is DSO you must first make some one-time manual "
11312
  "changes to your website before running the Setup Wizard. Please click this "
11314
  msgstr ""
11315
 
11316
  #: admin/wizard/wizard-functions.php:111 admin/wizard/wizard-functions.php:633
11317
+ #: admin/wizard/wizard-functions.php:729 admin/wizard/wizard.php:221
11318
+ #: admin/wizard/wizard.php:305 admin/wizard/wizard.php:311
11319
+ #: admin/wizard/wizard.php:317 admin/wizard/wizard.php:323
11320
+ #: admin/wizard/wizard.php:329
11321
  msgid "DSO Setup Steps"
11322
  msgstr ""
11323
 
11358
  msgstr ""
11359
 
11360
  #: admin/wizard/wizard-functions.php:607 admin/wizard/wizard-functions.php:616
11361
+ #: admin/wizard/wizard-functions.php:825 admin/wizard/wizard.php:655
11362
+ #: admin/wizard/wizard.php:693 admin/wizard/wizard.php:751
11363
+ #: admin/wizard/wizard.php:791 admin/wizard/wizard.php:843
11364
+ #: admin/wizard/wizard.php:941 includes/general-functions.php:1090
11365
  msgid " DB Option created or updated Successfully!"
11366
  msgstr ""
11367
 
11397
  "allow wp-admin htaccess files."
11398
  msgstr ""
11399
 
11400
+ #: admin/wizard/wizard-functions.php:666
11401
  msgid " wp-admin .htaccess File backup Successful!"
11402
  msgstr ""
11403
 
11404
+ #: admin/wizard/wizard-functions.php:727
11405
  msgid "The default.htaccess Master htaccess file was created successfully."
11406
  msgstr ""
11407
 
11408
+ #: admin/wizard/wizard-functions.php:729
11409
  msgid "Error: The default.htaccess Master htaccess file cannot be created."
11410
  msgstr ""
11411
 
11412
+ #: admin/wizard/wizard-functions.php:826 admin/wizard/wizard.php:466
11413
  msgid " Folder created Successfully!"
11414
  msgstr ""
11415
 
11416
+ #: admin/wizard/wizard-functions.php:933
11417
  msgid ""
11418
  "Security Log User Agent Filter Check Successful! 0 User Agent Filters to "
11419
  "update."
11420
  msgstr ""
11421
 
11422
+ #: admin/wizard/wizard-functions.php:943
11423
  msgid "Security Log User Agent Filter "
11424
  msgstr ""
11425
 
11426
+ #: admin/wizard/wizard-functions.php:943
11427
  msgid " created or updated Successfully!"
11428
  msgstr ""
11429
 
11445
  "file, but was NOT found in BPS Custom Code. "
11446
  msgstr ""
11447
 
11448
+ #: admin/wizard/wizard.php:160 includes/hud-dismiss-functions.php:354
11449
  msgid ""
11450
  " for the steps to fix this Wordfence problem before running the Setup Wizard."
11451
  msgstr ""
11456
  "Code"
11457
  msgstr ""
11458
 
11459
+ #: admin/wizard/wizard.php:194 admin/wizard/wizard.php:361
11460
  msgid " DB Table created Successfully!"
11461
  msgstr ""
11462
 
11463
+ #: admin/wizard/wizard.php:197 admin/wizard/wizard.php:364
11464
  msgid "Error: Unable to create DB Table "
11465
  msgstr ""
11466
 
11531
  "maximum memory limit setting allowed by your Host."
11532
  msgstr ""
11533
 
11534
+ #: admin/wizard/wizard.php:258 includes/functions.php:1206
11535
  msgid ""
11536
  "mod_authz_core is Loaded|Order, Allow, Deny directives are supported|BC: Yes|"
11537
  "IfModule: Yes"
11538
  msgstr ""
11539
 
11540
+ #: admin/wizard/wizard.php:273
11541
  msgid ""
11542
  "Enable|Disable htaccess Files Option set to Enabled: mod_access_compat "
11543
  "htaccess files will be created."
11544
  msgstr ""
11545
 
11546
+ #: admin/wizard/wizard.php:275
11547
  msgid ""
11548
  "mod_access_compat is Loaded|Order, Allow, Deny directives are supported|"
11549
  "IfModule: No"
11550
  msgstr ""
11551
 
11552
+ #: admin/wizard/wizard.php:279
11553
  msgid ""
11554
  "Enable|Disable htaccess Files Option set to Disabled: All BPS htaccess "
11555
  "features will be disabled."
11556
  msgstr ""
11557
 
11558
+ #: admin/wizard/wizard.php:303 admin/wizard/wizard.php:309
11559
+ #: admin/wizard/wizard.php:315 admin/wizard/wizard.php:321
11560
+ #: admin/wizard/wizard.php:327
11561
  msgid "Pass! The "
11562
  msgstr ""
11563
 
11564
+ #: admin/wizard/wizard.php:303 admin/wizard/wizard.php:309
11565
  msgid " Folder is writable."
11566
  msgstr ""
11567
 
11568
+ #: admin/wizard/wizard.php:305 admin/wizard/wizard.php:311
11569
  msgid ""
11570
  " Folder is NOT writable. If your Server type is DSO and the WP Filesystem "
11571
  "API Method is NOT \"direct\" you can use the Setup Wizard, but you must "
11573
  "Setup Wizard. Please click this Forum Link for instructions: "
11574
  msgstr ""
11575
 
11576
+ #: admin/wizard/wizard.php:305 admin/wizard/wizard.php:311
11577
  msgid ""
11578
  " If your Server type is CGI check the folder permissions. Folder permissions "
11579
  "should be either 755 or 705."
11580
  msgstr ""
11581
 
11582
+ #: admin/wizard/wizard.php:315 admin/wizard/wizard.php:321
11583
+ #: admin/wizard/wizard.php:327
11584
  msgid " File is writable."
11585
  msgstr ""
11586
 
11587
+ #: admin/wizard/wizard.php:317 admin/wizard/wizard.php:323
11588
+ #: admin/wizard/wizard.php:329
11589
  msgid ""
11590
  " File is NOT writable. If your Server type is DSO and the WP Filesystem API "
11591
  "Method is NOT \"direct\" you can use the Setup Wizard, but you must first "
11593
  "Wizard. Please click this Forum Link for instructions: "
11594
  msgstr ""
11595
 
11596
+ #: admin/wizard/wizard.php:317 admin/wizard/wizard.php:323
11597
+ #: admin/wizard/wizard.php:329
11598
  msgid ""
11599
  " If your Server type is CGI check the file permissions. File permissions "
11600
  "should be either 644 or 604."
11601
  msgstr ""
11602
 
11603
+ #: admin/wizard/wizard.php:403
11604
  msgid "BPS Setup Verification & Error Checks"
11605
  msgstr ""
11606
 
11607
+ #: admin/wizard/wizard.php:405
11608
  msgid ""
11609
  "If you see all Green font messages displayed below, the Setup Wizard setup "
11610
  "completed successfully."
11611
  msgstr ""
11612
 
11613
+ #: admin/wizard/wizard.php:405
11614
  msgid ""
11615
  "If you see any Red font or Blue font messages displayed below, click the "
11616
  "Read Me help button above and read the \"Notes\" help section."
11617
  msgstr ""
11618
 
11619
+ #: admin/wizard/wizard.php:405
11620
  msgid ""
11621
  "Click the Read Me help button above for a list of recommended BPS Video "
11622
  "Tutorials to watch."
11623
  msgstr ""
11624
 
11625
+ #: admin/wizard/wizard.php:412 admin/wizard/wizard.php:1200
11626
  msgid "AutoFix (AutoWhitelist|AutoSetup|AutoCleanup)"
11627
  msgstr ""
11628
 
11629
+ #: admin/wizard/wizard.php:434
11630
  msgid "BulletProof Security Database Tables Setup"
11631
  msgstr ""
11632
 
11633
+ #: admin/wizard/wizard.php:463
11634
  msgid "BulletProof Security Core Folders Setup"
11635
  msgstr ""
11636
 
11637
+ #: admin/wizard/wizard.php:467
11638
  msgid "Error: Unable to create Folder "
11639
  msgstr ""
11640
 
11641
+ #: admin/wizard/wizard.php:495
11642
  msgid "BulletProof Security Core Files Setup"
11643
  msgstr ""
11644
 
11645
+ #: admin/wizard/wizard.php:498
11646
  msgid " File created or updated Successfully!"
11647
  msgstr ""
11648
 
11649
+ #: admin/wizard/wizard.php:499
11650
  msgid "Error: Unable to create or update File "
11651
  msgstr ""
11652
 
11653
+ #: admin/wizard/wizard.php:650
11654
  msgid "BulletProof Security MScan Malware Scanner Setup"
11655
  msgstr ""
11656
 
11657
+ #: admin/wizard/wizard.php:671
11658
  msgid "BulletProof Security DB Backup Setup"
11659
  msgstr ""
11660
 
11661
+ #: admin/wizard/wizard.php:690
11662
  msgid "BulletProof Security Hidden Plugin Folders|Files (HPF) Setup"
11663
  msgstr ""
11664
 
11665
+ #: admin/wizard/wizard.php:723
11666
  msgid ""
11667
  "Hidden Plugin Folders|Files (HPF) DB Options created or updated Successfully!"
11668
  msgstr ""
11669
 
11670
+ #: admin/wizard/wizard.php:726
11671
  msgid "BulletProof Security Security Log User Agent Filter Setup"
11672
  msgstr ""
11673
 
11674
+ #: admin/wizard/wizard.php:747
11675
  msgid "BulletProof Security Email Alerting & Log File Options Setup"
11676
  msgstr ""
11677
 
11678
+ #: admin/wizard/wizard.php:788
11679
  msgid "BulletProof Security Login Security & Monitoring Options Setup"
11680
  msgstr ""
11681
 
11682
+ #: admin/wizard/wizard.php:838
11683
  msgid "BulletProof Security JTC-Lite Options Setup"
11684
  msgstr ""
11685
 
11686
+ #: admin/wizard/wizard.php:938
11687
  msgid "BulletProof Security Force Strong Passwords Options Setup"
11688
  msgstr ""
11689
 
11690
+ #: admin/wizard/wizard.php:992
11691
  msgid "The Setup Wizard has completed BPS Setup."
11692
  msgstr ""
11693
 
11694
+ #: admin/wizard/wizard.php:992
11695
  msgid ""
11696
  "Check the \"BPS Setup Verification & Error Checks\" section below for any "
11697
  "errors in Red Font."
11698
  msgstr ""
11699
 
11700
+ #: admin/wizard/wizard.php:992
11701
  msgid ""
11702
  "Your existing root htaccess file has been backed up here: /wp-content/bps-"
11703
  "backup/master-backups/root.htaccess-[Date-Timestamp]. If you run into a "
11705
  "forum topic: "
11706
  msgstr ""
11707
 
11708
+ #: admin/wizard/wizard.php:992
11709
  msgid "Setup Wizard Root htaccess File Backup"
11710
  msgstr ""
11711
 
11712
+ #: admin/wizard/wizard.php:1012
11713
  msgid "Setup Wizard Completion Time: "
11714
  msgstr ""
11715
 
11716
+ #: admin/wizard/wizard.php:1029
11717
  msgid "BulletProof Security ~ Setup Wizard"
11718
  msgstr ""
11719
 
11720
+ #: admin/wizard/wizard.php:1084 admin/wizard/wizard.php:1694
11721
+ #: admin/wizard/wizard.php:1696
11722
  msgid "Setup Wizard Export|Import"
11723
  msgstr ""
11724
 
11725
+ #: admin/wizard/wizard.php:1095
11726
  msgid "htaccess Files Disabled Notice: "
11727
  msgstr ""
11728
 
11729
+ #: admin/wizard/wizard.php:1095
11730
  msgid ""
11731
  "BPS has detected that htaccess files cannot be used on your website/server. "
11732
  "Click this "
11733
  msgstr ""
11734
 
11735
+ #: admin/wizard/wizard.php:1095
11736
  msgid ""
11737
  " link for more information before running the Wizards. If you intentionally "
11738
  "disabled htaccess files then disregard this Notice."
11739
  msgstr ""
11740
 
11741
+ #: admin/wizard/wizard.php:1107
11742
  msgid "Setup Wizard ~ "
11743
  msgstr ""
11744
 
11745
+ #: admin/wizard/wizard.php:1107
11746
  msgid "One-Click Complete Setup"
11747
  msgstr ""
11748
 
11749
+ #: admin/wizard/wizard.php:1124
11750
  msgid "Recommended Video Tutorials: "
11751
  msgstr ""
11752
 
11753
+ #: admin/wizard/wizard.php:1129
11754
  msgid "Security Log Video Tutorial"
11755
  msgstr ""
11756
 
11757
+ #: admin/wizard/wizard.php:1132
11758
  msgid "Setup Wizard Steps: "
11759
  msgstr ""
11760
 
11761
+ #: admin/wizard/wizard.php:1132
11762
  msgid "1. Click the Setup Wizard button."
11763
  msgstr ""
11764
 
11765
+ #: admin/wizard/wizard.php:1136
11766
  msgid ""
11767
  "Setup Wizard Pre-Installation Checks are automatically performed and "
11768
  "displayed on the Setup Wizard page. Green font messages mean everything is "
11773
  "to be fixed before running the Setup Wizard."
11774
  msgstr ""
11775
 
11776
+ #: admin/wizard/wizard.php:1136
11777
  msgid ""
11778
  "You can re-run the Setup Wizard again at any time. Your existing settings "
11779
  "will NOT be overwritten and will be re-saved. Any new or additional settings "
11780
  "that the Setup Wizard finds on your website will be saved/setup."
11781
  msgstr ""
11782
 
11783
+ #: admin/wizard/wizard.php:1136
11784
  msgid ""
11785
  "When the Setup Wizard has completed you will see \"The Setup Wizard has "
11786
  "completed BPS Setup.\""
11787
  msgstr ""
11788
 
11789
+ #: admin/wizard/wizard.php:1136
11790
  msgid ""
11791
  "Your existing Root and wp-admin htaccess files are backed up before new Root "
11792
  "and wp-admin htaccess files are created by the Setup Wizard. The BPS backup "
11793
  "folder is here: "
11794
  msgstr ""
11795
 
11796
+ #: admin/wizard/wizard.php:1139
11797
  msgid ""
11798
  " and the backed up htaccess file names are: root.htaccess and wpadmin."
11799
  "htaccess."
11800
  msgstr ""
11801
 
11802
+ #: admin/wizard/wizard.php:1149
11803
  msgid "Setup Wizard & Overview Video Tutorial"
11804
  msgstr ""
11805
 
11806
+ #: admin/wizard/wizard.php:1176
11807
  msgid "Setup Wizard Options ~ "
11808
  msgstr ""
11809
 
11810
+ #: admin/wizard/wizard.php:1176
11811
  msgid ""
11812
  "Click the Setup Wizard Options Read Me help button for help info about each "
11813
  "option setting"
11814
  msgstr ""
11815
 
11816
+ #: admin/wizard/wizard.php:1190
11817
  msgid "Forum Help Links:"
11818
  msgstr ""
11819
 
11820
+ #: admin/wizard/wizard.php:1194
11821
  msgid "Go Daddy Managed WordPress Hosting (GDMW)"
11822
  msgstr ""
11823
 
11824
+ #: admin/wizard/wizard.php:1195 admin/wizard/wizard.php:1200
11825
  msgid "Enable|Disable htaccess Files"
11826
  msgstr ""
11827
 
11828
+ #: admin/wizard/wizard.php:1196
11829
  msgid "AutoFix Forum Topic"
11830
  msgstr ""
11831
 
11832
+ #: admin/wizard/wizard.php:1197
11833
  msgid "GDPR Compliance Forum Topic"
11834
  msgstr ""
11835
 
11836
+ #: admin/wizard/wizard.php:1200
11837
  msgid ""
11838
  "Setup Wizard AutoFix is turned On by default. When AutoFix is turned On the "
11839
  "Setup Wizard will automatically create htaccess whitelist rules in BPS "
11854
  "AutoFix Debug information so that we can figure out what the problem is."
11855
  msgstr ""
11856
 
11857
+ #: admin/wizard/wizard.php:1200
11858
  msgid "GDPR Compliance (IP Address Logging On|Off)"
11859
  msgstr ""
11860
 
11861
+ #: admin/wizard/wizard.php:1200
11862
  msgid ""
11863
  "The GDPR Compliance option setting is set to Off by default. Choosing the "
11864
  "GDPR Compliance On option setting will disable IP address logging in all BPS "
11872
  "at the top of this Read Me help window."
11873
  msgstr ""
11874
 
11875
+ #: admin/wizard/wizard.php:1200 admin/wizard/wizard.php:1242
11876
  msgid "Go Daddy Managed WordPress Hosting (GDMW):"
11877
  msgstr ""
11878
 
11879
+ #: admin/wizard/wizard.php:1200
11880
  msgid ""
11881
  "This option is ONLY for a special type of Go Daddy Hosting account called "
11882
  "\"Managed WordPress Hosting\" and is NOT for regular/standard Go Daddy "
11885
  "section above for more information."
11886
  msgstr ""
11887
 
11888
+ #: admin/wizard/wizard.php:1200 admin/wizard/wizard.php:1256
11889
  msgid "Enable|Disable htaccess Files:"
11890
  msgstr ""
11891
 
11892
+ #: admin/wizard/wizard.php:1200
11893
  msgid "Before changing this option setting, click the "
11894
  msgstr ""
11895
 
11896
+ #: admin/wizard/wizard.php:1200
11897
  msgid ""
11898
  " Forum Help Link at the top of this Read Me help window to find out exactly "
11899
  "what this option setting does and when it should or should not be used. "
11901
  "htaccess Files Enabled: Will enable all BPS htaccess freatures and files."
11902
  msgstr ""
11903
 
11904
+ #: admin/wizard/wizard.php:1200
11905
  msgid "Enable|Disable wp-admin BulletProof Mode"
11906
  msgstr ""
11907
 
11908
+ #: admin/wizard/wizard.php:1200
11909
  msgid ""
11910
  "The default setting is already set to: wp-admin BulletProof Mode Enabled. If "
11911
  "you would like to disable wp-admin BulletProof Mode select wp-admin "
11912
  "BulletProof Mode Disabled."
11913
  msgstr ""
11914
 
11915
+ #: admin/wizard/wizard.php:1200 admin/wizard/wizard.php:1285
11916
  msgid "Zip File Download Fix (Incapsula, Proxy, Other Cause):"
11917
  msgstr ""
11918
 
11919
+ #: admin/wizard/wizard.php:1200
11920
  msgid ""
11921
  "This option should only be set to On if you are seeing a 403 error and/or "
11922
  "unable to download these Zip files: Custom Code Export Zip file, Login "
11932
  "Firewall again."
11933
  msgstr ""
11934
 
11935
+ #: admin/wizard/wizard.php:1200 admin/wizard/wizard.php:1299
11936
  msgid "Multisite Hide|Display System Info Page for Subsites:"
11937
  msgstr ""
11938
 
11939
+ #: admin/wizard/wizard.php:1200
11940
  msgid ""
11941
  "This option is for Network|Multisite sites only. Choosing Hide System Info "
11942
  "Page will hide the System Info menu link under the BPS navigational menus. "
11944
  "under the BPS navigational mensus."
11945
  msgstr ""
11946
 
11947
+ #: admin/wizard/wizard.php:1200 admin/wizard/wizard.php:1310
11948
  msgid "Network|Multisite Sitewide Login Security Settings"
11949
  msgstr ""
11950
 
11951
+ #: admin/wizard/wizard.php:1200
11952
  msgid ""
11953
  "This option is for Network|Multisite sites only. This is an independent "
11954
  "option Form that creates and saves Login Security DB option settings for all "
11965
  "Reset, Sort DB Rows: Ascending - Show Oldest Login First."
11966
  msgstr ""
11967
 
11968
+ #: admin/wizard/wizard.php:1200
11969
  msgid "Network|Multisite Sitewide JTC-Lite Settings"
11970
  msgstr ""
11971
 
11972
+ #: admin/wizard/wizard.php:1200
11973
  msgid ""
11974
  "This option is for Network|Multisite sites only. This is an independent "
11975
  "option Form that creates and saves JTC-Lite DB option settings for all "
11984
  "box on the Login Form."
11985
  msgstr ""
11986
 
11987
+ #: admin/wizard/wizard.php:1200 admin/wizard/wizard.php:1328
11988
  msgid "Network|Multisite Sitewide Force Strong Passwords Settings"
11989
  msgstr ""
11990
 
11991
+ #: admin/wizard/wizard.php:1200
11992
  msgid ""
11993
  "This option is for Network|Multisite sites ONLY. This is an independent "
11994
  "option Form that creates and saves FSP DB option settings for all Network "
12001
  "all checked and Displayed Message/Error Message: default FSP message."
12002
  msgstr ""
12003
 
12004
+ #: admin/wizard/wizard.php:1214
12005
  msgid "AutoFix (AutoWhitelist|AutoSetup|AutoCleanup):"
12006
  msgstr ""
12007
 
12008
+ #: admin/wizard/wizard.php:1216
12009
  msgid "AutoFix On"
12010
  msgstr ""
12011
 
12012
+ #: admin/wizard/wizard.php:1217
12013
  msgid "AutoFix Off"
12014
  msgstr ""
12015
 
12016
+ #: admin/wizard/wizard.php:1228
12017
  msgid "GDPR Compliance (IP Address Logging On|Off):"
12018
  msgstr ""
12019
 
12020
+ #: admin/wizard/wizard.php:1230
12021
  msgid "GDPR Compliance Off"
12022
  msgstr ""
12023
 
12024
+ #: admin/wizard/wizard.php:1231
12025
  msgid "GDPR Compliance On"
12026
  msgstr ""
12027
 
12028
+ #: admin/wizard/wizard.php:1244
12029
  msgid "No (default setting)"
12030
  msgstr ""
12031
 
12032
+ #: admin/wizard/wizard.php:1245
12033
  msgid "Yes (ONLY if you have Managed WordPress Hosting)"
12034
  msgstr ""
12035
 
12036
+ #: admin/wizard/wizard.php:1257
12037
  msgid ""
12038
  "CAUTION: Click the Read Me help button before changing this option setting"
12039
  msgstr ""
12040
 
12041
+ #: admin/wizard/wizard.php:1259
12042
  msgid "htaccess Files Enabled"
12043
  msgstr ""
12044
 
12045
+ #: admin/wizard/wizard.php:1260
12046
  msgid "htaccess Files Disabled"
12047
  msgstr ""
12048
 
12049
+ #: admin/wizard/wizard.php:1271
12050
  msgid "Enable|Disable wp-admin BulletProof Mode:"
12051
  msgstr ""
12052
 
12053
+ #: admin/wizard/wizard.php:1273
12054
  msgid "wp-admin BulletProof Mode Enabled"
12055
  msgstr ""
12056
 
12057
+ #: admin/wizard/wizard.php:1274
12058
  msgid "wp-admin BulletProof Mode Disabled"
12059
  msgstr ""
12060
 
12061
+ #: admin/wizard/wizard.php:1287
12062
  msgid "Zip File Download Fix Off"
12063
  msgstr ""
12064
 
12065
+ #: admin/wizard/wizard.php:1288
12066
  msgid "Zip File Download Fix On"
12067
  msgstr ""
12068
 
12069
+ #: admin/wizard/wizard.php:1301
12070
  msgid "Display System Info Page"
12071
  msgstr ""
12072
 
12073
+ #: admin/wizard/wizard.php:1302
12074
  msgid "Hide System Info Page"
12075
  msgstr ""
12076
 
12077
+ #: admin/wizard/wizard.php:1319
12078
  msgid "Network|Multisite Sitewide JTC Anti-Spam|Anti-Hacker Settings"
12079
  msgstr ""
12080
 
12081
+ #: admin/wizard/wizard.php:1360
12082
  msgid ""
12083
  "The Zip File Download Fix option is set to On. This option should only be "
12084
  "set to On if you are unable to download these Zip files: Custom Code Export "
12086
  "htaccess file backup Zip file."
12087
  msgstr ""
12088
 
12089
+ #: admin/wizard/wizard.php:1373
12090
  msgid "The Zip File Download Fix option is set to Off."
12091
  msgstr ""
12092
 
12093
+ #: admin/wizard/wizard.php:1397
12094
  msgid "Multisite Hide|Display System Info Page for Subsites option saved."
12095
  msgstr ""
12096
 
12097
+ #: admin/wizard/wizard.php:1412
12098
  msgid ""
12099
  "Error: Your Network site exceeds the default WP criteria for a large network "
12100
  "site. Either you have more than 10,000 users or more than 10,000 sites. "
12102
  "org for assistance."
12103
  msgstr ""
12104
 
12105
+ #: admin/wizard/wizard.php:1419
12106
  msgid " LSM DB Options created or updated Successfully!"
12107
  msgstr ""
12108
 
12109
+ #: admin/wizard/wizard.php:1492 admin/wizard/wizard.php:1615
12110
  msgid ""
12111
  "Error: Your Network site exceeds the default WP criteria for a large network "
12112
  "site. Either you have more than 10,000 users or more than 10,000 sites. "
12114
  "line: Setup Wizard Options Large Network Site Help."
12115
  msgstr ""
12116
 
12117
+ #: admin/wizard/wizard.php:1499
12118
  msgid " JTC DB Options created or updated Successfully!"
12119
  msgstr ""
12120
 
12121
+ #: admin/wizard/wizard.php:1622
12122
  msgid " FSP DB Options created or updated Successfully!"
12123
  msgstr ""
12124
 
12125
+ #: admin/wizard/wizard.php:1689
12126
  msgid "Setup Wizard Export|Import ~ "
12127
  msgstr ""
12128
 
12129
+ #: admin/wizard/wizard.php:1689
12130
  msgid "Export or Import BPS plugin option settings."
12131
  msgstr ""
12132
 
12133
+ #: admin/wizard/wizard.php:1706
12134
  msgid "GDMW Hosting"
12135
  msgstr ""
12136
 
12137
+ #: admin/wizard/wizard.php:1708
12138
  msgid "Setup Wizard Export"
12139
  msgstr ""
12140
 
12141
+ #: admin/wizard/wizard.php:1708
12142
  msgid ""
12143
  "The Setup Wizard Export feature exports all BPS plugin option settings "
12144
  "except for website specific settings that need to be setup by running the "
12146
  "new website. The name of the exported zip file is: bps-settings-export.zip"
12147
  msgstr ""
12148
 
12149
+ #: admin/wizard/wizard.php:1708
12150
  msgid "Setup Wizard Import"
12151
  msgstr ""
12152
 
12153
+ #: admin/wizard/wizard.php:1708
12154
  msgid ""
12155
  "To import BPS plugin option settings click the Choose File button, navigate "
12156
  "to where you downloaded/saved the bps-settings-export.zip file on your "
12164
  "code or remove it from BPS Custom Code."
12165
  msgstr ""
12166
 
12167
+ #: admin/wizard/wizard.php:1708
12168
  msgid "Network|Multisite Help Info"
12169
  msgstr ""
12170
 
12171
+ #: admin/wizard/wizard.php:1708
12172
  msgid ""
12173
  "Setup Wizard Export|Import works for Network|Multisite site types, but only "
12174
  "the Primary site's BPS plugin option settings are exported and imported. BPS "
12180
  "option settings from the Primary site to all Subsites."
12181
  msgstr ""
12182
 
12183
+ #: admin/wizard/wizard.php:1715
12184
  msgid ""
12185
  "Clicking OK will Import BPS plugin settings from the bps-settings-export.zip "
12186
  "file on your computer."
12187
  msgstr ""
12188
 
12189
+ #: admin/wizard/wizard.php:1715
12190
  msgid "Click OK to Import BPS plugin settings or click Cancel."
12191
  msgstr ""
12192
 
12193
+ #: admin/wizard/wizard.php:1724
12194
  msgid ""
12195
  "Clicking OK will Export your BPS plugin settings into the bps-settings-"
12196
  "export.zip file, which you can then download to your computer by clicking "
12198
  "message."
12199
  msgstr ""
12200
 
12201
+ #: admin/wizard/wizard.php:1724
12202
  msgid "Click OK to Export BPS plugin settings or click Cancel."
12203
  msgstr ""
12204
 
12205
+ #: admin/wizard/wizard.php:1859
12206
  msgid ""
12207
  "BPS plugin option settings exported successfully. Click the Download Zip "
12208
  "Export button to download the Setup Wizard Export zip file: bps-settings-"
12209
  "export.zip."
12210
  msgstr ""
12211
 
12212
+ #: admin/wizard/wizard.php:1859
12213
  msgid ""
12214
  " and select the Zip File Download Fix On setting for the Zile File Download "
12215
  "Fix option. You should now be able to download the bps-settings-export.zip "
12216
  "file."
12217
  msgstr ""
12218
 
12219
+ #: admin/wizard/wizard.php:2035 admin/wizard/wizard.php:2067
12220
  msgid "BPS plugin settings imported successfully."
12221
  msgstr ""
12222
 
12223
+ #: admin/wizard/wizard.php:2035 admin/wizard/wizard.php:2067
12224
  msgid "IMPORTANT: Run the BPS Setup Wizard now."
12225
  msgstr ""
12226
 
12227
+ #: admin/wizard/wizard.php:2035 admin/wizard/wizard.php:2067
12228
  msgid ""
12229
  "After running the Setup Wizard go to the BPS Security > htaccess Core > "
12230
  "Custom Code tab page and check all of your custom htaccess code for any "
12234
  "code or remove it from BPS Custom Code."
12235
  msgstr ""
12236
 
12237
+ #: admin/wizard/wizard.php:2081
12238
  msgid ""
12239
  "Either the bps-settings-export.zip file has not been selected yet for Import "
12240
  "or the file "
12241
  msgstr ""
12242
 
12243
+ #: admin/wizard/wizard.php:2081
12244
  msgid ""
12245
  " is not a valid Setup Wizard Export file or file name. The BPS Setup Wizard "
12246
  "Import feature only allows the bps-settings-export.zip file to be Uploaded/"
12247
  "Imported. The filename MUST be named: bps-settings-export.zip."
12248
  msgstr ""
12249
 
12250
+ #: bulletproof-security.php:158
12251
  msgid "Uninstall Options"
12252
  msgstr ""
12253
 
12254
+ #: bulletproof-security.php:180
12255
  msgid "Forum - Support"
12256
  msgstr ""
12257
 
12258
+ #: bulletproof-security.php:181
12259
  msgid "Upgrade"
12260
  msgstr ""
12261
 
12297
 
12298
  #: includes/functions.php:349 includes/functions.php:587
12299
  #: includes/functions.php:654 includes/hud-autofix-setup.php:70
12300
+ #: includes/hud-dismiss-functions.php:554
12301
  msgid "Go to the "
12302
  msgstr ""
12303
 
12343
  msgstr ""
12344
 
12345
  #: includes/functions.php:387 includes/hud-autofix-setup.php:70
12346
+ #: includes/hud-dismiss-functions.php:74 includes/hud-dismiss-functions.php:108
12347
+ #: includes/hud-dismiss-functions.php:141
12348
+ #: includes/hud-dismiss-functions.php:354
12349
+ #: includes/hud-dismiss-functions.php:359
12350
+ #: includes/hud-dismiss-functions.php:398
12351
+ #: includes/hud-dismiss-functions.php:403
12352
+ #: includes/hud-dismiss-functions.php:461
12353
+ #: includes/hud-dismiss-functions.php:503
12354
  msgid ""
12355
  "To Dismiss this Notice click the Dismiss Notice button below. To Reset "
12356
  "Dismiss Notices click the Reset|Recheck Dismiss Notices button on the Custom "
12358
  msgstr ""
12359
 
12360
  #: includes/functions.php:387 includes/hud-autofix-setup.php:70
12361
+ #: includes/hud-dismiss-functions.php:74 includes/hud-dismiss-functions.php:108
12362
+ #: includes/hud-dismiss-functions.php:141
12363
+ #: includes/hud-dismiss-functions.php:206
12364
+ #: includes/hud-dismiss-functions.php:221
12365
+ #: includes/hud-dismiss-functions.php:227
12366
+ #: includes/hud-dismiss-functions.php:233
12367
+ #: includes/hud-dismiss-functions.php:239
12368
+ #: includes/hud-dismiss-functions.php:253
12369
+ #: includes/hud-dismiss-functions.php:259
12370
+ #: includes/hud-dismiss-functions.php:264
12371
+ #: includes/hud-dismiss-functions.php:354
12372
+ #: includes/hud-dismiss-functions.php:359
12373
+ #: includes/hud-dismiss-functions.php:398
12374
+ #: includes/hud-dismiss-functions.php:403
12375
+ #: includes/hud-dismiss-functions.php:461
12376
+ #: includes/hud-dismiss-functions.php:503
12377
+ #: includes/hud-dismiss-functions.php:593
12378
+ #: includes/hud-dismiss-functions.php:638
12379
+ #: includes/hud-dismiss-functions.php:681
12380
+ #: includes/hud-dismiss-functions.php:719
12381
+ #: includes/hud-dismiss-functions.php:757
12382
+ #: includes/hud-dismiss-functions.php:809
12383
+ #: includes/hud-dismiss-functions.php:857
12384
  msgid "Dismiss Notice"
12385
  msgstr ""
12386
 
12485
  "ERROR: wp_remote_get() function is blocked or unable to get the URL path"
12486
  msgstr ""
12487
 
12488
+ #: includes/functions.php:1190
 
 
 
 
12489
  msgid ""
12490
  "mod_access_compat is Loaded|Order, Allow, Deny directives are supported|"
12491
  "IfModule: Yes"
12492
  msgstr ""
12493
 
12494
+ #: includes/functions.php:1198
12495
  msgid "mod_access_compat is not Loaded|IfModule: Yes"
12496
  msgstr ""
12497
 
12498
+ #: includes/functions.php:1211
12499
  msgid ""
12500
  "mod_authz_core is Loaded|Order, Allow, Deny directives are not supported|BC: "
12501
  "No|IfModule: Yes"
12502
  msgstr ""
12503
 
12504
+ #: includes/functions.php:1216
12505
  msgid "mod_authz_core is not Loaded|IfModule: Yes"
12506
  msgstr ""
12507
 
12508
+ #: includes/functions.php:1225
12509
  msgid ""
12510
  "mod_authz_host is Loaded|Order, Allow, Deny directives are supported|BC: Yes|"
12511
  "IfModule: Yes"
12512
  msgstr ""
12513
 
12514
+ #: includes/functions.php:1230
12515
  msgid ""
12516
  "mod_authz_host is Loaded|Order, Allow, Deny directives are not supported|BC: "
12517
  "No|IfModule: Yes"
12518
  msgstr ""
12519
 
12520
+ #: includes/functions.php:1235
12521
  msgid "mod_authz_host is not Loaded|IfModule: Yes"
12522
  msgstr ""
12523
 
12524
+ #: includes/functions.php:1242
12525
  msgid "mod_rewrite Module is Loaded|IfModule: Yes"
12526
  msgstr ""
12527
 
12528
+ #: includes/functions.php:1247
12529
  msgid "mod_rewrite Inconclusive: Status is not 200, 301, 302, 403 or 404"
12530
  msgstr ""
12531
 
12532
+ #: includes/functions.php:1288
12533
  msgid "mod_security Module is Loaded|Enabled|IfModule: Yes"
12534
  msgstr ""
12535
 
12536
+ #: includes/functions.php:1291
12537
  msgid "mod_security2 Module is Loaded|Enabled|IfModule: Yes"
12538
  msgstr ""
12539
 
12540
+ #: includes/functions.php:1303
12541
  msgid "mod_security Module is not Loaded|Enabled|IfModule: Yes"
12542
  msgstr ""
12543
 
12812
  "file."
12813
  msgstr ""
12814
 
12815
+ #: includes/general-functions.php:1091
12816
  msgid " Hosting Account Root Folder Option setup or updated Successfully!"
12817
  msgstr ""
12818
 
13735
  msgstr ""
13736
 
13737
  #: includes/hud-autofix-whitelist.php:821
13738
+ #: includes/hud-dismiss-functions.php:757
13739
  msgid "Click this "
13740
  msgstr ""
13741
 
13781
  msgid "No Plugin or Theme AutoFix Custom Code Whitelist Rules were found"
13782
  msgstr ""
13783
 
13784
+ #: includes/hud-dismiss-functions.php:52
13785
  msgid ""
13786
  "WARNING! BPS requires at least PHP5 to function correctly. Your PHP version "
13787
  "is: "
13788
  msgstr ""
13789
 
13790
+ #: includes/hud-dismiss-functions.php:52
13791
  msgid "BPS Guide - PHP5 Solution"
13792
  msgstr ""
13793
 
13794
+ #: includes/hud-dismiss-functions.php:52
13795
  msgid ""
13796
  "The BPS Guide will open in a new browser window. You will not be directed "
13797
  "away from your WordPress Dashboard."
13798
  msgstr ""
13799
 
13800
+ #: includes/hud-dismiss-functions.php:74
13801
  msgid ""
13802
  "WARNING! BPS has detected that Safe Mode is set to On in your php.ini file."
13803
  msgstr ""
13804
 
13805
+ #: includes/hud-dismiss-functions.php:74
13806
  msgid ""
13807
  "If you see errors that BPS was unable to automatically create the backup "
13808
  "folders this is probably the reason why."
13809
  msgstr ""
13810
 
13811
+ #: includes/hud-dismiss-functions.php:108
13812
  msgid "HUD Check: Custom Permalinks are NOT being used."
13813
  msgstr ""
13814
 
13815
+ #: includes/hud-dismiss-functions.php:108
13816
  msgid "It is recommended that you use Custom Permalinks: "
13817
  msgstr ""
13818
 
13819
+ #: includes/hud-dismiss-functions.php:108
13820
  msgid "How to setup Custom Permalinks"
13821
  msgstr ""
13822
 
13823
+ #: includes/hud-dismiss-functions.php:141
13824
  msgid ""
13825
  "WARNING! BPS has detected that your Server is a Windows IIS Server that does "
13826
  "not support htaccess rewriting."
13827
  msgstr ""
13828
 
13829
+ #: includes/hud-dismiss-functions.php:141
13830
  msgid "Do NOT activate BulletProof Modes unless you know what you are doing."
13831
  msgstr ""
13832
 
13833
+ #: includes/hud-dismiss-functions.php:141
13834
  msgid "Your Server Type is: "
13835
  msgstr ""
13836
 
13837
+ #: includes/hud-dismiss-functions.php:141
13838
  msgid "WordPress Codex - Using Permalinks - see IIS section"
13839
  msgstr ""
13840
 
13841
+ #: includes/hud-dismiss-functions.php:164
13842
+ #: includes/hud-dismiss-functions.php:169
13843
  msgid "WARNING! BPS was unable to automatically create the /"
13844
  msgstr ""
13845
 
13846
+ #: includes/hud-dismiss-functions.php:164
13847
  msgid "/bps-backup folder."
13848
  msgstr ""
13849
 
13850
+ #: includes/hud-dismiss-functions.php:164
13851
+ #: includes/hud-dismiss-functions.php:169
13852
  msgid "You will need to create the /"
13853
  msgstr ""
13854
 
13855
+ #: includes/hud-dismiss-functions.php:164
13856
  msgid ""
13857
  "/bps-backup folder manually via FTP. The folder permissions for the bps-"
13858
  "backup folder need to be set to 755 in order to successfully perform "
13859
  "permanent online backups."
13860
  msgstr ""
13861
 
13862
+ #: includes/hud-dismiss-functions.php:164
13863
+ #: includes/hud-dismiss-functions.php:169
13864
  msgid "To remove this message permanently click "
13865
  msgstr ""
13866
 
13867
+ #: includes/hud-dismiss-functions.php:164
13868
+ #: includes/hud-dismiss-functions.php:169
13869
  msgid "here."
13870
  msgstr ""
13871
 
13872
+ #: includes/hud-dismiss-functions.php:169
13873
  msgid "/bps-backup/master-backups folder."
13874
  msgstr ""
13875
 
13876
+ #: includes/hud-dismiss-functions.php:169
13877
  msgid ""
13878
  "/bps-backup/master-backups folder manually via FTP. The folder permissions "
13879
  "for the master-backups folder need to be set to 755 in order to successfully "
13880
  "perform permanent online backups."
13881
  msgstr ""
13882
 
13883
+ #: includes/hud-dismiss-functions.php:203
13884
+ #: includes/hud-dismiss-functions.php:215
13885
  msgid "Bonus Custom Code:"
13886
  msgstr ""
13887
 
13888
+ #: includes/hud-dismiss-functions.php:203
13889
+ #: includes/hud-dismiss-functions.php:215
13890
  msgid ""
13891
  "Click the links below to get Bonus Custom Code or click the Dismiss Notice "
13892
  "links or click this "
13893
  msgstr ""
13894
 
13895
+ #: includes/hud-dismiss-functions.php:203
13896
+ #: includes/hud-dismiss-functions.php:215
13897
  msgid "Dismiss All Notices"
13898
  msgstr ""
13899
 
13900
+ #: includes/hud-dismiss-functions.php:203
13901
+ #: includes/hud-dismiss-functions.php:215
13902
  msgid ""
13903
  " link. To Reset Dismiss Notices click the Reset|Recheck Dismiss Notices "
13904
  "button on the Custom Code page."
13905
  msgstr ""
13906
 
13907
+ #: includes/hud-dismiss-functions.php:206
13908
+ #: includes/hud-dismiss-functions.php:221
13909
+ #: includes/hud-dismiss-functions.php:227
13910
+ #: includes/hud-dismiss-functions.php:233
13911
+ #: includes/hud-dismiss-functions.php:239
13912
+ #: includes/hud-dismiss-functions.php:253
13913
+ #: includes/hud-dismiss-functions.php:259
13914
+ #: includes/hud-dismiss-functions.php:264
13915
  msgid "Get "
13916
  msgstr ""
13917
 
13918
+ #: includes/hud-dismiss-functions.php:206
13919
+ #: includes/hud-dismiss-functions.php:253
13920
  msgid "POST Request Attack Protection Code"
13921
  msgstr ""
13922
 
13923
+ #: includes/hud-dismiss-functions.php:206
13924
+ #: includes/hud-dismiss-functions.php:221
13925
+ #: includes/hud-dismiss-functions.php:227
13926
+ #: includes/hud-dismiss-functions.php:233
13927
+ #: includes/hud-dismiss-functions.php:239
13928
+ #: includes/hud-dismiss-functions.php:253
13929
+ #: includes/hud-dismiss-functions.php:259
13930
+ #: includes/hud-dismiss-functions.php:264
13931
  msgid " or "
13932
  msgstr ""
13933
 
13934
+ #: includes/hud-dismiss-functions.php:221
13935
  msgid "Brute Force Login Protection Code"
13936
  msgstr ""
13937
 
13938
+ #: includes/hud-dismiss-functions.php:227
13939
  msgid "Speed Boost Cache Code"
13940
  msgstr ""
13941
 
13942
+ #: includes/hud-dismiss-functions.php:233
13943
  msgid "Author Enumeration BOT Probe Code"
13944
  msgstr ""
13945
 
13946
+ #: includes/hud-dismiss-functions.php:239
13947
  msgid "XML-RPC DDoS Protection Code"
13948
  msgstr ""
13949
 
13950
+ #: includes/hud-dismiss-functions.php:259
13951
  msgid "Mime Sniffing|Drive-by Download Attack Protection Code"
13952
  msgstr ""
13953
 
13954
+ #: includes/hud-dismiss-functions.php:264
13955
  msgid "External iFrame|Clickjacking Protection Code"
13956
  msgstr ""
13957
 
13958
+ #: includes/hud-dismiss-functions.php:354
13959
+ #: includes/hud-dismiss-functions.php:398
13960
  msgid "HUD Check: Wordfence PHP/php.ini handler htaccess code detected"
13961
  msgstr ""
13962
 
13963
+ #: includes/hud-dismiss-functions.php:354
13964
+ #: includes/hud-dismiss-functions.php:398
13965
  msgid ""
13966
  "Wordfence PHP/php.ini handler htaccess code was found in your root .htaccess "
13967
  "file, but was NOT found in BPS Custom Code."
13968
  msgstr ""
13969
 
13970
+ #: includes/hud-dismiss-functions.php:354
13971
+ #: includes/hud-dismiss-functions.php:398
13972
  msgid ""
13973
  "Using the Wordfence WAF Firewall may cause serious/critical problems for "
13974
  "your website and BPS."
13975
  msgstr ""
13976
 
13977
+ #: includes/hud-dismiss-functions.php:359
13978
+ #: includes/hud-dismiss-functions.php:403
13979
  msgid "HUD Check: PHP/php.ini handler htaccess code check"
13980
  msgstr ""
13981
 
13982
+ #: includes/hud-dismiss-functions.php:359
13983
+ #: includes/hud-dismiss-functions.php:403
13984
  msgid ""
13985
  "PHP/php.ini handler htaccess code was found in your root .htaccess file, but "
13986
  "was NOT found in BPS Custom Code."
13987
  msgstr ""
13988
 
13989
+ #: includes/hud-dismiss-functions.php:359
13990
+ #: includes/hud-dismiss-functions.php:403
13991
  msgid "To automatically fix this click here: "
13992
  msgstr ""
13993
 
13994
+ #: includes/hud-dismiss-functions.php:359
13995
+ #: includes/hud-dismiss-functions.php:403
13996
  msgid ""
13997
  "The Setup Wizard Pre-Installation Checks feature will automatically fix this "
13998
  "just by visiting the Setup Wizard page."
13999
  msgstr ""
14000
 
14001
+ #: includes/hud-dismiss-functions.php:398
14002
  msgid " for the steps to fix this Wordfence problem."
14003
  msgstr ""
14004
 
14005
+ #: includes/hud-dismiss-functions.php:461
14006
  msgid ""
14007
  "An htaccess file has been detected in the wp-content folder that breaks BPS "
14008
  "features and functionality"
14009
  msgstr ""
14010
 
14011
+ #: includes/hud-dismiss-functions.php:461
14012
  msgid ""
14013
  "If you have or had the Sucuri, Defender or iThemes Security plugins "
14014
  "installed, they create a wp-content htaccess file that breaks several things "
14015
  "in BPS Pro and other plugins as well."
14016
  msgstr ""
14017
 
14018
+ #: includes/hud-dismiss-functions.php:461
14019
  msgid ""
14020
  "To fix the Sucuri problem go to the Sucuri Settings page, click the "
14021
  "Hardening tab and click the Revert Hardening button for the Block PHP Files "
14022
  "in WP-CONTENT Directory option setting."
14023
  msgstr ""
14024
 
14025
+ #: includes/hud-dismiss-functions.php:461
14026
  msgid ""
14027
  "To fix the Defender Security problem go to the Security Tweaks page, click "
14028
  "the PHP Execution option setting and click the Revert button."
14029
  msgstr ""
14030
 
14031
+ #: includes/hud-dismiss-functions.php:461
14032
  msgid ""
14033
  "o fix the iThemes problem go to the System Tweaks page, uncheck the Disable "
14034
  "PHP in Plugins option setting."
14035
  msgstr ""
14036
 
14037
+ #: includes/hud-dismiss-functions.php:503
14038
  msgid "The WordPress Firewall 2 plugin is installed and activated"
14039
  msgstr ""
14040
 
14041
+ #: includes/hud-dismiss-functions.php:503
14042
  msgid "It is recommended that you delete the WordPress Firewall 2 plugin."
14043
  msgstr ""
14044
 
14045
+ #: includes/hud-dismiss-functions.php:503
14046
  msgid " for more information."
14047
  msgstr ""
14048
 
14049
+ #: includes/hud-dismiss-functions.php:535
14050
  msgid "Notice: BPS Query String Exploits Code Changes"
14051
  msgstr ""
14052
 
14053
+ #: includes/hud-dismiss-functions.php:535
14054
  msgid ""
14055
  "Older BPS Query String Exploits code was found in BPS Custom Code. Several "
14056
  "Query String Exploits rules were changed/added/modified in the root ."
14057
  "htaccess file in BPS .49.6, .50.2 & .50.3."
14058
  msgstr ""
14059
 
14060
+ #: includes/hud-dismiss-functions.php:535
14061
  msgid ""
14062
  "Copy the new Query String Exploits section of code from your root .htaccess "
14063
  "file and paste it into this BPS Custom Code text box: CUSTOM CODE BPSQSE BPS "
14064
  "QUERY STRING EXPLOITS and click the Save Root Custom Code button."
14065
  msgstr ""
14066
 
14067
+ #: includes/hud-dismiss-functions.php:535
14068
  msgid ""
14069
  "This Notice will go away once you have copied the new Query String Exploits "
14070
  "code to BPS Custom Code and clicked the Save Root Custom Code button."
14071
  msgstr ""
14072
 
14073
+ #: includes/hud-dismiss-functions.php:554
14074
  msgid "BPS Alert! A BPS htaccess file was NOT found in the BPS Backup folder: "
14075
  msgstr ""
14076
 
14077
+ #: includes/hud-dismiss-functions.php:554
14078
  msgid " and click the BPS Backup Folder BulletProof Mode Activate button."
14079
  msgstr ""
14080
 
14081
+ #: includes/hud-dismiss-functions.php:593
14082
  msgid "New Improved BPS Speed Boost Cache Code"
14083
  msgstr ""
14084
 
14085
+ #: includes/hud-dismiss-functions.php:593
14086
  msgid ""
14087
  "Older BPS Speed Boost Cache Code was found saved in this BPS Custom Code "
14088
  "text box: CUSTOM CODE TOP PHP/PHP.INI HANDLER/CACHE CODE"
14089
  msgstr ""
14090
 
14091
+ #: includes/hud-dismiss-functions.php:593
14092
  msgid ""
14093
  "Newer improved BPS Speed Boost Cache Code has been created, which should "
14094
  "improve website load speed performance even more."
14095
  msgstr ""
14096
 
14097
+ #: includes/hud-dismiss-functions.php:593
14098
  msgid "Get The New Improved BPS Speed Boost Cache Code"
14099
  msgstr ""
14100
 
14101
+ #: includes/hud-dismiss-functions.php:593
14102
  msgid ". To dismiss this Notice click the Dismiss Notice button below."
14103
  msgstr ""
14104
 
14105
+ #: includes/hud-dismiss-functions.php:593
14106
  msgid ""
14107
  "To Reset Dismiss Notices click the Reset|Recheck Dismiss Notices button on "
14108
  "the Custom Code page."
14109
  msgstr ""
14110
 
14111
+ #: includes/hud-dismiss-functions.php:600
14112
  msgid "BPS Speed Boost Cache Custom Code Notice"
14113
  msgstr ""
14114
 
14115
+ #: includes/hud-dismiss-functions.php:600
14116
  msgid ""
14117
  "BPS Speed Boost Cache Code was found in this BPS Custom Code text box: "
14118
  "CUSTOM CODE TOP PHP/PHP.INI HANDLER/CACHE CODE"
14119
  msgstr ""
14120
 
14121
+ #: includes/hud-dismiss-functions.php:600
14122
  msgid ""
14123
  "and another caching plugin's Marker text was also found in this BPS Custom "
14124
  "Code text box."
14125
  msgstr ""
14126
 
14127
+ #: includes/hud-dismiss-functions.php:600
14128
  msgid "Click this link: "
14129
  msgstr ""
14130
 
14131
+ #: includes/hud-dismiss-functions.php:600
14132
  msgid "BPS Speed Boost Cache Custom Code Notice Forum Topic"
14133
  msgstr ""
14134
 
14135
+ #: includes/hud-dismiss-functions.php:600
14136
  msgid " for help information on what this Notice means and what to do next."
14137
  msgstr ""
14138
 
14139
+ #: includes/hud-dismiss-functions.php:638
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14140
  msgid "BPS New Feature Notice: JTC-Lite"
14141
  msgstr ""
14142
 
14143
+ #: includes/hud-dismiss-functions.php:638
14144
  msgid ""
14145
  "JTC-Lite protects the WordPress Login page Form against automated SpamBot "
14146
  "and HackerBot Brute Force Login attacks"
14147
  msgstr ""
14148
 
14149
+ #: includes/hud-dismiss-functions.php:638
14150
  msgid ""
14151
  "and also prevents User Accounts from being locked repeatedly by Brute Force "
14152
  "Login Bot attacks on your Login page Form."
14153
  msgstr ""
14154
 
14155
+ #: includes/hud-dismiss-functions.php:638
14156
  msgid "To enable/turn On JTC-Lite, click this "
14157
  msgstr ""
14158
 
14159
+ #: includes/hud-dismiss-functions.php:638
14160
  msgid ""
14161
  ". Click/check the Login Form Checkbox and click the Save Options button."
14162
  msgstr ""
14163
 
14164
+ #: includes/hud-dismiss-functions.php:638
14165
+ #: includes/hud-dismiss-functions.php:719
14166
+ #: includes/hud-dismiss-functions.php:757
14167
+ #: includes/hud-dismiss-functions.php:809
14168
+ #: includes/hud-dismiss-functions.php:857
14169
  msgid ""
14170
  "To Dismiss this Notice click the Dismiss Notice button below. To Reset "
14171
  "Dismiss Notices click the Reset|Recheck Dismiss Notices button on the BPS "
14172
  "Custom Code page."
14173
  msgstr ""
14174
 
14175
+ #: includes/hud-dismiss-functions.php:681
14176
  msgid "BPS Plugin Star Rating Request"
14177
  msgstr ""
14178
 
14179
+ #: includes/hud-dismiss-functions.php:681
14180
  msgid ""
14181
  "A BPS star rating only takes a couple of minutes and would be very much "
14182
  "appreciated. We are looking for 5 star ratings and not \"fancy\" reviews."
14183
  msgstr ""
14184
 
14185
+ #: includes/hud-dismiss-functions.php:681
14186
  msgid ""
14187
  "A simple review like \"works great\" or \"has been protecting my website for "
14188
  "X months or X years\" is perfect."
14189
  msgstr ""
14190
 
14191
+ #: includes/hud-dismiss-functions.php:681
14192
  msgid "Click this link to submit a BPS Plugin Star Rating: "
14193
  msgstr ""
14194
 
14195
+ #: includes/hud-dismiss-functions.php:681
14196
  msgid "BPS Plugin Star Rating"
14197
  msgstr ""
14198
 
14199
+ #: includes/hud-dismiss-functions.php:681
14200
  msgid ""
14201
  "login to the WordPress.org site and scroll to the bottom of the Reviews page."
14202
  msgstr ""
14203
 
14204
+ #: includes/hud-dismiss-functions.php:681
14205
  msgid ""
14206
  "To Dismiss this one-time Notice click the Dismiss Notice button below. To "
14207
  "Reset Dismiss Notices click the Reset|Recheck Dismiss Notices button on the "
14208
  "BPS Custom Code page."
14209
  msgstr ""
14210
 
14211
+ #: includes/hud-dismiss-functions.php:719
14212
  msgid "BPS Notice: Mod Security Module is Loaded|Enabled"
14213
  msgstr ""
14214
 
14215
+ #: includes/hud-dismiss-functions.php:719
14216
  msgid "Please take a minute to view this Mod Security help forum topic: "
14217
  msgstr ""
14218
 
14219
+ #: includes/hud-dismiss-functions.php:719
14220
  msgid "Mod Security Common Known Problems"
14221
  msgstr ""
14222
 
14223
+ #: includes/hud-dismiss-functions.php:719
14224
  msgid ""
14225
  "If you are not experiencing any of the problems listed in the Mod Security "
14226
  "help forum topic then you can dismiss this Dismiss Notice."
14227
  msgstr ""
14228
 
14229
+ #: includes/hud-dismiss-functions.php:757
14230
  msgid "BPS GDPR Compliance Notice"
14231
  msgstr ""
14232
 
14233
+ #: includes/hud-dismiss-functions.php:757
14234
  msgid ""
14235
  "A new Setup Wizard Option has been created which allows you to turn off all "
14236
  "IP address logging in BPS to make your website GDPR Compliant."
14237
  msgstr ""
14238
 
14239
+ #: includes/hud-dismiss-functions.php:757
14240
  msgid "GDPR Compliance Setup Wizard Option link"
14241
  msgstr ""
14242
 
14243
+ #: includes/hud-dismiss-functions.php:757
14244
  msgid "Choose the GDPR Compliance On setting."
14245
  msgstr ""
14246
 
14247
+ #: includes/hud-dismiss-functions.php:757
14248
  msgid "For more information about GDPR Compliance click this "
14249
  msgstr ""
14250
 
14251
+ #: includes/hud-dismiss-functions.php:757
14252
  msgid "GDPR Compliance Forum Topic link"
14253
  msgstr ""
14254
 
14255
+ #: includes/hud-dismiss-functions.php:809
14256
  msgid "BPS wp-config.php file WP Automatic Update constants detected"
14257
  msgstr ""
14258
 
14259
+ #: includes/hud-dismiss-functions.php:809
14260
  msgid ""
14261
  "You are using the BPS MU Tools plugin option settings to handle WP Automatic "
14262
  "Updates. BPS detected that you are also using one or both of these WP "
14267
  "Notice after you have commented them out."
14268
  msgstr ""
14269
 
14270
+ #: includes/hud-dismiss-functions.php:857
14271
+ msgid "MScan 2.0 Rebuild Notice"
14272
+ msgstr ""
14273
+
14274
+ #: includes/hud-dismiss-functions.php:857
14275
+ msgid ""
14276
+ "MScan has been completely rebuilt. MScan 2.0 is faster, very accurate and "
14277
+ "user friendly. "
14278
+ msgstr ""
14279
+
14280
+ #: includes/hud-dismiss-functions.php:857
14281
+ msgid "Check out MScan 2.0"
14282
+ msgstr ""
14283
+
14284
+ #: includes/hud-dismiss-functions.php:857
14285
+ msgid ""
14286
+ " Recommendation: Click the Reset MScan button before running a new scan."
14287
+ msgstr ""
14288
+
14289
  #: includes/login-security.php:124 includes/login-security.php:130
14290
  #: includes/login-security.php:343 includes/login-security.php:485
14291
  #: includes/login-security.php:491 includes/login-security.php:617
readme.txt CHANGED
@@ -4,15 +4,15 @@ Donate link: https://wordpress.org/support/view/plugin-reviews/bulletproof-secur
4
  Tags: security, secure, malware scanner, login security, firewall, security plugin, wordpress security, login, bruteforce, backup, exploit, infection, protection, virus, anti-virus, logout, spam, anti-spam
5
  Requires at least: 3.8
6
  Tested up to: 5.7
7
- Stable tag: 4.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- WordPress Security Protection: Malware scanner, Firewall, Login Security, DB Backup, Anti-Spam & much more.
12
 
13
  == Description ==
14
 
15
- WordPress Security Protection: Malware scanner, Firewall, Login Security, DB Backup, Anti-Spam & much more. View Security feature highlights below. View BulletProof Security feature details under the FAQ help section below. Secure your WordPress website even further by adding additional BulletProof Security Bonus Custom Code. See BulletProof Security Bonus Custom Code under the FAQ help section below. Effective, Reliable & Easy to use WordPress Security Plugin.
16
 
17
  = BulletProof Security Installation and Setup Video Tutorial =
18
  https://www.youtube.com/watch?v=FMv58aLUMT0
@@ -139,7 +139,7 @@ Security plugin features and frequently asked questions see the FAQ section belo
139
  1. Add a checkmark in the Hosting Account Root Folders checkboxes to enable MScan to scan the folders that you have chosen.
140
  2. Keep the default MScan Options settings or choose your own settings.
141
  3. Click the Save MScan Options button.
142
- 4. Recommendation: Click the Scan Time Estimate Tool button to check the total estimated scan time for your scan based on your MScan Options settings.
143
 
144
  * <strong>Idle Session Logout (ISL) Setup Steps</strong>
145
  1. Choose the ISL option settings you want to use.
@@ -275,6 +275,7 @@ The answer is very simple - .htaccess files (distributed Server configuration fi
275
 
276
  <strong>Description:</strong> MScan is a malware scanner that scans website files for hacker files or code and scans the WP database for hacker code. MScan Scheduled
277
  scanning is available in BPS Pro only. For more details see the <a href="https://forum.ait-pro.com/forums/topic/mscan-malware-scanner-guide/" title="MScan Malware Scanner Guide" rel="nofollow" target="_blank">MScan Malware Scanner Guide</a>.
 
278
 
279
  = BulletProof Security System Info =
280
 
4
  Tags: security, secure, malware scanner, login security, firewall, security plugin, wordpress security, login, bruteforce, backup, exploit, infection, protection, virus, anti-virus, logout, spam, anti-spam
5
  Requires at least: 3.8
6
  Tested up to: 5.7
7
+ Stable tag: 4.8
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ WordPress Security Protection: Malware scanner, Firewall, Login Security, DB Backup, Anti-Spam...
12
 
13
  == Description ==
14
 
15
+ WordPress Security Protection: Malware scanner, Firewall, Login Security, DB Backup, Anti-Spam... View Security feature highlights below. View BulletProof Security feature details under the FAQ help section below. Secure your WordPress website even further by adding additional BulletProof Security Bonus Custom Code. See BulletProof Security Bonus Custom Code under the FAQ help section below. Effective, Reliable & Easy to use WordPress Security Plugin.
16
 
17
  = BulletProof Security Installation and Setup Video Tutorial =
18
  https://www.youtube.com/watch?v=FMv58aLUMT0
139
  1. Add a checkmark in the Hosting Account Root Folders checkboxes to enable MScan to scan the folders that you have chosen.
140
  2. Keep the default MScan Options settings or choose your own settings.
141
  3. Click the Save MScan Options button.
142
+ 4. Click the Start Scan button.
143
 
144
  * <strong>Idle Session Logout (ISL) Setup Steps</strong>
145
  1. Choose the ISL option settings you want to use.
275
 
276
  <strong>Description:</strong> MScan is a malware scanner that scans website files for hacker files or code and scans the WP database for hacker code. MScan Scheduled
277
  scanning is available in BPS Pro only. For more details see the <a href="https://forum.ait-pro.com/forums/topic/mscan-malware-scanner-guide/" title="MScan Malware Scanner Guide" rel="nofollow" target="_blank">MScan Malware Scanner Guide</a>.
278
+ * MScan 2.0 Rebuild: BPS Pro 15.4/BPS 4.8: MScan 2.0 now uses file hash comparisons for all WP files (WP Core, Plugins and Themes). File hash comparisons are 100% accurate, which means no false positives will occur for any WP files. All other non-WP files are scanned using standard conventional pattern matching. Now that WP Files are all scanned with file hash comparisons this allowed increasing the detection sensitivity for pattern matching scanning. Additional pattern matching rules have been added to MScan 2.0.
279
 
280
  = BulletProof Security System Info =
281