Defender Security – Malware Scanner, Login Security & Firewall - Version 1.7.6

Version Description

  • Fix: Defender now can recognize and verify Bing Bot for whitelisting
  • Fix: Lockout page now will use site title instead of the text 'WP Defender'
  • Other minor enhancements and fixes
Download this release

Release Info

Developer hoang1213
Plugin Icon 128x128 Defender Security – Malware Scanner, Login Security & Firewall
Version 1.7.6
Comparing to
See all releases

Code changes from version 1.7.4 to 1.7.6

Files changed (37) hide show
  1. app/behavior/blacklist-free.php +7 -5
  2. app/behavior/report-free.php +1 -1
  3. app/behavior/utils.php +22 -0
  4. app/controller/dashboard.php +27 -9
  5. app/module/advanced-tools/controller/main.php +1 -1
  6. app/module/advanced-tools/view/login/enabled.php +1 -1
  7. app/module/audit.php +3 -0
  8. app/module/audit/behavior/audit-free.php +2 -2
  9. app/module/audit/view/free.php +1 -1
  10. app/module/hardener/component/login-duration.php +3 -2
  11. app/module/hardener/component/protect-information-service.php +6 -0
  12. app/module/hardener/component/servers/apache-service.php +102 -6
  13. app/module/hardener/view/rules/protect-information.php +6 -1
  14. app/module/ip-lockout/component/login-protection-api.php +38 -0
  15. app/module/ip-lockout/controller/main.php +8 -0
  16. app/module/ip-lockout/view/emails/404-lockout.php +1 -1
  17. app/module/ip-lockout/view/emails/login-lockout.php +1 -1
  18. app/module/ip-lockout/view/emails/login-username-ban.php +1 -1
  19. app/module/ip-lockout/view/locked.php +1 -1
  20. app/module/ip-lockout/view/notification/report-free.php +2 -2
  21. app/module/scan/behavior/core-result.php +10 -9
  22. app/module/scan/behavior/core-scan.php +13 -3
  23. app/module/scan/behavior/scan.php +2 -2
  24. app/module/scan/controller/main.php +1 -1
  25. app/module/scan/view/automation-free.php +2 -2
  26. app/module/scan/view/layouts/layout.php +2 -2
  27. app/module/scan/view/scanning.php +1 -1
  28. app/module/scan/view/setting-free.php +4 -4
  29. app/view/activator.php +1 -1
  30. app/view/dashboard.php +3 -2
  31. assets/css/styles.css +92 -83
  32. assets/img/scanning-man.png +0 -0
  33. changelog.txt +17 -1
  34. languages/wpdef-default.pot +130 -150
  35. main-activator.php +7 -3
  36. readme.txt +7 -2
  37. wp-defender.php +2 -2
app/behavior/blacklist-free.php CHANGED
@@ -19,17 +19,19 @@ class Blacklist_Free extends Behavior {
19
  <div class="box-title">
20
  <span class="span-icon icon-blacklist"></span>
21
  <h3><?php _e( "BLACKLIST MONITOR", "defender-security" ) ?></h3>
22
- <a href="#pro-feature" rel="dialog"
23
- class="button button-small button-pre"
24
- tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
25
- <?php _e( "PRO FEATURE", "defender-security" ) ?></a>
 
26
  </div>
27
  <div class="box-content">
28
  <div class="line">
29
  <?php _e( "Automatically check if you’re on Google’s blacklist every 6 hours. If something’s
30
  wrong, we’ll let you know via email.", "defender-security" ) ?>
31
  </div>
32
- <a href="#pro-feature" rel="dialog"
 
33
  class="button button-green button-small"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
34
  </div>
35
  </div>
19
  <div class="box-title">
20
  <span class="span-icon icon-blacklist"></span>
21
  <h3><?php _e( "BLACKLIST MONITOR", "defender-security" ) ?></h3>
22
+ <a href="<?php echo Utils::instance()->campaignURL( 'defender_dash_blacklist_pro_tag' ) ?>"
23
+ target="_blank"
24
+ class="button button-small button-pre"
25
+ tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
26
+ <?php _e( "PRO FEATURE", "defender-security" ) ?></a>
27
  </div>
28
  <div class="box-content">
29
  <div class="line">
30
  <?php _e( "Automatically check if you’re on Google’s blacklist every 6 hours. If something’s
31
  wrong, we’ll let you know via email.", "defender-security" ) ?>
32
  </div>
33
+ <a href="<?php echo Utils::instance()->campaignURL( 'defender_dash_blacklist_upgrade_button' ) ?>"
34
+ target="_blank"
35
  class="button button-green button-small"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
36
  </div>
37
  </div>
app/behavior/report-free.php CHANGED
@@ -60,7 +60,7 @@ class Report_Free extends Behavior {
60
  <div>
61
  <?php printf( __( " Automated reports are included in a WPMU DEV membership along with 100+ plugins
62
  & themes, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try
63
- it all absolutely FREE</a>", "defender-security" ), 'https://premium.wpmudev.org/project/wp-defender/' ) ?>
64
  </div>
65
  </div>
66
  <div class="clear"></div>
60
  <div>
61
  <?php printf( __( " Automated reports are included in a WPMU DEV membership along with 100+ plugins
62
  & themes, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try
63
+ it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL( 'defender_dash_reports_upsell_link' ) ) ?>
64
  </div>
65
  </div>
66
  <div class="clear"></div>
app/behavior/utils.php CHANGED
@@ -701,4 +701,26 @@ class Utils extends Behavior {
701
 
702
  return apply_filters( 'defender_current_page_url', $url );
703
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
704
  }
701
 
702
  return apply_filters( 'defender_current_page_url', $url );
703
  }
704
+
705
+ /**
706
+ * site url with correct sheme
707
+ *
708
+ * @return string
709
+ */
710
+ public function siteURLWithScheme() {
711
+ $current_scheme = ( is_ssl() ) ? 'https' : 'http';
712
+
713
+ return network_site_url( '', $current_scheme );
714
+ }
715
+
716
+ /**
717
+ * @param $campaign
718
+ *
719
+ * @return string
720
+ */
721
+ public function campaignURL( $campaign ) {
722
+ $url = "https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=" . $campaign;
723
+
724
+ return $url;
725
+ }
726
  }
app/controller/dashboard.php CHANGED
@@ -86,17 +86,35 @@ class Dashboard extends Controller {
86
  * @return mixed
87
  */
88
  public function addMyEndpoint( $actions ) {
89
- $actions['defender_new_scan'] = array( &$this, 'new_scan' );
90
- $actions['defender_schedule_scan'] = array( &$this, 'schedule_scan' );
91
- $actions['defender_manage_audit_log'] = array( &$this, 'manage_audit_log' );
92
- $actions['defender_manage_lockout'] = array( &$this, 'manage_lockout' );
93
- $actions['defender_whitelist_ip'] = array( &$this, 'whitelist_ip' );
94
- $actions['defender_blacklist_ip'] = array( &$this, 'blacklist_ip' );
95
- $actions['defender_get_stats'] = array( &$this, 'get_stats' );
 
96
 
97
  return $actions;
98
  }
99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
100
  /**
101
  * @param $params
102
  * @param $action
@@ -303,9 +321,9 @@ class Dashboard extends Controller {
303
  */
304
  public function admin_menu() {
305
  $cap = is_multisite() ? 'manage_network_options' : 'manage_options';
306
- $menu_title = esc_html__( "Defender", "defender-security" );
307
  //$menu_title = sprintf( $menu_title, $indicator );
308
- add_menu_page( esc_html__( "Defender", "defender-security" ), $menu_title, $cap, 'wp-defender', array(
309
  &$this,
310
  'actionIndex'
311
  ), $this->get_menu_icon() );
86
  * @return mixed
87
  */
88
  public function addMyEndpoint( $actions ) {
89
+ $actions['defender_new_scan'] = array( &$this, 'new_scan' );
90
+ $actions['defender_schedule_scan'] = array( &$this, 'schedule_scan' );
91
+ $actions['defender_manage_audit_log'] = array( &$this, 'manage_audit_log' );
92
+ $actions['defender_manage_lockout'] = array( &$this, 'manage_lockout' );
93
+ $actions['defender_whitelist_ip'] = array( &$this, 'whitelist_ip' );
94
+ $actions['defender_blacklist_ip'] = array( &$this, 'blacklist_ip' );
95
+ $actions['defender_get_stats'] = array( &$this, 'get_stats' );
96
+ $actions['defender_get_scan_progress'] = array( &$this, 'get_scan_progress' );
97
 
98
  return $actions;
99
  }
100
 
101
+ public function get_scan_progress() {
102
+ $ret = Scan_Api::processActiveScan();
103
+ if ( is_wp_error( $ret ) ) {
104
+ wp_send_json_error( array(
105
+ 'message' => $ret->get_error_message()
106
+ ) );
107
+ } else {
108
+ $percent = Scan_Api::getScanProgress();
109
+ if ( $ret == true ) {
110
+ $percent = 100;
111
+ }
112
+ wp_send_json_success( array(
113
+ 'progress' => $percent
114
+ ) );
115
+ }
116
+ }
117
+
118
  /**
119
  * @param $params
120
  * @param $action
321
  */
322
  public function admin_menu() {
323
  $cap = is_multisite() ? 'manage_network_options' : 'manage_options';
324
+ $menu_title = wp_defender()->isFree ? esc_html__( "Defender", "defender-security" ) : esc_html__( "Defender Pro", "defender-security" );
325
  //$menu_title = sprintf( $menu_title, $indicator );
326
+ add_menu_page( esc_html__( "Defender Pro", "defender-security" ), $menu_title, $cap, 'wp-defender', array(
327
  &$this,
328
  'actionIndex'
329
  ), $this->get_menu_icon() );
app/module/advanced-tools/controller/main.php CHANGED
@@ -457,7 +457,7 @@ class Main extends Controller {
457
  'message' => __( "Your settings have been updated.", "defender-security" )
458
  );
459
  $res['reload'] = 1;
460
-
461
  wp_send_json_success( $res );
462
  }
463
  }
457
  'message' => __( "Your settings have been updated.", "defender-security" )
458
  );
459
  $res['reload'] = 1;
460
+ Utils::instance()->submitStatsToDev();
461
  wp_send_json_success( $res );
462
  }
463
  }
app/module/advanced-tools/view/login/enabled.php CHANGED
@@ -9,7 +9,7 @@
9
  <?php _e( "Two factor authentication is active.", "defender-security" ) ?>
10
  </div>
11
  <button type="button" class="button" id="disableOTP">
12
- <?php _e( "Disabled", "defender-security" ) ?>
13
  </button>
14
  </td>
15
  </tr>
9
  <?php _e( "Two factor authentication is active.", "defender-security" ) ?>
10
  </div>
11
  <button type="button" class="button" id="disableOTP">
12
+ <?php _e( "Disable", "defender-security" ) ?>
13
  </button>
14
  </td>
15
  </tr>
app/module/audit.php CHANGED
@@ -11,6 +11,9 @@ use WP_Defender\Module\Audit\Controller\Main_Free;
11
 
12
  class Audit extends Module {
13
  public function __construct() {
 
 
 
14
  if ( wp_defender()->isFree ) {
15
  new Main_Free();
16
  } else {
11
 
12
  class Audit extends Module {
13
  public function __construct() {
14
+ if ( file_exists( __DIR__ . '/audit/test' ) ) {
15
+ @unlink( __DIR__ . '/audit/test' );
16
+ }
17
  if ( wp_defender()->isFree ) {
18
  new Main_Free();
19
  } else {
app/module/audit/behavior/audit-free.php CHANGED
@@ -16,7 +16,7 @@ class Audit_Free extends Behavior {
16
  <div class="box-title">
17
  <span class="span-icon icon-blacklist"></span>
18
  <h3><?php _e( "AUDIT LOGGING", "defender-security" ) ?></h3>
19
- <a href="#pro-feature" rel="dialog" class="button button-small button-pre"
20
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>"><?php _e( "PRO FEATURE", "defender-security" ) ?></a>
21
  </div>
22
  <div class="box-content">
@@ -28,7 +28,7 @@ class Audit_Free extends Behavior {
28
  <div class="presale-text">
29
  <div>
30
  <?php printf( __( "Audit logging is a pro feature included in a WPMU DEV membership along with 100+ plugins &
31
- themes, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all absolutely FREE</a>", "defender-security" ), "https://premium.wpmudev.org/project/wp-defender/" ) ?>
32
  </a>
33
  </div>
34
  </div>
16
  <div class="box-title">
17
  <span class="span-icon icon-blacklist"></span>
18
  <h3><?php _e( "AUDIT LOGGING", "defender-security" ) ?></h3>
19
+ <a href="<?php echo Utils::instance()->campaignURL('defender_dash_auditlogging_pro_tag') ?>" target="_blank" class="button button-small button-pre"
20
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>"><?php _e( "PRO FEATURE", "defender-security" ) ?></a>
21
  </div>
22
  <div class="box-content">
28
  <div class="presale-text">
29
  <div>
30
  <?php printf( __( "Audit logging is a pro feature included in a WPMU DEV membership along with 100+ plugins &
31
+ themes, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all absolutely FREE</a>", "defender-security" ), Utils::instance()->campaignURL('defender_dash_auditlogging_upsell_link') ) ?>
32
  </a>
33
  </div>
34
  </div>
app/module/audit/view/free.php CHANGED
@@ -13,7 +13,7 @@
13
  <div class="line max-600">
14
  <?php _e( "Track and log each and every event when changes are made to your website and get details reports on everything from what your users are doing to hacking attempts. This is a pro feature that requires an active WPMU DEV membership. Try it free today!", "defender-security" ) ?>
15
  </div>
16
- <a href="#pro-feature" rel="dialog"
17
  class="button button-green"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
18
  </div>
19
  </div>
13
  <div class="line max-600">
14
  <?php _e( "Track and log each and every event when changes are made to your website and get details reports on everything from what your users are doing to hacking attempts. This is a pro feature that requires an active WPMU DEV membership. Try it free today!", "defender-security" ) ?>
15
  </div>
16
+ <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_auditlogging_upgrade_button') ?>" target="_blank"
17
  class="button button-green"><?php esc_html_e( "Upgrade to Pro", "defender-security" ) ?></a>
18
  </div>
19
  </div>
app/module/hardener/component/login-duration.php CHANGED
@@ -116,9 +116,9 @@ class Login_Duration extends Rule {
116
  function check_login() {
117
  $defender_logout = HTTP_Helper::retrieve_get( 'defender_logout', false );
118
  if( is_user_logged_in() ) {
 
 
119
  if ( !$defender_logout ) {
120
- $current_user = wp_get_current_user();
121
- $user_id = $current_user->ID;
122
  $current_time = current_time( 'mysql' );
123
  $last_login_time = get_user_meta( $user_id, 'last_login_time', true );
124
  $login_period = $this->getService()->getDuration( true );
@@ -145,6 +145,7 @@ class Login_Duration extends Rule {
145
  update_user_meta( $user_id, 'last_login_time', $last_login_time );
146
  }
147
  } else{
 
148
  wp_logout();
149
  $after_logout = HTTP_Helper::retrieve_get( 'after_logout', false );
150
  if ( $after_logout ) {
116
  function check_login() {
117
  $defender_logout = HTTP_Helper::retrieve_get( 'defender_logout', false );
118
  if( is_user_logged_in() ) {
119
+ $current_user = wp_get_current_user();
120
+ $user_id = $current_user->ID;
121
  if ( !$defender_logout ) {
 
 
122
  $current_time = current_time( 'mysql' );
123
  $last_login_time = get_user_meta( $user_id, 'last_login_time', true );
124
  $login_period = $this->getService()->getDuration( true );
145
  update_user_meta( $user_id, 'last_login_time', $last_login_time );
146
  }
147
  } else{
148
+ delete_user_meta( $user_id, 'last_login_time' );
149
  wp_logout();
150
  $after_logout = HTTP_Helper::retrieve_get( 'after_logout', false );
151
  if ( $after_logout ) {
app/module/hardener/component/protect-information-service.php CHANGED
@@ -103,6 +103,9 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
103
  '<Files robots.txt>' . PHP_EOL .
104
  'Require all granted' . PHP_EOL .
105
  '</Files>' . PHP_EOL,
 
 
 
106
  '## WP Defender - End ##'
107
  );
108
  } else {
@@ -115,6 +118,9 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
115
  '<Files robots.txt>' . PHP_EOL .
116
  'Allow from all' . PHP_EOL .
117
  '</Files>' . PHP_EOL,
 
 
 
118
  '## WP Defender - End ##'
119
  );
120
  }
103
  '<Files robots.txt>' . PHP_EOL .
104
  'Require all granted' . PHP_EOL .
105
  '</Files>' . PHP_EOL,
106
+ '<Files ads.txt>' . PHP_EOL .
107
+ 'Require all granted' . PHP_EOL .
108
+ '</Files>' . PHP_EOL,
109
  '## WP Defender - End ##'
110
  );
111
  } else {
118
  '<Files robots.txt>' . PHP_EOL .
119
  'Allow from all' . PHP_EOL .
120
  '</Files>' . PHP_EOL,
121
+ '<Files ads.txt>' . PHP_EOL .
122
+ 'Allow from all' . PHP_EOL .
123
+ '</Files>' . PHP_EOL,
124
  '## WP Defender - End ##'
125
  );
126
  }
app/module/hardener/component/servers/apache-service.php CHANGED
@@ -47,6 +47,11 @@ class Apache_Service extends Rule_Service implements IRule_Service {
47
  return $ret;
48
  }
49
 
 
 
 
 
 
50
  return true;
51
  }
52
 
@@ -139,11 +144,6 @@ class Apache_Service extends Rule_Service implements IRule_Service {
139
  }
140
  }
141
 
142
- /*$status = wp_remote_head( network_site_url() . 'wp-includes', array( 'user-agent' => $_SERVER['HTTP_USER_AGENT'] ) );
143
- if ( 200 == wp_remote_retrieve_response_code( $status ) ) {
144
- $default[] = 'Options -Indexes' . PHP_EOL;
145
- }*/
146
-
147
  $containsSearch = array_diff( $default, $htConfig );
148
  if ( count( $containsSearch ) == 0 || ( count( $containsSearch ) == count( $default ) ) ) {
149
  //append this
@@ -154,6 +154,64 @@ class Apache_Service extends Rule_Service implements IRule_Service {
154
  return true;
155
  }
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  public function unProtectContentDir() {
158
  $htPath = WP_CONTENT_DIR . '/' . '.htaccess';
159
  if ( ! is_writeable( $htPath ) ) {
@@ -218,6 +276,39 @@ class Apache_Service extends Rule_Service implements IRule_Service {
218
  file_put_contents( $htPath, $htConfig, LOCK_EX );
219
  }
220
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  /**
222
  * @return bool|\WP_Error
223
  */
@@ -230,7 +321,12 @@ class Apache_Service extends Rule_Service implements IRule_Service {
230
  $ret = $this->unProtectIncludeDir();
231
  if ( is_wp_error( $ret ) ) {
232
  return $ret;
233
- }
 
 
 
 
 
234
  return true;
235
  }
236
 
47
  return $ret;
48
  }
49
 
50
+ $ret = $this->protectUploadsDir();
51
+ if ( is_wp_error( $ret ) ) {
52
+ return $ret;
53
+ }
54
+
55
  return true;
56
  }
57
 
144
  }
145
  }
146
 
 
 
 
 
 
147
  $containsSearch = array_diff( $default, $htConfig );
148
  if ( count( $containsSearch ) == 0 || ( count( $containsSearch ) == count( $default ) ) ) {
149
  //append this
154
  return true;
155
  }
156
 
157
+ /**
158
+ * Protect uploads directory
159
+ * Sometimes a user will set a custom upload directory
160
+ *
161
+ * @return bool|\WP_Error
162
+ */
163
+ public function protectUploadsDir() {
164
+ if ( defined( 'UPLOADS' ) ) {
165
+ $htPath = ABSPATH . UPLOADS . '/' . '.htaccess';
166
+ if ( ! file_exists( $htPath ) ) {
167
+ if ( ! file_put_contents( $htPath, '', LOCK_EX ) ) {
168
+ return new \WP_Error( Error_Code::NOT_WRITEABLE,
169
+ sprintf( __( "The file %s is not writeable", "defender-security" ), $htPath ) );
170
+ }
171
+ } elseif ( ! is_writeable( $htPath ) ) {
172
+ return new \WP_Error( Error_Code::NOT_WRITEABLE,
173
+ sprintf( __( "The file %s is not writeable", "defender-security" ), $htPath ) );
174
+ }
175
+ $htConfig = file( $htPath );
176
+ $deny = $this->generateHtAccessRule( false );
177
+ $allow = $this->generateHtAccessRule( true );
178
+ $default = array(
179
+ PHP_EOL . '## WP Defender - Protect PHP Executed ##' . PHP_EOL,
180
+ '<Files *.php>' . PHP_EOL .
181
+ $deny .
182
+ '</Files>' . PHP_EOL,
183
+ '## WP Defender - End ##' . PHP_EOL
184
+ );
185
+
186
+ if ( ! empty( $this->exclude_file_paths ) ) {
187
+
188
+ $custom_exclude = array();
189
+
190
+ foreach ( $this->exclude_file_paths as $file_path ) {
191
+ $file_path = trim( preg_replace('/\s\s+/', ' ', $file_path ) ); //remove trailing new lines
192
+ if ( !empty( $file_path ) ) {
193
+ $custom_exclude[] = '<Files ' . $file_path . '> '. PHP_EOL .
194
+ $allow .
195
+ '</Files>' . PHP_EOL;
196
+ }
197
+ }
198
+
199
+ if ( ! empty( $custom_exclude ) ) {
200
+ array_splice( $default, 2, 0, $custom_exclude ); //Add the excludes before the ## WP Defender - End ##
201
+ $this->new_htconfig = $default; //Set the new array structure for when we want to remove
202
+ }
203
+ }
204
+
205
+ $containsSearch = array_diff( $default, $htConfig );
206
+ if ( count( $containsSearch ) == 0 || ( count( $containsSearch ) == count( $default ) ) ) {
207
+ //append this
208
+ $htConfig = array_merge( $htConfig, array( implode( '', $default ) ) );
209
+ file_put_contents( $htPath, implode( '', $htConfig ), LOCK_EX );
210
+ }
211
+ }
212
+ return true;
213
+ }
214
+
215
  public function unProtectContentDir() {
216
  $htPath = WP_CONTENT_DIR . '/' . '.htaccess';
217
  if ( ! is_writeable( $htPath ) ) {
276
  file_put_contents( $htPath, $htConfig, LOCK_EX );
277
  }
278
 
279
+ public function unProtectUploadDir() {
280
+ if ( defined( 'UPLOADS' ) ) {
281
+ $htPath = ABSPATH . UPLOADS . '/' . '.htaccess';
282
+ if ( ! is_writeable( $htPath ) ) {
283
+ return new \WP_Error( Error_Code::NOT_WRITEABLE,
284
+ sprintf( __( "The file %s is not writeable", "defender-security" ), $htPath ) );
285
+ }
286
+ $htConfig = file_get_contents( $htPath );
287
+ $deny = $this->generateHtAccessRule( false );
288
+ $default = array(
289
+ PHP_EOL .'## WP Defender - Protect PHP Executed ##' . PHP_EOL,
290
+ '<Files *.php>' . PHP_EOL .
291
+ $deny .
292
+ '</Files>' . PHP_EOL,
293
+ '## WP Defender - End ##' . PHP_EOL
294
+ );
295
+
296
+ if ( ! empty( $this->new_htconfig ) ) {
297
+ $default = $this->new_htconfig;
298
+ }
299
+
300
+ //Introduced regex
301
+ preg_match_all('/## WP Defender(.*?)## WP Defender - End ##/s', $htConfig, $matches);
302
+ if ( is_array( $matches ) && count( $matches ) > 0 ) {
303
+ $htConfig = str_replace( implode( '', $matches[0] ), '', $htConfig );
304
+ } else {
305
+ $htConfig = str_replace( implode( '', $default ), '', $htConfig );
306
+ }
307
+ $htConfig = trim( $htConfig );
308
+ file_put_contents( $htPath, $htConfig, LOCK_EX );
309
+ }
310
+ }
311
+
312
  /**
313
  * @return bool|\WP_Error
314
  */
321
  $ret = $this->unProtectIncludeDir();
322
  if ( is_wp_error( $ret ) ) {
323
  return $ret;
324
+ }
325
+ $ret = $this->unProtectUploadDir();
326
+ if ( is_wp_error( $ret ) ) {
327
+ return $ret;
328
+ }
329
+
330
  return true;
331
  }
332
 
app/module/hardener/view/rules/protect-information.php CHANGED
@@ -68,7 +68,12 @@
68
  </div>
69
  <div class="<?php echo ( $setting->active_server != 'nginx' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-nginx">
70
  <?php
71
- $wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
 
 
 
 
 
72
 
73
  $rules = "# Turn off directory indexing
74
  autoindex off;
68
  </div>
69
  <div class="<?php echo ( $setting->active_server != 'nginx' ) ? 'wd-hide' : ''; ?> hardener-information hardener-information-nginx">
70
  <?php
71
+ if ( DIRECTORY_SEPARATOR == '\\' ) {
72
+ //Windows
73
+ $wp_content = str_replace( ABSPATH, '', WP_CONTENT_DIR );
74
+ } else {
75
+ $wp_content = str_replace( $_SERVER['DOCUMENT_ROOT'], '', WP_CONTENT_DIR );
76
+ }
77
 
78
  $rules = "# Turn off directory indexing
79
  autoindex off;
app/module/ip-lockout/component/login-protection-api.php CHANGED
@@ -398,6 +398,44 @@ class Login_Protection_Api extends Component {
398
  return false;
399
  }
400
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401
  public static function maybeSendNotification( $type, $model, $settings ) {
402
  $lastSentKey = $type == 'login' ? 'lastSentLockout' : 'lastSent404';
403
  $stopTimeKey = $type == 'login' ? 'stopTimeLockout' : 'stopTime404';
398
  return false;
399
  }
400
 
401
+ /**
402
+ * Check if IP is from Bing, base on https://www.bing.com/webmaster/help/how-to-verify-bingbot-3905dc26
403
+ *
404
+ * @param $ip
405
+ */
406
+ public static function isBingIP( $ip ) {
407
+ $hostname = gethostbyaddr( $ip );
408
+ if ( preg_match( '/\.msnbot|msn\.com$/i', $hostname ) ) {
409
+ $hosts = gethostbynamel( $hostname );
410
+ //check if this match the oringal ip
411
+ foreach ( $hosts as $host ) {
412
+ if ( $ip == $host ) {
413
+ return true;
414
+ }
415
+ }
416
+ }
417
+ return false;
418
+ }
419
+
420
+ public static function isBingUA( $userAgent = '' ) {
421
+ if ( empty( $userAgent ) ) {
422
+ $userAgent = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : null;
423
+ }
424
+ if ( function_exists( 'mb_strtolower' ) ) {
425
+ $userAgent = mb_strtolower( $userAgent, 'UTF-8' );
426
+ } else {
427
+ $userAgent = strtolower( $userAgent );
428
+ }
429
+ //MSN Bot Useragent https://www.bing.com/webmaster/help/which-crawlers-does-bing-use-8c184ec0
430
+ $msnUA = "Bingbot|MSNBot|MSNBot-Media|AdIdxBot|BingPreview";
431
+
432
+ if ( preg_match( '/' . $msnUA . '/i', $userAgent ) ) {
433
+ return true;
434
+ }
435
+
436
+ return false;
437
+ }
438
+
439
  public static function maybeSendNotification( $type, $model, $settings ) {
440
  $lastSentKey = $type == 'login' ? 'lastSentLockout' : 'lastSent404';
441
  $stopTimeKey = $type == 'login' ? 'stopTimeLockout' : 'stopTime404';
app/module/ip-lockout/controller/main.php CHANGED
@@ -230,6 +230,8 @@ class Main extends Controller {
230
  if ( $settings->isWhitelist( $ip ) ) {
231
  return;
232
  } elseif ( $settings->isBlacklist( $ip ) ) {
 
 
233
  $this->renderPartial( 'locked', array(
234
  'message' => $settings->ip_lockout_message
235
  ) );
@@ -341,6 +343,11 @@ class Main extends Controller {
341
  return;
342
  }
343
 
 
 
 
 
 
344
  if ( $settings->login_protection ) {
345
  $this->add_action( 'wp_login_failed', 'recordFailLogin', 9999 );
346
  $this->add_filter( 'authenticate', 'showAttemptLeft', 9999, 3 );
@@ -718,6 +725,7 @@ class Main extends Controller {
718
  if ( $this->hasMethod( 'scheduleReport' ) ) {
719
  $this->scheduleReport();
720
  }
 
721
  wp_send_json_success( $res );
722
  } else {
723
  wp_send_json_error( array(
230
  if ( $settings->isWhitelist( $ip ) ) {
231
  return;
232
  } elseif ( $settings->isBlacklist( $ip ) ) {
233
+ header( 'HTTP/1.0 403 Forbidden' );
234
+ header( 'Cache-Control: private' );
235
  $this->renderPartial( 'locked', array(
236
  'message' => $settings->ip_lockout_message
237
  ) );
343
  return;
344
  }
345
 
346
+ //or bing
347
+ if ( Login_Protection_Api::isBingUA() && Login_Protection_Api::isBingIP( $ip ) ) {
348
+ return;
349
+ }
350
+
351
  if ( $settings->login_protection ) {
352
  $this->add_action( 'wp_login_failed', 'recordFailLogin', 9999 );
353
  $this->add_filter( 'authenticate', 'showAttemptLeft', 9999, 3 );
725
  if ( $this->hasMethod( 'scheduleReport' ) ) {
726
  $this->scheduleReport();
727
  }
728
+ Utils::instance()->submitStatsToDev();
729
  wp_send_json_success( $res );
730
  } else {
731
  wp_send_json_error( array(
app/module/ip-lockout/view/emails/404-lockout.php CHANGED
@@ -457,7 +457,7 @@
457
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
458
  <?php $utils = \WP_Defender\Behavior\Utils::instance() ?>
459
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
460
- <?php printf( __( "We've just locked out the host <strong>%s</strong> from %s due to more than <strong>%s</strong> 404 requests for the file <strong>%s</strong>. They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $ip, $utils->siteURLWithScheme(), $setting->detect_404_threshold, $uri, $setting->detect_404_lockout_duration ) ?>
461
  </p>
462
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
463
  <?php printf( __( "You can view the full lockout logs <a href=\"%s\">here</a>", "defender-security" ), network_admin_url( "admin.php?page=wdf-ip-lockout&view=logs" ) ) ?>
457
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
458
  <?php $utils = \WP_Defender\Behavior\Utils::instance() ?>
459
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
460
+ <?php printf( __( "We've just locked out the host <strong>%s</strong> from %s due to more than <strong>%s</strong> 404 requests for the file <strong>%s</strong>. They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $ip, network_site_url(), $setting->detect_404_threshold, $uri, $setting->detect_404_lockout_duration ) ?>
461
  </p>
462
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
463
  <?php printf( __( "You can view the full lockout logs <a href=\"%s\">here</a>", "defender-security" ), network_admin_url( "admin.php?page=wdf-ip-lockout&view=logs" ) ) ?>
app/module/ip-lockout/view/emails/login-lockout.php CHANGED
@@ -458,7 +458,7 @@
458
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
459
  <?php
460
  $lockout_duration = $setting->login_protection_lockout_ban == true ? __( "They have been banned permanently.", "defender-security" ) : sprintf( __( "They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $setting->login_protection_lockout_duration );
461
- printf( __( "We've just locked out the host <strong>%s</strong> from %s due to more than <strong>%s</strong> failed login attempts. %s", "defender-security" ), $ip, $utils->siteURLWithScheme(), $setting->login_protection_login_attempt, $lockout_duration
462
  ) ?>
463
  </p>
464
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
458
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
459
  <?php
460
  $lockout_duration = $setting->login_protection_lockout_ban == true ? __( "They have been banned permanently.", "defender-security" ) : sprintf( __( "They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $setting->login_protection_lockout_duration );
461
+ printf( __( "We've just locked out the host <strong>%s</strong> from %s due to more than <strong>%s</strong> failed login attempts. %s", "defender-security" ), $ip, network_site_url(), $setting->login_protection_login_attempt, $lockout_duration
462
  ) ?>
463
  </p>
464
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
app/module/ip-lockout/view/emails/login-username-ban.php CHANGED
@@ -458,7 +458,7 @@
458
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
459
  <?php
460
  $lockout_duration = $setting->login_protection_lockout_ban == true ? __( "They have been banned permanently.", "defender-security" ) : sprintf( __( "They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $setting->login_protection_lockout_duration );
461
- printf( __( "We've just locked out the host <strong>%s</strong> from %s due to attempting to login with a banned username. They have been banned permanently.", "defender-security" ), $ip, $utils->siteURLWithScheme() ) ?>
462
  </p>
463
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
464
  <?php printf( __( "You can view the full lockout logs <a href=\"%s\">here</a>", "defender-security" ), network_admin_url( "admin.php?page=wdf-ip-lockout&view=logs" ) ) ?>
458
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
459
  <?php
460
  $lockout_duration = $setting->login_protection_lockout_ban == true ? __( "They have been banned permanently.", "defender-security" ) : sprintf( __( "They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $setting->login_protection_lockout_duration );
461
+ printf( __( "We've just locked out the host <strong>%s</strong> from %s due to attempting to login with a banned username. They have been banned permanently.", "defender-security" ), $ip, network_site_url() ) ?>
462
  </p>
463
  <p style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 15px; font-weight: normal; line-height: 26px; margin: 0; margin-bottom: 0; padding: 0 0 24px; text-align: left;">
464
  <?php printf( __( "You can view the full lockout logs <a href=\"%s\">here</a>", "defender-security" ), network_admin_url( "admin.php?page=wdf-ip-lockout&view=logs" ) ) ?>
app/module/ip-lockout/view/locked.php CHANGED
@@ -4,7 +4,7 @@
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
  <meta http-equiv="Cache-control" content="max-age=0">
7
- <title><?php esc_html_e( "WP Defender", "defender-security" ) ?></title>
8
  <link rel="stylesheet"
9
  href="https://fonts.googleapis.com/css?family=Roboto+Condensed:400,700|Roboto:400,500,300,300italic">
10
  <style type="text/css">
4
  <meta charset="UTF-8">
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
  <meta http-equiv="Cache-control" content="max-age=0">
7
+ <title><?php bloginfo( 'name' ) ?></title>
8
  <link rel="stylesheet"
9
  href="https://fonts.googleapis.com/css?family=Roboto+Condensed:400,700|Roboto:400,500,300,300italic">
10
  <style type="text/css">
app/module/ip-lockout/view/notification/report-free.php CHANGED
@@ -2,7 +2,7 @@
2
  <div class="box-title">
3
  <h3><?php esc_html_e( "Reporting", "defender-security" ) ?></h3>
4
  <a class="button button-green button-small"
5
- href="#pro-feature" rel="dialog"><?php _e( "Upgrade to Pro", "defender-security" ) ?></a>
6
  </div>
7
  <div class="box-content">
8
  <form method="post" id="settings-frm" class="ip-frm">
@@ -76,7 +76,7 @@
76
  </form>
77
  <div class="presale-text">
78
  <div>
79
- <?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools – <a href=\"%s\">Try it all FREE today!</a>", "defender-security" ), "https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade" ) ?>
80
  </div>
81
  </div>
82
  </div>
2
  <div class="box-title">
3
  <h3><?php esc_html_e( "Reporting", "defender-security" ) ?></h3>
4
  <a class="button button-green button-small"
5
+ href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_iplockouts_reports_upgrade_button') ?>" target="_blank"><?php _e( "Upgrade to Pro", "defender-security" ) ?></a>
6
  </div>
7
  <div class="box-content">
8
  <form method="post" id="settings-frm" class="ip-frm">
76
  </form>
77
  <div class="presale-text">
78
  <div>
79
+ <?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all FREE today!</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_iplockouts_reports_upsell_link') ) ?>
80
  </div>
81
  </div>
82
  </div>
app/module/scan/behavior/core-result.php CHANGED
@@ -78,7 +78,7 @@ class Core_Result extends Behavior {
78
 
79
  return true;
80
  } elseif ( $raw['type'] == 'modified' ) {
81
- return new \WP_Error( Error_Code::INVALID, __( "This file can't not remove", "defender-security" ) );
82
  } elseif ( $raw['type'] == 'dir' ) {
83
  $res = $this->deleteFolder( $raw['file'] );
84
  if ( is_wp_error( $res ) ) {
@@ -196,14 +196,15 @@ class Core_Result extends Behavior {
196
  <button type="button" class="button button-small delete-mitem button-grey">
197
  <?php _e( "Delete", "defender-security" ) ?></button>
198
  <div class="confirm-box wd-hide">
199
- <?php _e( "This will permanent remove the file/folder with all content, do you want to do this?", "defender-security" ) ?>
200
- &nbsp;
201
- <button type="submit" class="button button-small button-grey">
202
- <?php _e( "Yes", "defender-security" ) ?>
203
- </button>
204
- <button type="button" class="button button-small button-secondary">
205
- <?php _e( "No", "defender-security" ) ?>
206
- </button>
 
207
  </div>
208
  </form>
209
  <?php elseif ( $raw['type'] == 'modified' ): ?>
78
 
79
  return true;
80
  } elseif ( $raw['type'] == 'modified' ) {
81
+ return new \WP_Error( Error_Code::INVALID, __( "This file can't be removed", "defender-security" ) );
82
  } elseif ( $raw['type'] == 'dir' ) {
83
  $res = $this->deleteFolder( $raw['file'] );
84
  if ( is_wp_error( $res ) ) {
196
  <button type="button" class="button button-small delete-mitem button-grey">
197
  <?php _e( "Delete", "defender-security" ) ?></button>
198
  <div class="confirm-box wd-hide">
199
+ <span><?php _e( "This will permanently remove the selected file/folder. Are you sure you want to continue?", "defender-security" ) ?></span>
200
+ <div>
201
+ <button type="submit" class="button button-small button-grey">
202
+ <?php _e( "Yes", "defender-security" ) ?>
203
+ </button>
204
+ <button type="button" class="button button-small button-secondary">
205
+ <?php _e( "No", "defender-security" ) ?>
206
+ </button>
207
+ </div>
208
  </div>
209
  </form>
210
  <?php elseif ( $raw['type'] == 'modified' ): ?>
app/module/scan/behavior/core-scan.php CHANGED
@@ -34,11 +34,10 @@ class Core_Scan extends Behavior {
34
  $item->parentId = $model->id;
35
  $item->type = 'core';
36
  $item->status = $status;
37
- $relPath = Scan_Api::convertToUnixPath( $current ); //Windows File path fix set outside to be used in both file and dir checks
38
- $current_path = Scan_Api::convertToWindowsAbsPath( $current ); //Windows needs fixing for the paths
39
  if ( is_file( $current ) ) {
40
  //check if this is core or not
41
-
42
  if ( isset( $checksums[ $relPath ] ) && strcmp( md5_file( $current ), $checksums[ $relPath ] ) !== 0 ) {
43
  $item->raw = array(
44
  'type' => 'modified',
@@ -46,6 +45,10 @@ class Core_Scan extends Behavior {
46
  );
47
  $id = $item->save();
48
  } elseif ( ! isset( $checksums[ $relPath ] ) ) {
 
 
 
 
49
  $item->raw = array(
50
  'type' => 'unknown',
51
  'file' => $current_path
@@ -53,6 +56,13 @@ class Core_Scan extends Behavior {
53
  $id = $item->save();
54
  }
55
  } elseif ( is_dir( $current ) ) {
 
 
 
 
 
 
 
56
  //check if this empty then do nothing
57
  $files = File_Helper::findFiles( $current, true, false );
58
  if ( count( $files ) ) {
34
  $item->parentId = $model->id;
35
  $item->type = 'core';
36
  $item->status = $status;
37
+ $relPath = Scan_Api::convertToUnixPath( $current ); //Windows File path fix set outside to be used in both file and dir checks
38
+ $current_path = Scan_Api::convertToWindowsAbsPath( $current ); //Windows needs fixing for the paths
39
  if ( is_file( $current ) ) {
40
  //check if this is core or not
 
41
  if ( isset( $checksums[ $relPath ] ) && strcmp( md5_file( $current ), $checksums[ $relPath ] ) !== 0 ) {
42
  $item->raw = array(
43
  'type' => 'modified',
45
  );
46
  $id = $item->save();
47
  } elseif ( ! isset( $checksums[ $relPath ] ) ) {
48
+ //we need to check if this is wp-config, a hot fix for windows
49
+ if ( DIRECTORY_SEPARATOR == '\\' && $relPath == 'wp-config.php' ) {
50
+ return null;
51
+ }
52
  $item->raw = array(
53
  'type' => 'unknown',
54
  'file' => $current_path
56
  $id = $item->save();
57
  }
58
  } elseif ( is_dir( $current ) ) {
59
+ if ( in_array( $relPath, array(
60
+ 'wp-content',
61
+ 'wp-admin',
62
+ 'wp-includes'
63
+ ) ) ) {
64
+ return null;
65
+ }
66
  //check if this empty then do nothing
67
  $files = File_Helper::findFiles( $current, true, false );
68
  if ( count( $files ) ) {
app/module/scan/behavior/scan.php CHANGED
@@ -132,7 +132,7 @@ class Scan extends Behavior {
132
  <?php if ( Utils::instance()->getAPIKey() ): ?>
133
  <?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
134
  <?php else: ?>
135
- <a href="#pro-feature" rel="dialog" class="button button-pre button-small"
136
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
137
  <?php _e( "Pro Feature", "defender-security" ) ?>
138
  </a>
@@ -147,7 +147,7 @@ class Scan extends Behavior {
147
  <?php if ( Utils::instance()->getAPIKey() ): ?>
148
  <?php echo $model->getCount( 'content' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
149
  <?php else: ?>
150
- <a href="#pro-feature" rel="dialog" class="button button-pre button-small"
151
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
152
  <?php _e( "Pro Feature", "defender-security" ) ?>
153
  </a>
132
  <?php if ( Utils::instance()->getAPIKey() ): ?>
133
  <?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
134
  <?php else: ?>
135
+ <a href="<?php echo Utils::instance()->campaignURL('defender_dash_filescan_pro_tag') ?>" target="_blank" class="button button-pre button-small"
136
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
137
  <?php _e( "Pro Feature", "defender-security" ) ?>
138
  </a>
147
  <?php if ( Utils::instance()->getAPIKey() ): ?>
148
  <?php echo $model->getCount( 'content' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
149
  <?php else: ?>
150
+ <a href="<?php echo Utils::instance()->campaignURL('defender_dash_filescan_pro_tag') ?>" target="_blank" class="button button-pre button-small"
151
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
152
  <?php _e( "Pro Feature", "defender-security" ) ?>
153
  </a>
app/module/scan/controller/main.php CHANGED
@@ -378,7 +378,7 @@ class Main extends \WP_Defender\Controller {
378
  } else {
379
  wp_send_json_success( array(
380
  'mid' => 'mid-' . $model->id,
381
- 'message' => __( "This item has been permanent removed.", "defender-security" ),
382
  'counts' => $this->getIssuesAndIgnoredCounts( $model->parentId )
383
  ) );
384
  }
378
  } else {
379
  wp_send_json_success( array(
380
  'mid' => 'mid-' . $model->id,
381
+ 'message' => __( "This item has been permanently removed", "defender-security" ),
382
  'counts' => $this->getIssuesAndIgnoredCounts( $model->parentId )
383
  ) );
384
  }
app/module/scan/view/automation-free.php CHANGED
@@ -2,7 +2,7 @@
2
  <div class="box-title">
3
  <h3><?php _e( "Reporting", "defender-security" ) ?></h3>
4
  <a class="button button-green button-small"
5
- href="#pro-feature" rel="dialog"><?php _e( "Upgrade to Pro", "defender-security" ) ?></a>
6
  </div>
7
  <div class="box-content">
8
  <form method="post" class="">
@@ -60,7 +60,7 @@
60
  </form>
61
  <div class="presale-text">
62
  <div>
63
- <?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools – <a href=\"%s\">Try it all FREE today!</a>", "defender-security" ), "https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade" ) ?>
64
  </div>
65
  </div>
66
  </div>
2
  <div class="box-title">
3
  <h3><?php _e( "Reporting", "defender-security" ) ?></h3>
4
  <a class="button button-green button-small"
5
+ href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_reports_upgrade_button') ?>" target="_blank"><?php _e( "Upgrade to Pro", "defender-security" ) ?></a>
6
  </div>
7
  <div class="box-content">
8
  <form method="post" class="">
60
  </form>
61
  <div class="presale-text">
62
  <div>
63
+ <?php printf( __( "Schedule automated file scanning and email reporting for all your websites. This feature is included in a WPMU DEV membership along with 100+ plugins & themes, 24/7 support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try it all FREE today!</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_reports_upsell_link') ) ?>
64
  </div>
65
  </div>
66
  </div>
app/module/scan/view/layouts/layout.php CHANGED
@@ -56,7 +56,7 @@
56
  <?php if ( \WP_Defender\Behavior\Utils::instance()->getAPIKey() ): ?>
57
  <?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
58
  <?php else: ?>
59
- <a href="#pro-feature" rel="dialog"
60
  class="button button-pre button-small"
61
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
62
  <?php _e( "Pro Feature", "defender-security" ) ?>
@@ -72,7 +72,7 @@
72
  <?php if ( \WP_Defender\Behavior\Utils::instance()->getAPIKey() ): ?>
73
  <?php echo $model->getCount( 'content' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
74
  <?php else: ?>
75
- <a href="#pro-feature" rel="dialog"
76
  class="button button-pre button-small"
77
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>" >
78
  <?php _e( "Pro Feature", "defender-security" ) ?>
56
  <?php if ( \WP_Defender\Behavior\Utils::instance()->getAPIKey() ): ?>
57
  <?php echo $model->getCount( 'vuln' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'vuln' ) . '</span>' ?>
58
  <?php else: ?>
59
+ <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_summary_pro_tag') ?>" target="_blank"
60
  class="button button-pre button-small"
61
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
62
  <?php _e( "Pro Feature", "defender-security" ) ?>
72
  <?php if ( \WP_Defender\Behavior\Utils::instance()->getAPIKey() ): ?>
73
  <?php echo $model->getCount( 'content' ) == 0 ? ' <i class="def-icon icon-tick"></i>' : '<span class="def-tag tag-error">' . $model->getCount( 'content' ) . '</span>' ?>
74
  <?php else: ?>
75
+ <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_summary_pro_tag') ?>" target="_blank"
76
  class="button button-pre button-small"
77
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>" >
78
  <?php _e( "Pro Feature", "defender-security" ) ?>
app/module/scan/view/scanning.php CHANGED
@@ -47,7 +47,7 @@
47
  <div>
48
  <?php printf( __( "Did you know the Pro version of Defender comes with advanced full code scanning and automated reporting?
49
  Get enhanced security protection as part of a WPMU DEV membership including 100+ plugins & themes, 24/7
50
- support and lots of handy site management tools – <a href=\"%s\">Try Defender Pro today for FREE</a>", "defender-security" ), "https://premium.wpmudev.org/project/wp-defender/" ) ?>
51
  </div>
52
  </div>
53
  <?php endif; ?>
47
  <div>
48
  <?php printf( __( "Did you know the Pro version of Defender comes with advanced full code scanning and automated reporting?
49
  Get enhanced security protection as part of a WPMU DEV membership including 100+ plugins & themes, 24/7
50
+ support and lots of handy site management tools – <a target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_modal_inprogress_upsell_link') ) ?>
51
  </div>
52
  </div>
53
  <?php endif; ?>
app/module/scan/view/setting-free.php CHANGED
@@ -25,7 +25,7 @@
25
  <div class="clear mline"></div>
26
  <div class="feature-pre-require">
27
  <div></div>
28
- <a href="#pro-feature" role="button" rel="dialog" class="button button-small button-pre"
29
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>" >
30
  <?php _e( "Pro Feature", "defender-security" ) ?></a>
31
  <span class="toggle" aria-hidden="true" role="presentation">
@@ -40,7 +40,7 @@
40
  <div class="clear mline"></div>
41
  <div class="feature-pre-require">
42
  <div></div>
43
- <a href="#pro-feature" role="button" rel="dialog" class="button button-small button-pre"
44
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
45
  <?php _e( "Pro Feature", "defender-security" ) ?></a>
46
  <span class="toggle" aria-hidden="true" role="presentation">
@@ -56,8 +56,8 @@
56
  <div class="clear"></div>
57
  <div class="presale-text">
58
  <div>
59
- <?php printf( __( "Defenders scans through every line of code on your website, searching for anything suspicious. This feature is included when you join WPMU DEV, along with 100+ plugins and themes, 24/7 support and lots of handy site management tools. – <a href=\"%s\" role='button'>Try it all FREE today!
60
- </a>", "defender-security" ), "https://premium.wpmudev.org/project/wp-defender/?utm_source=defender&utm_medium=plugin&utm_campaign=defender_modal_upgrade" ) ?>
61
  </div>
62
  </div>
63
  </div>
25
  <div class="clear mline"></div>
26
  <div class="feature-pre-require">
27
  <div></div>
28
+ <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_pro_tag') ?>" role="button" target="_blank" class="button button-small button-pre"
29
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>" >
30
  <?php _e( "Pro Feature", "defender-security" ) ?></a>
31
  <span class="toggle" aria-hidden="true" role="presentation">
40
  <div class="clear mline"></div>
41
  <div class="feature-pre-require">
42
  <div></div>
43
+ <a href="<?php echo \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_pro_tag') ?>" role="button" target="_blank" class="button button-small button-pre"
44
  tooltip="<?php esc_attr_e( "Try Defender Pro free today", "defender-security" ) ?>">
45
  <?php _e( "Pro Feature", "defender-security" ) ?></a>
46
  <span class="toggle" aria-hidden="true" role="presentation">
56
  <div class="clear"></div>
57
  <div class="presale-text">
58
  <div>
59
+ <?php printf( __( "Defenders scans through every line of code on your website, searching for anything suspicious. This feature is included when you join WPMU DEV, along with 100+ plugins and themes, 24/7 support and lots of handy site management tools. – <a href=\"%s\" target='_blank' role='button'>Try it all FREE today!
60
+ </a>", "defender-security" ), \WP_Defender\Behavior\Utils::instance()->campaignURL('defender_filescanning_settings_upsell_link') ) ?>
61
  </div>
62
  </div>
63
  </div>
app/view/activator.php CHANGED
@@ -15,7 +15,7 @@
15
  _e( "Automatic File Scans & Reporting", "defender-security" );
16
  } ?></strong>
17
  <p class="sub">
18
- <?php _e( "Scan your website for file changes, vulnerabilities and injected code and get and get notified about anything suspicious.", "defender-security" ) ?>
19
  </p>
20
  </div>
21
  <div class="column is-2">
15
  _e( "Automatic File Scans & Reporting", "defender-security" );
16
  } ?></strong>
17
  <p class="sub">
18
+ <?php _e( "Scan your website for file changes, vulnerabilities and injected code and get notified about anything suspicious.", "defender-security" ) ?>
19
  </p>
20
  </div>
21
  <div class="column is-2">
app/view/dashboard.php CHANGED
@@ -90,8 +90,9 @@
90
  <div class="line">
91
  <?php _e( "Get all this as part of a WPMU DEV Membership, and the best part is you can try everything absolutely free.", "defender-security" ) ?>
92
  </div>
93
- <a href="https://premium.wpmudev.org/project/wp-defender/" target="_blank"
94
- class="button button-green"><?php _e( "FIND OUT MORE", "defender-security" ) ?></a>
 
95
  </div>
96
  </div>
97
  <?php endif; ?>
90
  <div class="line">
91
  <?php _e( "Get all this as part of a WPMU DEV Membership, and the best part is you can try everything absolutely free.", "defender-security" ) ?>
92
  </div>
93
+ <a href="#pro-feature" rel="dialog"
94
+ class="button button-green">
95
+ <?php _e( "FIND OUT MORE", "defender-security" ) ?></a>
96
  </div>
97
  </div>
98
  <?php endif; ?>
assets/css/styles.css CHANGED
@@ -352,7 +352,7 @@
352
  z-index: 3;
353
  opacity: 1;
354
  position: absolute;
355
- bottom: 15px;
356
  right: 0; }
357
  .wpmud .presale-text {
358
  overflow: hidden;
@@ -725,14 +725,14 @@
725
  margin-left: 25%; }
726
  .columns.is-mobile > .wp-defender .column.is-1 {
727
  flex: none;
728
- width: 8.33333%; }
729
  .columns.is-mobile > .wp-defender .column.is-offset-1 {
730
- margin-left: 8.33333%; }
731
  .columns.is-mobile > .wp-defender .column.is-2 {
732
  flex: none;
733
- width: 16.66667%; }
734
  .columns.is-mobile > .wp-defender .column.is-offset-2 {
735
- margin-left: 16.66667%; }
736
  .columns.is-mobile > .wp-defender .column.is-3 {
737
  flex: none;
738
  width: 25%; }
@@ -740,14 +740,14 @@
740
  margin-left: 25%; }
741
  .columns.is-mobile > .wp-defender .column.is-4 {
742
  flex: none;
743
- width: 33.33333%; }
744
  .columns.is-mobile > .wp-defender .column.is-offset-4 {
745
- margin-left: 33.33333%; }
746
  .columns.is-mobile > .wp-defender .column.is-5 {
747
  flex: none;
748
- width: 41.66667%; }
749
  .columns.is-mobile > .wp-defender .column.is-offset-5 {
750
- margin-left: 41.66667%; }
751
  .columns.is-mobile > .wp-defender .column.is-6 {
752
  flex: none;
753
  width: 50%; }
@@ -755,14 +755,14 @@
755
  margin-left: 50%; }
756
  .columns.is-mobile > .wp-defender .column.is-7 {
757
  flex: none;
758
- width: 58.33333%; }
759
  .columns.is-mobile > .wp-defender .column.is-offset-7 {
760
- margin-left: 58.33333%; }
761
  .columns.is-mobile > .wp-defender .column.is-8 {
762
  flex: none;
763
- width: 66.66667%; }
764
  .columns.is-mobile > .wp-defender .column.is-offset-8 {
765
- margin-left: 66.66667%; }
766
  .columns.is-mobile > .wp-defender .column.is-9 {
767
  flex: none;
768
  width: 75%; }
@@ -770,14 +770,14 @@
770
  margin-left: 75%; }
771
  .columns.is-mobile > .wp-defender .column.is-10 {
772
  flex: none;
773
- width: 83.33333%; }
774
  .columns.is-mobile > .wp-defender .column.is-offset-10 {
775
- margin-left: 83.33333%; }
776
  .columns.is-mobile > .wp-defender .column.is-11 {
777
  flex: none;
778
- width: 91.66667%; }
779
  .columns.is-mobile > .wp-defender .column.is-offset-11 {
780
- margin-left: 91.66667%; }
781
  .columns.is-mobile > .wp-defender .column.is-12 {
782
  flex: none;
783
  width: 100%; }
@@ -816,14 +816,14 @@
816
  margin-left: 25%; }
817
  .wp-defender .column.is-1-mobile {
818
  flex: none;
819
- width: 8.33333%; }
820
  .wp-defender .column.is-offset-1-mobile {
821
- margin-left: 8.33333%; }
822
  .wp-defender .column.is-2-mobile {
823
  flex: none;
824
- width: 16.66667%; }
825
  .wp-defender .column.is-offset-2-mobile {
826
- margin-left: 16.66667%; }
827
  .wp-defender .column.is-3-mobile {
828
  flex: none;
829
  width: 25%; }
@@ -831,14 +831,14 @@
831
  margin-left: 25%; }
832
  .wp-defender .column.is-4-mobile {
833
  flex: none;
834
- width: 33.33333%; }
835
  .wp-defender .column.is-offset-4-mobile {
836
- margin-left: 33.33333%; }
837
  .wp-defender .column.is-5-mobile {
838
  flex: none;
839
- width: 41.66667%; }
840
  .wp-defender .column.is-offset-5-mobile {
841
- margin-left: 41.66667%; }
842
  .wp-defender .column.is-6-mobile {
843
  flex: none;
844
  width: 50%; }
@@ -846,14 +846,14 @@
846
  margin-left: 50%; }
847
  .wp-defender .column.is-7-mobile {
848
  flex: none;
849
- width: 58.33333%; }
850
  .wp-defender .column.is-offset-7-mobile {
851
- margin-left: 58.33333%; }
852
  .wp-defender .column.is-8-mobile {
853
  flex: none;
854
- width: 66.66667%; }
855
  .wp-defender .column.is-offset-8-mobile {
856
- margin-left: 66.66667%; }
857
  .wp-defender .column.is-9-mobile {
858
  flex: none;
859
  width: 75%; }
@@ -861,14 +861,14 @@
861
  margin-left: 75%; }
862
  .wp-defender .column.is-10-mobile {
863
  flex: none;
864
- width: 83.33333%; }
865
  .wp-defender .column.is-offset-10-mobile {
866
- margin-left: 83.33333%; }
867
  .wp-defender .column.is-11-mobile {
868
  flex: none;
869
- width: 91.66667%; }
870
  .wp-defender .column.is-offset-11-mobile {
871
- margin-left: 91.66667%; }
872
  .wp-defender .column.is-12-mobile {
873
  flex: none;
874
  width: 100%; }
@@ -907,14 +907,14 @@
907
  margin-left: 25%; }
908
  .wp-defender .column.is-1, .wp-defender .column.is-1-tablet {
909
  flex: none;
910
- width: 8.33333%; }
911
  .wp-defender .column.is-offset-1, .wp-defender .column.is-offset-1-tablet {
912
- margin-left: 8.33333%; }
913
  .wp-defender .column.is-2, .wp-defender .column.is-2-tablet {
914
  flex: none;
915
- width: 16.66667%; }
916
  .wp-defender .column.is-offset-2, .wp-defender .column.is-offset-2-tablet {
917
- margin-left: 16.66667%; }
918
  .wp-defender .column.is-3, .wp-defender .column.is-3-tablet {
919
  flex: none;
920
  width: 25%; }
@@ -922,14 +922,14 @@
922
  margin-left: 25%; }
923
  .wp-defender .column.is-4, .wp-defender .column.is-4-tablet {
924
  flex: none;
925
- width: 33.33333%; }
926
  .wp-defender .column.is-offset-4, .wp-defender .column.is-offset-4-tablet {
927
- margin-left: 33.33333%; }
928
  .wp-defender .column.is-5, .wp-defender .column.is-5-tablet {
929
  flex: none;
930
- width: 41.66667%; }
931
  .wp-defender .column.is-offset-5, .wp-defender .column.is-offset-5-tablet {
932
- margin-left: 41.66667%; }
933
  .wp-defender .column.is-6, .wp-defender .column.is-6-tablet {
934
  flex: none;
935
  width: 50%; }
@@ -937,14 +937,14 @@
937
  margin-left: 50%; }
938
  .wp-defender .column.is-7, .wp-defender .column.is-7-tablet {
939
  flex: none;
940
- width: 58.33333%; }
941
  .wp-defender .column.is-offset-7, .wp-defender .column.is-offset-7-tablet {
942
- margin-left: 58.33333%; }
943
  .wp-defender .column.is-8, .wp-defender .column.is-8-tablet {
944
  flex: none;
945
- width: 66.66667%; }
946
  .wp-defender .column.is-offset-8, .wp-defender .column.is-offset-8-tablet {
947
- margin-left: 66.66667%; }
948
  .wp-defender .column.is-9, .wp-defender .column.is-9-tablet {
949
  flex: none;
950
  width: 75%; }
@@ -952,14 +952,14 @@
952
  margin-left: 75%; }
953
  .wp-defender .column.is-10, .wp-defender .column.is-10-tablet {
954
  flex: none;
955
- width: 83.33333%; }
956
  .wp-defender .column.is-offset-10, .wp-defender .column.is-offset-10-tablet {
957
- margin-left: 83.33333%; }
958
  .wp-defender .column.is-11, .wp-defender .column.is-11-tablet {
959
  flex: none;
960
- width: 91.66667%; }
961
  .wp-defender .column.is-offset-11, .wp-defender .column.is-offset-11-tablet {
962
- margin-left: 91.66667%; }
963
  .wp-defender .column.is-12, .wp-defender .column.is-12-tablet {
964
  flex: none;
965
  width: 100%; }
@@ -998,14 +998,14 @@
998
  margin-left: 25%; }
999
  .wp-defender .column.is-1-desktop {
1000
  flex: none;
1001
- width: 8.33333%; }
1002
  .wp-defender .column.is-offset-1-desktop {
1003
- margin-left: 8.33333%; }
1004
  .wp-defender .column.is-2-desktop {
1005
  flex: none;
1006
- width: 16.66667%; }
1007
  .wp-defender .column.is-offset-2-desktop {
1008
- margin-left: 16.66667%; }
1009
  .wp-defender .column.is-3-desktop {
1010
  flex: none;
1011
  width: 25%; }
@@ -1013,14 +1013,14 @@
1013
  margin-left: 25%; }
1014
  .wp-defender .column.is-4-desktop {
1015
  flex: none;
1016
- width: 33.33333%; }
1017
  .wp-defender .column.is-offset-4-desktop {
1018
- margin-left: 33.33333%; }
1019
  .wp-defender .column.is-5-desktop {
1020
  flex: none;
1021
- width: 41.66667%; }
1022
  .wp-defender .column.is-offset-5-desktop {
1023
- margin-left: 41.66667%; }
1024
  .wp-defender .column.is-6-desktop {
1025
  flex: none;
1026
  width: 50%; }
@@ -1028,14 +1028,14 @@
1028
  margin-left: 50%; }
1029
  .wp-defender .column.is-7-desktop {
1030
  flex: none;
1031
- width: 58.33333%; }
1032
  .wp-defender .column.is-offset-7-desktop {
1033
- margin-left: 58.33333%; }
1034
  .wp-defender .column.is-8-desktop {
1035
  flex: none;
1036
- width: 66.66667%; }
1037
  .wp-defender .column.is-offset-8-desktop {
1038
- margin-left: 66.66667%; }
1039
  .wp-defender .column.is-9-desktop {
1040
  flex: none;
1041
  width: 75%; }
@@ -1043,14 +1043,14 @@
1043
  margin-left: 75%; }
1044
  .wp-defender .column.is-10-desktop {
1045
  flex: none;
1046
- width: 83.33333%; }
1047
  .wp-defender .column.is-offset-10-desktop {
1048
- margin-left: 83.33333%; }
1049
  .wp-defender .column.is-11-desktop {
1050
  flex: none;
1051
- width: 91.66667%; }
1052
  .wp-defender .column.is-offset-11-desktop {
1053
- margin-left: 91.66667%; }
1054
  .wp-defender .column.is-12-desktop {
1055
  flex: none;
1056
  width: 100%; }
@@ -1089,14 +1089,14 @@
1089
  margin-left: 25%; }
1090
  .wp-defender .column.is-1-widescreen {
1091
  flex: none;
1092
- width: 8.33333%; }
1093
  .wp-defender .column.is-offset-1-widescreen {
1094
- margin-left: 8.33333%; }
1095
  .wp-defender .column.is-2-widescreen {
1096
  flex: none;
1097
- width: 16.66667%; }
1098
  .wp-defender .column.is-offset-2-widescreen {
1099
- margin-left: 16.66667%; }
1100
  .wp-defender .column.is-3-widescreen {
1101
  flex: none;
1102
  width: 25%; }
@@ -1104,14 +1104,14 @@
1104
  margin-left: 25%; }
1105
  .wp-defender .column.is-4-widescreen {
1106
  flex: none;
1107
- width: 33.33333%; }
1108
  .wp-defender .column.is-offset-4-widescreen {
1109
- margin-left: 33.33333%; }
1110
  .wp-defender .column.is-5-widescreen {
1111
  flex: none;
1112
- width: 41.66667%; }
1113
  .wp-defender .column.is-offset-5-widescreen {
1114
- margin-left: 41.66667%; }
1115
  .wp-defender .column.is-6-widescreen {
1116
  flex: none;
1117
  width: 50%; }
@@ -1119,14 +1119,14 @@
1119
  margin-left: 50%; }
1120
  .wp-defender .column.is-7-widescreen {
1121
  flex: none;
1122
- width: 58.33333%; }
1123
  .wp-defender .column.is-offset-7-widescreen {
1124
- margin-left: 58.33333%; }
1125
  .wp-defender .column.is-8-widescreen {
1126
  flex: none;
1127
- width: 66.66667%; }
1128
  .wp-defender .column.is-offset-8-widescreen {
1129
- margin-left: 66.66667%; }
1130
  .wp-defender .column.is-9-widescreen {
1131
  flex: none;
1132
  width: 75%; }
@@ -1134,14 +1134,14 @@
1134
  margin-left: 75%; }
1135
  .wp-defender .column.is-10-widescreen {
1136
  flex: none;
1137
- width: 83.33333%; }
1138
  .wp-defender .column.is-offset-10-widescreen {
1139
- margin-left: 83.33333%; }
1140
  .wp-defender .column.is-11-widescreen {
1141
  flex: none;
1142
- width: 91.66667%; }
1143
  .wp-defender .column.is-offset-11-widescreen {
1144
- margin-left: 91.66667%; }
1145
  .wp-defender .column.is-12-widescreen {
1146
  flex: none;
1147
  width: 100%; }
@@ -1234,7 +1234,7 @@
1234
  clear: both;
1235
  font-size: 50px;
1236
  color: #333;
1237
- margin: 0 3px 0 0;
1238
  width: auto;
1239
  position: relative;
1240
  vertical-align: top; }
@@ -1723,7 +1723,8 @@
1723
  color: #1ABC9C; }
1724
  .wp-defender i.def-icon.icon-warning:before {
1725
  content: '\0044';
1726
- color: #FECF2F; }
 
1727
  .wp-defender i.def-icon.fill-blue:before {
1728
  color: #17A8E3; }
1729
  .wp-defender i.def-icon.fill-red:before {
@@ -2051,6 +2052,12 @@
2051
  font-weight: normal; }
2052
  .wp-defender .wdf-scanning .confirm-box, .wp-defender .scan-dialog .confirm-box {
2053
  font-size: 13px; }
 
 
 
 
 
 
2054
  .wp-defender .wdf-scanning .inner-nav li a, .wp-defender .scan-dialog .inner-nav li a {
2055
  padding-right: 0; }
2056
  .wp-defender .wdf-scanning .inner-nav li a span:not(.def-tag), .wp-defender .scan-dialog .inner-nav li a span:not(.def-tag) {
@@ -2416,3 +2423,5 @@
2416
  .wp-defender.no-close {
2417
  max-width: none;
2418
  margin: 0; }
 
 
352
  z-index: 3;
353
  opacity: 1;
354
  position: absolute;
355
+ top: 10px;
356
  right: 0; }
357
  .wpmud .presale-text {
358
  overflow: hidden;
725
  margin-left: 25%; }
726
  .columns.is-mobile > .wp-defender .column.is-1 {
727
  flex: none;
728
+ width: 8.3333333333%; }
729
  .columns.is-mobile > .wp-defender .column.is-offset-1 {
730
+ margin-left: 8.3333333333%; }
731
  .columns.is-mobile > .wp-defender .column.is-2 {
732
  flex: none;
733
+ width: 16.6666666667%; }
734
  .columns.is-mobile > .wp-defender .column.is-offset-2 {
735
+ margin-left: 16.6666666667%; }
736
  .columns.is-mobile > .wp-defender .column.is-3 {
737
  flex: none;
738
  width: 25%; }
740
  margin-left: 25%; }
741
  .columns.is-mobile > .wp-defender .column.is-4 {
742
  flex: none;
743
+ width: 33.3333333333%; }
744
  .columns.is-mobile > .wp-defender .column.is-offset-4 {
745
+ margin-left: 33.3333333333%; }
746
  .columns.is-mobile > .wp-defender .column.is-5 {
747
  flex: none;
748
+ width: 41.6666666667%; }
749
  .columns.is-mobile > .wp-defender .column.is-offset-5 {
750
+ margin-left: 41.6666666667%; }
751
  .columns.is-mobile > .wp-defender .column.is-6 {
752
  flex: none;
753
  width: 50%; }
755
  margin-left: 50%; }
756
  .columns.is-mobile > .wp-defender .column.is-7 {
757
  flex: none;
758
+ width: 58.3333333333%; }
759
  .columns.is-mobile > .wp-defender .column.is-offset-7 {
760
+ margin-left: 58.3333333333%; }
761
  .columns.is-mobile > .wp-defender .column.is-8 {
762
  flex: none;
763
+ width: 66.6666666667%; }
764
  .columns.is-mobile > .wp-defender .column.is-offset-8 {
765
+ margin-left: 66.6666666667%; }
766
  .columns.is-mobile > .wp-defender .column.is-9 {
767
  flex: none;
768
  width: 75%; }
770
  margin-left: 75%; }
771
  .columns.is-mobile > .wp-defender .column.is-10 {
772
  flex: none;
773
+ width: 83.3333333333%; }
774
  .columns.is-mobile > .wp-defender .column.is-offset-10 {
775
+ margin-left: 83.3333333333%; }
776
  .columns.is-mobile > .wp-defender .column.is-11 {
777
  flex: none;
778
+ width: 91.6666666667%; }
779
  .columns.is-mobile > .wp-defender .column.is-offset-11 {
780
+ margin-left: 91.6666666667%; }
781
  .columns.is-mobile > .wp-defender .column.is-12 {
782
  flex: none;
783
  width: 100%; }
816
  margin-left: 25%; }
817
  .wp-defender .column.is-1-mobile {
818
  flex: none;
819
+ width: 8.3333333333%; }
820
  .wp-defender .column.is-offset-1-mobile {
821
+ margin-left: 8.3333333333%; }
822
  .wp-defender .column.is-2-mobile {
823
  flex: none;
824
+ width: 16.6666666667%; }
825
  .wp-defender .column.is-offset-2-mobile {
826
+ margin-left: 16.6666666667%; }
827
  .wp-defender .column.is-3-mobile {
828
  flex: none;
829
  width: 25%; }
831
  margin-left: 25%; }
832
  .wp-defender .column.is-4-mobile {
833
  flex: none;
834
+ width: 33.3333333333%; }
835
  .wp-defender .column.is-offset-4-mobile {
836
+ margin-left: 33.3333333333%; }
837
  .wp-defender .column.is-5-mobile {
838
  flex: none;
839
+ width: 41.6666666667%; }
840
  .wp-defender .column.is-offset-5-mobile {
841
+ margin-left: 41.6666666667%; }
842
  .wp-defender .column.is-6-mobile {
843
  flex: none;
844
  width: 50%; }
846
  margin-left: 50%; }
847
  .wp-defender .column.is-7-mobile {
848
  flex: none;
849
+ width: 58.3333333333%; }
850
  .wp-defender .column.is-offset-7-mobile {
851
+ margin-left: 58.3333333333%; }
852
  .wp-defender .column.is-8-mobile {
853
  flex: none;
854
+ width: 66.6666666667%; }
855
  .wp-defender .column.is-offset-8-mobile {
856
+ margin-left: 66.6666666667%; }
857
  .wp-defender .column.is-9-mobile {
858
  flex: none;
859
  width: 75%; }
861
  margin-left: 75%; }
862
  .wp-defender .column.is-10-mobile {
863
  flex: none;
864
+ width: 83.3333333333%; }
865
  .wp-defender .column.is-offset-10-mobile {
866
+ margin-left: 83.3333333333%; }
867
  .wp-defender .column.is-11-mobile {
868
  flex: none;
869
+ width: 91.6666666667%; }
870
  .wp-defender .column.is-offset-11-mobile {
871
+ margin-left: 91.6666666667%; }
872
  .wp-defender .column.is-12-mobile {
873
  flex: none;
874
  width: 100%; }
907
  margin-left: 25%; }
908
  .wp-defender .column.is-1, .wp-defender .column.is-1-tablet {
909
  flex: none;
910
+ width: 8.3333333333%; }
911
  .wp-defender .column.is-offset-1, .wp-defender .column.is-offset-1-tablet {
912
+ margin-left: 8.3333333333%; }
913
  .wp-defender .column.is-2, .wp-defender .column.is-2-tablet {
914
  flex: none;
915
+ width: 16.6666666667%; }
916
  .wp-defender .column.is-offset-2, .wp-defender .column.is-offset-2-tablet {
917
+ margin-left: 16.6666666667%; }
918
  .wp-defender .column.is-3, .wp-defender .column.is-3-tablet {
919
  flex: none;
920
  width: 25%; }
922
  margin-left: 25%; }
923
  .wp-defender .column.is-4, .wp-defender .column.is-4-tablet {
924
  flex: none;
925
+ width: 33.3333333333%; }
926
  .wp-defender .column.is-offset-4, .wp-defender .column.is-offset-4-tablet {
927
+ margin-left: 33.3333333333%; }
928
  .wp-defender .column.is-5, .wp-defender .column.is-5-tablet {
929
  flex: none;
930
+ width: 41.6666666667%; }
931
  .wp-defender .column.is-offset-5, .wp-defender .column.is-offset-5-tablet {
932
+ margin-left: 41.6666666667%; }
933
  .wp-defender .column.is-6, .wp-defender .column.is-6-tablet {
934
  flex: none;
935
  width: 50%; }
937
  margin-left: 50%; }
938
  .wp-defender .column.is-7, .wp-defender .column.is-7-tablet {
939
  flex: none;
940
+ width: 58.3333333333%; }
941
  .wp-defender .column.is-offset-7, .wp-defender .column.is-offset-7-tablet {
942
+ margin-left: 58.3333333333%; }
943
  .wp-defender .column.is-8, .wp-defender .column.is-8-tablet {
944
  flex: none;
945
+ width: 66.6666666667%; }
946
  .wp-defender .column.is-offset-8, .wp-defender .column.is-offset-8-tablet {
947
+ margin-left: 66.6666666667%; }
948
  .wp-defender .column.is-9, .wp-defender .column.is-9-tablet {
949
  flex: none;
950
  width: 75%; }
952
  margin-left: 75%; }
953
  .wp-defender .column.is-10, .wp-defender .column.is-10-tablet {
954
  flex: none;
955
+ width: 83.3333333333%; }
956
  .wp-defender .column.is-offset-10, .wp-defender .column.is-offset-10-tablet {
957
+ margin-left: 83.3333333333%; }
958
  .wp-defender .column.is-11, .wp-defender .column.is-11-tablet {
959
  flex: none;
960
+ width: 91.6666666667%; }
961
  .wp-defender .column.is-offset-11, .wp-defender .column.is-offset-11-tablet {
962
+ margin-left: 91.6666666667%; }
963
  .wp-defender .column.is-12, .wp-defender .column.is-12-tablet {
964
  flex: none;
965
  width: 100%; }
998
  margin-left: 25%; }
999
  .wp-defender .column.is-1-desktop {
1000
  flex: none;
1001
+ width: 8.3333333333%; }
1002
  .wp-defender .column.is-offset-1-desktop {
1003
+ margin-left: 8.3333333333%; }
1004
  .wp-defender .column.is-2-desktop {
1005
  flex: none;
1006
+ width: 16.6666666667%; }
1007
  .wp-defender .column.is-offset-2-desktop {
1008
+ margin-left: 16.6666666667%; }
1009
  .wp-defender .column.is-3-desktop {
1010
  flex: none;
1011
  width: 25%; }
1013
  margin-left: 25%; }
1014
  .wp-defender .column.is-4-desktop {
1015
  flex: none;
1016
+ width: 33.3333333333%; }
1017
  .wp-defender .column.is-offset-4-desktop {
1018
+ margin-left: 33.3333333333%; }
1019
  .wp-defender .column.is-5-desktop {
1020
  flex: none;
1021
+ width: 41.6666666667%; }
1022
  .wp-defender .column.is-offset-5-desktop {
1023
+ margin-left: 41.6666666667%; }
1024
  .wp-defender .column.is-6-desktop {
1025
  flex: none;
1026
  width: 50%; }
1028
  margin-left: 50%; }
1029
  .wp-defender .column.is-7-desktop {
1030
  flex: none;
1031
+ width: 58.3333333333%; }
1032
  .wp-defender .column.is-offset-7-desktop {
1033
+ margin-left: 58.3333333333%; }
1034
  .wp-defender .column.is-8-desktop {
1035
  flex: none;
1036
+ width: 66.6666666667%; }
1037
  .wp-defender .column.is-offset-8-desktop {
1038
+ margin-left: 66.6666666667%; }
1039
  .wp-defender .column.is-9-desktop {
1040
  flex: none;
1041
  width: 75%; }
1043
  margin-left: 75%; }
1044
  .wp-defender .column.is-10-desktop {
1045
  flex: none;
1046
+ width: 83.3333333333%; }
1047
  .wp-defender .column.is-offset-10-desktop {
1048
+ margin-left: 83.3333333333%; }
1049
  .wp-defender .column.is-11-desktop {
1050
  flex: none;
1051
+ width: 91.6666666667%; }
1052
  .wp-defender .column.is-offset-11-desktop {
1053
+ margin-left: 91.6666666667%; }
1054
  .wp-defender .column.is-12-desktop {
1055
  flex: none;
1056
  width: 100%; }
1089
  margin-left: 25%; }
1090
  .wp-defender .column.is-1-widescreen {
1091
  flex: none;
1092
+ width: 8.3333333333%; }
1093
  .wp-defender .column.is-offset-1-widescreen {
1094
+ margin-left: 8.3333333333%; }
1095
  .wp-defender .column.is-2-widescreen {
1096
  flex: none;
1097
+ width: 16.6666666667%; }
1098
  .wp-defender .column.is-offset-2-widescreen {
1099
+ margin-left: 16.6666666667%; }
1100
  .wp-defender .column.is-3-widescreen {
1101
  flex: none;
1102
  width: 25%; }
1104
  margin-left: 25%; }
1105
  .wp-defender .column.is-4-widescreen {
1106
  flex: none;
1107
+ width: 33.3333333333%; }
1108
  .wp-defender .column.is-offset-4-widescreen {
1109
+ margin-left: 33.3333333333%; }
1110
  .wp-defender .column.is-5-widescreen {
1111
  flex: none;
1112
+ width: 41.6666666667%; }
1113
  .wp-defender .column.is-offset-5-widescreen {
1114
+ margin-left: 41.6666666667%; }
1115
  .wp-defender .column.is-6-widescreen {
1116
  flex: none;
1117
  width: 50%; }
1119
  margin-left: 50%; }
1120
  .wp-defender .column.is-7-widescreen {
1121
  flex: none;
1122
+ width: 58.3333333333%; }
1123
  .wp-defender .column.is-offset-7-widescreen {
1124
+ margin-left: 58.3333333333%; }
1125
  .wp-defender .column.is-8-widescreen {
1126
  flex: none;
1127
+ width: 66.6666666667%; }
1128
  .wp-defender .column.is-offset-8-widescreen {
1129
+ margin-left: 66.6666666667%; }
1130
  .wp-defender .column.is-9-widescreen {
1131
  flex: none;
1132
  width: 75%; }
1134
  margin-left: 75%; }
1135
  .wp-defender .column.is-10-widescreen {
1136
  flex: none;
1137
+ width: 83.3333333333%; }
1138
  .wp-defender .column.is-offset-10-widescreen {
1139
+ margin-left: 83.3333333333%; }
1140
  .wp-defender .column.is-11-widescreen {
1141
  flex: none;
1142
+ width: 91.6666666667%; }
1143
  .wp-defender .column.is-offset-11-widescreen {
1144
+ margin-left: 91.6666666667%; }
1145
  .wp-defender .column.is-12-widescreen {
1146
  flex: none;
1147
  width: 100%; }
1234
  clear: both;
1235
  font-size: 50px;
1236
  color: #333;
1237
+ margin: 0;
1238
  width: auto;
1239
  position: relative;
1240
  vertical-align: top; }
1723
  color: #1ABC9C; }
1724
  .wp-defender i.def-icon.icon-warning:before {
1725
  content: '\0044';
1726
+ color: #FECF2F;
1727
+ opacity: 0; }
1728
  .wp-defender i.def-icon.fill-blue:before {
1729
  color: #17A8E3; }
1730
  .wp-defender i.def-icon.fill-red:before {
2052
  font-weight: normal; }
2053
  .wp-defender .wdf-scanning .confirm-box, .wp-defender .scan-dialog .confirm-box {
2054
  font-size: 13px; }
2055
+ .wp-defender .wdf-scanning .confirm-box span, .wp-defender .scan-dialog .confirm-box span {
2056
+ display: inline-block;
2057
+ width: 70%;
2058
+ float: left; }
2059
+ .wp-defender .wdf-scanning .scan-frm.delete-item, .wp-defender .scan-dialog .scan-frm.delete-item {
2060
+ max-width: 85%; }
2061
  .wp-defender .wdf-scanning .inner-nav li a, .wp-defender .scan-dialog .inner-nav li a {
2062
  padding-right: 0; }
2063
  .wp-defender .wdf-scanning .inner-nav li a span:not(.def-tag), .wp-defender .scan-dialog .inner-nav li a span:not(.def-tag) {
2423
  .wp-defender.no-close {
2424
  max-width: none;
2425
  margin: 0; }
2426
+
2427
+ /*# sourceMappingURL=styles.css.map */
assets/img/scanning-man.png ADDED
Binary file
changelog.txt CHANGED
@@ -1,9 +1,25 @@
1
  Plugin Name: WP Defender
2
  Author: Hoang Ngo, Aaron Edwards
3
- Tested up to: 4.7.4
4
 
5
  Change Log:
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  1.7.4 - 2017-20-11
8
  ----------------------------------------------------------------------
9
  - Fix: Conflict with Jetpack where Defender 2FA module would not detect if Jetpack 2FA was disabled.
1
  Plugin Name: WP Defender
2
  Author: Hoang Ngo, Aaron Edwards
3
+ Tested up to: 4.9.4
4
 
5
  Change Log:
6
 
7
+ 1.7.6 - 2017-19-03
8
+ ----------------------------------------------------------------------
9
+ - Fix: Defender now can recognize and verify Bing Bot for whitelisting
10
+ - Fix: Lockout page now will use site title instead of the text 'WP Defender'
11
+ - Other minor enhancements and fixes
12
+
13
+ 1.7.5 - 2017-07-02
14
+ ----------------------------------------------------------------------
15
+ - Fix: Report status missing in Hub Security tab
16
+ - Fix: Some themes/plugins shown as a vulnerability but no info available
17
+ - Other minor enhancements and fixes
18
+
19
+ 1.7.4.1 - 2017-4-12
20
+ ----------------------------------------------------------------------
21
+ - Added: Endpoint API so HUB can work with Defender natively through WPMU DEV Dashboard plugin
22
+
23
  1.7.4 - 2017-20-11
24
  ----------------------------------------------------------------------
25
  - Fix: Conflict with Jetpack where Defender 2FA module would not detect if Jetpack 2FA was disabled.
languages/wpdef-default.pot CHANGED
@@ -1,14 +1,14 @@
1
- # Copyright (C) 2017 WPMU DEV
2
  # This file is distributed under the GNU General Public License (Version 2 - GPLv2).
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: WP Defender Pro 1.7.4\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
- "POT-Creation-Date: 2017-11-20 09:56:01+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2017-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
14
  "X-Generator: grunt-wp-i18n1.0.0\n"
@@ -19,7 +19,7 @@ msgstr ""
19
  msgid "BLACKLIST MONITOR"
20
  msgstr ""
21
 
22
- #: app/behavior/blacklist-free.php:24 app/behavior/blacklist.php:61
23
  #: app/module/audit/behavior/audit-free.php:20
24
  #: app/module/scan/behavior/scan.php:136 app/module/scan/behavior/scan.php:151
25
  #: app/module/scan/view/layouts/layout.php:61
@@ -29,12 +29,12 @@ msgstr ""
29
  msgid "Try Defender Pro free today"
30
  msgstr ""
31
 
32
- #: app/behavior/blacklist-free.php:25 app/behavior/blacklist.php:62
33
  #: app/module/audit/behavior/audit-free.php:20
34
  msgid "PRO FEATURE"
35
  msgstr ""
36
 
37
- #: app/behavior/blacklist-free.php:29 app/behavior/blacklist.php:34
38
  #: app/behavior/blacklist.php:66
39
  msgid ""
40
  "Automatically check if you’re on Google’s blacklist every 6 hours. If "
@@ -42,7 +42,7 @@ msgid ""
42
  " wrong, we’ll let you know via email."
43
  msgstr ""
44
 
45
- #: app/behavior/blacklist-free.php:33 app/behavior/blacklist.php:70
46
  #: app/module/audit/view/free.php:17
47
  #: app/module/ip-lockout/view/notification/report-free.php:5
48
  #: app/module/scan/view/automation-free.php:5
@@ -152,17 +152,17 @@ msgid "Lockout reports are active scheduled to send %s"
152
  msgstr ""
153
 
154
  #: app/behavior/report-free.php:129 app/behavior/report.php:224
155
- #: app/behavior/utils.php:848 free/utils.php:656
156
  msgid "daily"
157
  msgstr ""
158
 
159
  #: app/behavior/report-free.php:132 app/behavior/report.php:227
160
- #: app/behavior/utils.php:851 free/utils.php:659
161
  msgid "weekly"
162
  msgstr ""
163
 
164
  #: app/behavior/report-free.php:135 app/behavior/report.php:230
165
- #: app/behavior/utils.php:854 free/utils.php:662
166
  msgid "monthly"
167
  msgstr ""
168
 
@@ -216,22 +216,27 @@ msgstr ""
216
  msgid "Guest"
217
  msgstr ""
218
 
219
- #: app/behavior/utils.php:731
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
- #: app/behavior/utils.php:732
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
- #: app/behavior/utils.php:733 app/module/scan/behavior/scan.php:145
228
  #: app/module/scan/view/layouts/layout.php:70
229
  #: app/module/scan/view/setting-free.php:50 app/module/scan/view/setting.php:43
230
  #: app/view/settings.php:98
231
  msgid "Suspicious Code"
232
  msgstr ""
233
 
234
- #: app/behavior/utils.php:831 free/utils.php:639
 
 
 
 
 
235
  msgid "Please upgrade to 5.3 or later"
236
  msgstr ""
237
 
@@ -239,32 +244,36 @@ msgstr ""
239
  msgid "Dashboard"
240
  msgstr ""
241
 
242
- #: app/controller/dashboard.php:306 app/controller/dashboard.php:308
243
- #: app/controller/requirement.php:69 app/module/ip-lockout/view/locked.php:75
244
  msgid "Defender"
245
  msgstr ""
246
 
247
- #: app/controller/dashboard.php:340
 
 
 
 
248
  msgid "QUICK SETUP"
249
  msgstr ""
250
 
251
- #: app/controller/dashboard.php:340
252
  msgid "Skip"
253
  msgstr ""
254
 
255
- #: app/controller/dashboard.php:341
256
  msgid "Activating File Scanning..."
257
  msgstr ""
258
 
259
- #: app/controller/dashboard.php:342
260
  msgid "Activating Audit Module..."
261
  msgstr ""
262
 
263
- #: app/controller/dashboard.php:343
264
  msgid "Activating IP Lockouts Module..."
265
  msgstr ""
266
 
267
- #: app/controller/dashboard.php:344
268
  msgid "Activating Blacklist Monitoring..."
269
  msgstr ""
270
 
@@ -401,8 +410,8 @@ msgid "Whoops, the passcode you entered was incorrect or expired."
401
  msgstr ""
402
 
403
  #: app/module/advanced-tools/controller/main.php:457
404
- #: app/module/audit/controller/main.php:196
405
- #: app/module/ip-lockout/controller/main.php:693
406
  #: app/module/scan/controller/main.php:306
407
  msgid "Your settings have been updated."
408
  msgstr ""
@@ -483,7 +492,7 @@ msgid "Two factor authentication is active."
483
  msgstr ""
484
 
485
  #: app/module/advanced-tools/view/login/enabled.php:12
486
- msgid "Disabled"
487
  msgstr ""
488
 
489
  #: app/module/advanced-tools/view/login/enabled.php:17
@@ -620,59 +629,59 @@ msgstr ""
620
  msgid "Please hold on, Defender will update Audit information soon..."
621
  msgstr ""
622
 
623
- #: app/module/audit/component/audit-api.php:57
624
- #: app/module/audit/component/audit-api.php:89
625
  msgid ""
626
  "Whoops, Defender had trouble loading up your event log. You can try a <a "
627
  "href='%s'class=''>​quick refresh</a>​ of this page or check back again "
628
  "later."
629
  msgstr ""
630
 
631
- #: app/module/audit/component/audit-api.php:114
632
  msgid "trashed"
633
  msgstr ""
634
 
635
- #: app/module/audit/component/audit-api.php:115
636
  msgid "updated"
637
  msgstr ""
638
 
639
- #: app/module/audit/component/audit-api.php:116
640
  msgid "deleted"
641
  msgstr ""
642
 
643
- #: app/module/audit/component/audit-api.php:117
644
  msgid "created"
645
  msgstr ""
646
 
647
- #: app/module/audit/component/audit-api.php:118
648
  msgid "restored"
649
  msgstr ""
650
 
651
- #: app/module/audit/component/audit-api.php:161
652
  msgid "year"
653
  msgstr ""
654
 
655
- #: app/module/audit/component/audit-api.php:162
656
  msgid "month"
657
  msgstr ""
658
 
659
- #: app/module/audit/component/audit-api.php:163
660
  msgid "week"
661
  msgstr ""
662
 
663
- #: app/module/audit/component/audit-api.php:164
664
  msgid "day"
665
  msgstr ""
666
 
667
- #: app/module/audit/component/audit-api.php:165
668
  msgid "hour"
669
  msgstr ""
670
 
671
- #: app/module/audit/component/audit-api.php:166
672
  msgid "minute"
673
  msgstr ""
674
 
675
- #: app/module/audit/component/audit-api.php:167
676
  msgid "second"
677
  msgstr ""
678
 
@@ -1065,7 +1074,7 @@ msgstr ""
1065
  msgid "Login Name"
1066
  msgstr ""
1067
 
1068
- #: app/module/audit/component/options-audit.php:175 app/view/login-modal.php:11
1069
  msgid "Password"
1070
  msgstr ""
1071
 
@@ -1164,7 +1173,7 @@ msgstr ""
1164
  #: app/module/scan/view/layouts/layout.php:132
1165
  #: app/module/scan/view/layouts/layout.php:149
1166
  #: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
1167
- #: app/view/settings.php:6 free/main-activator.php:158 main-activator.php:96
1168
  msgid "Settings"
1169
  msgstr ""
1170
 
@@ -1274,7 +1283,7 @@ msgid "password reset"
1274
  msgstr ""
1275
 
1276
  #: app/module/audit/controller/main-free.php:36
1277
- #: app/module/audit/controller/main.php:503
1278
  #: app/module/audit/view/pro-feature.php:22
1279
  #: app/module/ip-lockout/view/pro-feature.php:22
1280
  #: app/module/scan/view/pro-feature.php:22 app/view/activator.php:33
@@ -1282,86 +1291,81 @@ msgstr ""
1282
  msgid "Audit Logging"
1283
  msgstr ""
1284
 
1285
- #: app/module/audit/controller/main.php:83 app/module/audit/view/table.php:20
1286
  msgid "Summary"
1287
  msgstr ""
1288
 
1289
- #: app/module/audit/controller/main.php:84 app/module/audit/view/table.php:58
1290
  #: app/module/audit/view/table.php:154
1291
  msgid "Date / Time"
1292
  msgstr ""
1293
 
1294
- #: app/module/audit/controller/main.php:85 app/module/audit/view/table.php:54
1295
  #: app/module/audit/view/table.php:104
1296
  msgid "Context"
1297
  msgstr ""
1298
 
1299
- #: app/module/audit/controller/main.php:86 app/module/audit/view/table.php:55
1300
  #: app/module/audit/view/table.php:115
1301
  msgid "Type"
1302
  msgstr ""
1303
 
1304
- #: app/module/audit/controller/main.php:87 app/module/audit/view/table.php:56
1305
  #: app/module/audit/view/table.php:126
1306
  msgid "IP address"
1307
  msgstr ""
1308
 
1309
- #: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:57
1310
  #: app/module/audit/view/table.php:137
1311
  msgid "User"
1312
  msgstr ""
1313
 
1314
- #: app/module/audit/controller/main.php:143
1315
- #: app/module/ip-lockout/controller/main.php:92
1316
- msgid "Never"
1317
- msgstr ""
1318
-
1319
- #: app/module/audit/controller/main.php:203
1320
  #: app/module/audit/view/layouts/layout.php:39
1321
  msgid "at %s"
1322
  msgstr ""
1323
 
1324
- #: app/module/audit/controller/main.php:205
1325
  #: app/module/audit/view/layouts/layout.php:42
1326
  msgid "%s at %s"
1327
  msgstr ""
1328
 
1329
- #: app/module/audit/controller/main.php:344
1330
  msgid "Hi {USER_NAME},"
1331
  msgstr ""
1332
 
1333
- #: app/module/audit/controller/main.php:346
1334
  msgid ""
1335
  "It’s WP Defender here, reporting from the frontline with a quick update on "
1336
  "what’s been happening at <a href=\"%s\">%s</a>."
1337
  msgstr ""
1338
 
1339
- #: app/module/audit/controller/main.php:358
1340
  msgid "Event Type"
1341
  msgstr ""
1342
 
1343
- #: app/module/audit/controller/main.php:362
1344
  msgid "Action Summaries"
1345
  msgstr ""
1346
 
1347
- #: app/module/audit/controller/main.php:403
1348
  msgid "You can view the full audit report for your site here."
1349
  msgstr ""
1350
 
1351
- #: app/module/audit/controller/main.php:436
1352
  msgid "There were no events logged for %s"
1353
  msgstr ""
1354
 
1355
- #: app/module/audit/controller/main.php:441
1356
- #: app/module/audit/controller/main.php:467
1357
  msgid "Here’s what’s been happening at %s"
1358
  msgstr ""
1359
 
1360
- #: app/module/audit/controller/main.php:559 app/view/settings.php:209
1361
  msgid "Type a user’s name"
1362
  msgstr ""
1363
 
1364
- #: app/module/audit/controller/main.php:560
1365
  msgid "We did not find an user with this name..."
1366
  msgstr ""
1367
 
@@ -1433,6 +1437,7 @@ msgid "<a href=\"%s\">Configure reporting preferences</a>"
1433
  msgstr ""
1434
 
1435
  #: app/module/audit/view/free.php:9 free/main-activator.php:118
 
1436
  msgid "Upgrade"
1437
  msgstr ""
1438
 
@@ -1764,12 +1769,15 @@ msgstr ""
1764
  #: app/module/hardener/component/protect-information-service.php:46
1765
  #: app/module/hardener/component/protect-information-service.php:69
1766
  #: app/module/hardener/component/security-key-service.php:48
1767
- #: app/module/hardener/component/servers/apache-service.php:62
1768
- #: app/module/hardener/component/servers/apache-service.php:66
1769
- #: app/module/hardener/component/servers/apache-service.php:106
1770
- #: app/module/hardener/component/servers/apache-service.php:110
1771
- #: app/module/hardener/component/servers/apache-service.php:161
1772
- #: app/module/hardener/component/servers/apache-service.php:192
 
 
 
1773
  msgid "The file %s is not writeable"
1774
  msgstr ""
1775
 
@@ -1852,7 +1860,7 @@ msgstr ""
1852
  msgid "Duration can only be a number and greater than 0"
1853
  msgstr ""
1854
 
1855
- #: app/module/hardener/component/login-duration.php:194
1856
  msgid ""
1857
  "Your session has expired because it has been over %d days since your last "
1858
  "login. Please log back in to continue."
@@ -2265,38 +2273,38 @@ msgid "Add .htaccess file"
2265
  msgstr ""
2266
 
2267
  #: app/module/hardener/view/rules/prevent-php-executed.php:138
2268
- #: app/module/hardener/view/rules/protect-information.php:93
2269
  msgid "For NGINX servers:"
2270
  msgstr ""
2271
 
2272
  #: app/module/hardener/view/rules/prevent-php-executed.php:141
2273
- #: app/module/hardener/view/rules/protect-information.php:96
2274
  msgid ""
2275
  "Copy the generated code into your site specific .conf file usually located "
2276
  "in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/..."
2277
  msgstr ""
2278
 
2279
  #: app/module/hardener/view/rules/prevent-php-executed.php:144
2280
- #: app/module/hardener/view/rules/protect-information.php:99
2281
  msgid ""
2282
  "Add the code above inside the <strong>server</strong> section in the file, "
2283
  "right before the php location block. Looks something like:"
2284
  msgstr ""
2285
 
2286
  #: app/module/hardener/view/rules/prevent-php-executed.php:148
2287
- #: app/module/hardener/view/rules/protect-information.php:103
2288
  msgid "Reload NGINX."
2289
  msgstr ""
2290
 
2291
  #: app/module/hardener/view/rules/prevent-php-executed.php:151
2292
- #: app/module/hardener/view/rules/protect-information.php:106
2293
  msgid ""
2294
  "Still having trouble? <a target='_blank' href=\"%s\">Open a support "
2295
  "ticket</a>."
2296
  msgstr ""
2297
 
2298
  #: app/module/hardener/view/rules/prevent-php-executed.php:161
2299
- #: app/module/hardener/view/rules/protect-information.php:112
2300
  msgid "For IIS servers, <a href=\"%s\">visit Microsoft TechNet</a>"
2301
  msgstr ""
2302
 
@@ -2340,7 +2348,7 @@ msgstr ""
2340
  msgid "Your WordPress is protected."
2341
  msgstr ""
2342
 
2343
- #: app/module/hardener/view/rules/protect-information.php:117
2344
  msgid "For IIS 7 servers, <a href=\"%s\">visit Microsoft TechNet</a>"
2345
  msgstr ""
2346
 
@@ -2451,8 +2459,8 @@ msgid "Lockout notifications are disabled"
2451
  msgstr ""
2452
 
2453
  #: app/module/ip-lockout/component/login-protection-api.php:61
2454
- #: app/module/ip-lockout/controller/main.php:588
2455
- #: app/module/ip-lockout/controller/main.php:597
2456
  msgid ""
2457
  "You have been locked out by the administrator for attempting to login with "
2458
  "a banned username"
@@ -2591,64 +2599,64 @@ msgstr ""
2591
  msgid "Demo"
2592
  msgstr ""
2593
 
2594
- #: app/module/ip-lockout/controller/main.php:402
2595
  msgid "404 lockout alert for %s"
2596
  msgstr ""
2597
 
2598
- #: app/module/ip-lockout/controller/main.php:429
2599
  msgid "Login lockout alert for %s"
2600
  msgstr ""
2601
 
2602
- #: app/module/ip-lockout/controller/main.php:527
2603
  msgid "Failed login attempt with username %s"
2604
  msgstr ""
2605
 
2606
- #: app/module/ip-lockout/controller/main.php:590
2607
- #: app/module/ip-lockout/controller/main.php:600
2608
  msgid "%d login attempts remaining"
2609
  msgstr ""
2610
 
2611
- #: app/module/ip-lockout/controller/main.php:689
2612
  msgid ""
2613
  "Your settings have been updated, however some IPs were removed because "
2614
  "invalid format, or you blacklist yourself"
2615
  msgstr ""
2616
 
2617
- #: app/module/ip-lockout/controller/main.php:700
2618
  msgid "Login Protection has been activated."
2619
  msgstr ""
2620
 
2621
- #: app/module/ip-lockout/controller/main.php:702
2622
  msgid "Login Protection has been deactivated."
2623
  msgstr ""
2624
 
2625
- #: app/module/ip-lockout/controller/main.php:707
2626
  msgid "404 Detection has been activated."
2627
  msgstr ""
2628
 
2629
- #: app/module/ip-lockout/controller/main.php:709
2630
  msgid "404 Detection has been deactivated."
2631
  msgstr ""
2632
 
2633
- #: app/module/ip-lockout/controller/main.php:738 app/module/ip-lockout.php:35
2634
  #: app/view/activator-free.php:33 app/view/activator.php:49
2635
  msgid "IP Lockouts"
2636
  msgstr ""
2637
 
2638
- #: app/module/ip-lockout/controller/main.php:755
2639
- #: app/module/ip-lockout/controller/main.php:761
2640
  msgid "Your file is invalid!"
2641
  msgstr ""
2642
 
2643
- #: app/module/ip-lockout/controller/main.php:767
2644
  msgid "Your file content is invalid!"
2645
  msgstr ""
2646
 
2647
- #: app/module/ip-lockout/controller/main.php:776
2648
  msgid "Your whitelist/blacklist has been successfully imported."
2649
  msgstr ""
2650
 
2651
- #: app/module/ip-lockout/controller/main.php:961
2652
  msgid "Thanks for your patience. All set."
2653
  msgstr ""
2654
 
@@ -2892,7 +2900,6 @@ msgstr ""
2892
  #: app/module/ip-lockout/view/emails/login-lockout.php:483
2893
  #: app/module/ip-lockout/view/emails/login-username-ban.php:482
2894
  #: app/module/ip-lockout/view/emails/report.php:515
2895
- #: app/module/ip-lockout/view/locked.php:7
2896
  msgid "WP Defender"
2897
  msgstr ""
2898
 
@@ -3247,7 +3254,7 @@ msgid ""
3247
  "Schedule automated file scanning and email reporting for all your websites. "
3248
  "This feature is included in a WPMU DEV membership along with 100+ plugins & "
3249
  "themes, 24/7 support and lots of handy site management tools – <a "
3250
- "href=\"%s\">Try it all FREE today!</a>"
3251
  msgstr ""
3252
 
3253
  #: app/module/ip-lockout/view/settings.php:10
@@ -3313,8 +3320,8 @@ msgid "This WordPress core file appears modified"
3313
  msgstr ""
3314
 
3315
  #: app/module/scan/behavior/core-result.php:75
3316
- #: app/module/scan/behavior/core-result.php:405
3317
- #: app/module/scan/behavior/core-result.php:410
3318
  #: app/module/scan/behavior/pro/content-result.php:209
3319
  #: app/module/scan/behavior/pro/content-result.php:230
3320
  #: app/module/scan/behavior/pro/content-result.php:235
@@ -3322,7 +3329,7 @@ msgid "Defender doesn't have enough permission to remove this file"
3322
  msgstr ""
3323
 
3324
  #: app/module/scan/behavior/core-result.php:81
3325
- msgid "This file can't not remove"
3326
  msgstr ""
3327
 
3328
  #: app/module/scan/behavior/core-result.php:101
@@ -3362,8 +3369,8 @@ msgstr ""
3362
 
3363
  #: app/module/scan/behavior/core-result.php:199
3364
  msgid ""
3365
- "This will permanent remove the file/folder with all content, do you want to "
3366
- "do this?"
3367
  msgstr ""
3368
 
3369
  #: app/module/scan/behavior/core-result.php:202
@@ -3376,11 +3383,11 @@ msgstr ""
3376
  msgid "No"
3377
  msgstr ""
3378
 
3379
- #: app/module/scan/behavior/core-result.php:215
3380
  msgid "Restore to Original"
3381
  msgstr ""
3382
 
3383
- #: app/module/scan/behavior/core-result.php:264
3384
  msgid ""
3385
  "A stray file has been found in your site directory, which your version of "
3386
  "WordPress doesn't need. As far as we can tell, the file is harmless (and "
@@ -3389,21 +3396,21 @@ msgid ""
3389
  "beforehand"
3390
  msgstr ""
3391
 
3392
- #: app/module/scan/behavior/core-result.php:280
3393
- #: app/module/scan/behavior/core-result.php:302
3394
- #: app/module/scan/behavior/core-result.php:324
3395
  #: app/module/scan/behavior/pro/content-result.php:93
3396
  msgid "Pulling source file..."
3397
  msgstr ""
3398
 
3399
- #: app/module/scan/behavior/core-result.php:297
3400
  msgid ""
3401
  "Compare your file with the original file in the WordPress repository. "
3402
  "Pieces highlighted in red will be removed when you patch the file, and "
3403
  "pieces highlighted in green will be added."
3404
  msgstr ""
3405
 
3406
- #: app/module/scan/behavior/core-result.php:319
3407
  msgid ""
3408
  "We found this folder in your WordPress file list. Your current version of "
3409
  "WordPress doesn’t use this folder so it might belong to another "
@@ -3678,7 +3685,7 @@ msgid "The item doesn't exist!"
3678
  msgstr ""
3679
 
3680
  #: app/module/scan/controller/main.php:381
3681
- msgid "This item has been permanent removed."
3682
  msgstr ""
3683
 
3684
  #: app/module/scan/controller/main.php:520
@@ -3821,7 +3828,7 @@ msgid ""
3821
  " Get enhanced security protection as part of a WPMU DEV "
3822
  "membership including 100+ plugins & themes, 24/7\n"
3823
  " support and lots of handy site management tools – <a "
3824
- "href=\"%s\">Try Defender Pro today for FREE</a>"
3825
  msgstr ""
3826
 
3827
  #: app/module/scan/view/setting-free.php:9 app/module/scan/view/setting.php:9
@@ -3856,7 +3863,8 @@ msgid ""
3856
  "Defenders scans through every line of code on your website, searching for "
3857
  "anything suspicious. This feature is included when you join WPMU DEV, along "
3858
  "with 100+ plugins and themes, 24/7 support and lots of handy site "
3859
- "management tools. – <a href=\"%s\" role='button'>Try it all FREE today!\n"
 
3860
  " </a>"
3861
  msgstr ""
3862
 
@@ -3971,7 +3979,7 @@ msgstr ""
3971
  msgid "Automatic File Scans & Reporting"
3972
  msgstr ""
3973
 
3974
- #: app/view/activator-free.php:18
3975
  msgid ""
3976
  "Scan your website for file changes, vulnerabilities and injected code and "
3977
  "get notified about anything suspicious."
@@ -4004,12 +4012,6 @@ msgid ""
4004
  "are turned on by default."
4005
  msgstr ""
4006
 
4007
- #: app/view/activator.php:18
4008
- msgid ""
4009
- "Scan your website for file changes, vulnerabilities and injected code and "
4010
- "get and get notified about anything suspicious."
4011
- msgstr ""
4012
-
4013
  #: app/view/activator.php:68
4014
  msgid ""
4015
  "Automatically check if you’re on Google’s blacklist every 6 hours. If "
@@ -4045,32 +4047,10 @@ msgid ""
4045
  "try everything absolutely free."
4046
  msgstr ""
4047
 
4048
- #: app/view/dashboard.php:94
4049
  msgid "FIND OUT MORE"
4050
  msgstr ""
4051
 
4052
- #: app/view/login-modal.php:3
4053
- msgid ""
4054
- "To get access to our free API services you simply need to create a WPMU DEV "
4055
- "account. It only takes two seconds and it’s absolutely free, forever."
4056
- msgstr ""
4057
-
4058
- #: app/view/login-modal.php:7
4059
- msgid "First name"
4060
- msgstr ""
4061
-
4062
- #: app/view/login-modal.php:9
4063
- msgid "Email address"
4064
- msgstr ""
4065
-
4066
- #: app/view/login-modal.php:12
4067
- msgid "minimum 8 characters"
4068
- msgstr ""
4069
-
4070
- #: app/view/login-modal.php:22
4071
- msgid "Create Account"
4072
- msgstr ""
4073
-
4074
  #: app/view/requirement.php:11
4075
  msgid ""
4076
  "Defender is currently scanning your files for malicious code, please be "
@@ -4223,6 +4203,10 @@ msgstr ""
4223
  msgid "<br/>Something went wrong. Please try again later!"
4224
  msgstr ""
4225
 
 
 
 
 
4226
  #: free-dashboard/module.php:377
4227
  msgid ""
4228
  "We're happy that you've chosen to install %s! Are you interested in how to "
@@ -4259,7 +4243,7 @@ msgstr ""
4259
  msgid "Rate %s"
4260
  msgstr ""
4261
 
4262
- #: main-activator.php:85
4263
  msgid ""
4264
  "We noticed you have both the free and pro versions of Defender installed, "
4265
  "so we've automatically deactivated the free version for you."
@@ -4273,10 +4257,6 @@ msgstr ""
4273
  msgid "Remove"
4274
  msgstr ""
4275
 
4276
- #. Plugin Name of the plugin/theme
4277
- msgid "WP Defender Pro"
4278
- msgstr ""
4279
-
4280
  #. Plugin URI of the plugin/theme
4281
  msgid "https://premium.wpmudev.org/project/wp-defender/"
4282
  msgstr ""
1
+ # Copyright (C) 2018 WPMU DEV
2
  # This file is distributed under the GNU General Public License (Version 2 - GPLv2).
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Defender Pro 1.7.6\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
+ "POT-Creation-Date: 2018-03-19 04:30:34+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2018-MO-DA HO:MI+ZONE\n"
12
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
  "Language-Team: LANGUAGE <EMAIL@ADDRESS>\n"
14
  "X-Generator: grunt-wp-i18n1.0.0\n"
19
  msgid "BLACKLIST MONITOR"
20
  msgstr ""
21
 
22
+ #: app/behavior/blacklist-free.php:25 app/behavior/blacklist.php:61
23
  #: app/module/audit/behavior/audit-free.php:20
24
  #: app/module/scan/behavior/scan.php:136 app/module/scan/behavior/scan.php:151
25
  #: app/module/scan/view/layouts/layout.php:61
29
  msgid "Try Defender Pro free today"
30
  msgstr ""
31
 
32
+ #: app/behavior/blacklist-free.php:26 app/behavior/blacklist.php:62
33
  #: app/module/audit/behavior/audit-free.php:20
34
  msgid "PRO FEATURE"
35
  msgstr ""
36
 
37
+ #: app/behavior/blacklist-free.php:30 app/behavior/blacklist.php:34
38
  #: app/behavior/blacklist.php:66
39
  msgid ""
40
  "Automatically check if you’re on Google’s blacklist every 6 hours. If "
42
  " wrong, we’ll let you know via email."
43
  msgstr ""
44
 
45
+ #: app/behavior/blacklist-free.php:35 app/behavior/blacklist.php:70
46
  #: app/module/audit/view/free.php:17
47
  #: app/module/ip-lockout/view/notification/report-free.php:5
48
  #: app/module/scan/view/automation-free.php:5
152
  msgstr ""
153
 
154
  #: app/behavior/report-free.php:129 app/behavior/report.php:224
155
+ #: app/behavior/utils.php:909 free/utils.php:656
156
  msgid "daily"
157
  msgstr ""
158
 
159
  #: app/behavior/report-free.php:132 app/behavior/report.php:227
160
+ #: app/behavior/utils.php:912 free/utils.php:659
161
  msgid "weekly"
162
  msgstr ""
163
 
164
  #: app/behavior/report-free.php:135 app/behavior/report.php:230
165
+ #: app/behavior/utils.php:915 free/utils.php:662
166
  msgid "monthly"
167
  msgstr ""
168
 
216
  msgid "Guest"
217
  msgstr ""
218
 
219
+ #: app/behavior/utils.php:737
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
+ #: app/behavior/utils.php:738
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
+ #: app/behavior/utils.php:739 app/module/scan/behavior/scan.php:145
228
  #: app/module/scan/view/layouts/layout.php:70
229
  #: app/module/scan/view/setting-free.php:50 app/module/scan/view/setting.php:43
230
  #: app/view/settings.php:98
231
  msgid "Suspicious Code"
232
  msgstr ""
233
 
234
+ #: app/behavior/utils.php:768 app/module/audit/controller/main.php:144
235
+ #: app/module/ip-lockout/controller/main.php:92
236
+ msgid "Never"
237
+ msgstr ""
238
+
239
+ #: app/behavior/utils.php:892 free/utils.php:639
240
  msgid "Please upgrade to 5.3 or later"
241
  msgstr ""
242
 
244
  msgid "Dashboard"
245
  msgstr ""
246
 
247
+ #: app/controller/dashboard.php:324 app/controller/requirement.php:69
248
+ #: app/module/ip-lockout/view/locked.php:75
249
  msgid "Defender"
250
  msgstr ""
251
 
252
+ #. Plugin Name of the plugin/theme
253
+ msgid "Defender Pro"
254
+ msgstr ""
255
+
256
+ #: app/controller/dashboard.php:358
257
  msgid "QUICK SETUP"
258
  msgstr ""
259
 
260
+ #: app/controller/dashboard.php:358
261
  msgid "Skip"
262
  msgstr ""
263
 
264
+ #: app/controller/dashboard.php:359
265
  msgid "Activating File Scanning..."
266
  msgstr ""
267
 
268
+ #: app/controller/dashboard.php:360
269
  msgid "Activating Audit Module..."
270
  msgstr ""
271
 
272
+ #: app/controller/dashboard.php:361
273
  msgid "Activating IP Lockouts Module..."
274
  msgstr ""
275
 
276
+ #: app/controller/dashboard.php:362
277
  msgid "Activating Blacklist Monitoring..."
278
  msgstr ""
279
 
410
  msgstr ""
411
 
412
  #: app/module/advanced-tools/controller/main.php:457
413
+ #: app/module/audit/controller/main.php:197
414
+ #: app/module/ip-lockout/controller/main.php:700
415
  #: app/module/scan/controller/main.php:306
416
  msgid "Your settings have been updated."
417
  msgstr ""
492
  msgstr ""
493
 
494
  #: app/module/advanced-tools/view/login/enabled.php:12
495
+ msgid "Disable"
496
  msgstr ""
497
 
498
  #: app/module/advanced-tools/view/login/enabled.php:17
629
  msgid "Please hold on, Defender will update Audit information soon..."
630
  msgstr ""
631
 
632
+ #: app/module/audit/component/audit-api.php:58
633
+ #: app/module/audit/component/audit-api.php:90
634
  msgid ""
635
  "Whoops, Defender had trouble loading up your event log. You can try a <a "
636
  "href='%s'class=''>​quick refresh</a>​ of this page or check back again "
637
  "later."
638
  msgstr ""
639
 
640
+ #: app/module/audit/component/audit-api.php:115
641
  msgid "trashed"
642
  msgstr ""
643
 
644
+ #: app/module/audit/component/audit-api.php:116
645
  msgid "updated"
646
  msgstr ""
647
 
648
+ #: app/module/audit/component/audit-api.php:117
649
  msgid "deleted"
650
  msgstr ""
651
 
652
+ #: app/module/audit/component/audit-api.php:118
653
  msgid "created"
654
  msgstr ""
655
 
656
+ #: app/module/audit/component/audit-api.php:119
657
  msgid "restored"
658
  msgstr ""
659
 
660
+ #: app/module/audit/component/audit-api.php:162
661
  msgid "year"
662
  msgstr ""
663
 
664
+ #: app/module/audit/component/audit-api.php:163
665
  msgid "month"
666
  msgstr ""
667
 
668
+ #: app/module/audit/component/audit-api.php:164
669
  msgid "week"
670
  msgstr ""
671
 
672
+ #: app/module/audit/component/audit-api.php:165
673
  msgid "day"
674
  msgstr ""
675
 
676
+ #: app/module/audit/component/audit-api.php:166
677
  msgid "hour"
678
  msgstr ""
679
 
680
+ #: app/module/audit/component/audit-api.php:167
681
  msgid "minute"
682
  msgstr ""
683
 
684
+ #: app/module/audit/component/audit-api.php:168
685
  msgid "second"
686
  msgstr ""
687
 
1074
  msgid "Login Name"
1075
  msgstr ""
1076
 
1077
+ #: app/module/audit/component/options-audit.php:175
1078
  msgid "Password"
1079
  msgstr ""
1080
 
1173
  #: app/module/scan/view/layouts/layout.php:132
1174
  #: app/module/scan/view/layouts/layout.php:149
1175
  #: app/module/scan/view/setting-free.php:3 app/module/scan/view/setting.php:3
1176
+ #: app/view/settings.php:6 free/main-activator.php:157 main-activator.php:98
1177
  msgid "Settings"
1178
  msgstr ""
1179
 
1283
  msgstr ""
1284
 
1285
  #: app/module/audit/controller/main-free.php:36
1286
+ #: app/module/audit/controller/main.php:506
1287
  #: app/module/audit/view/pro-feature.php:22
1288
  #: app/module/ip-lockout/view/pro-feature.php:22
1289
  #: app/module/scan/view/pro-feature.php:22 app/view/activator.php:33
1291
  msgid "Audit Logging"
1292
  msgstr ""
1293
 
1294
+ #: app/module/audit/controller/main.php:84 app/module/audit/view/table.php:20
1295
  msgid "Summary"
1296
  msgstr ""
1297
 
1298
+ #: app/module/audit/controller/main.php:85 app/module/audit/view/table.php:58
1299
  #: app/module/audit/view/table.php:154
1300
  msgid "Date / Time"
1301
  msgstr ""
1302
 
1303
+ #: app/module/audit/controller/main.php:86 app/module/audit/view/table.php:54
1304
  #: app/module/audit/view/table.php:104
1305
  msgid "Context"
1306
  msgstr ""
1307
 
1308
+ #: app/module/audit/controller/main.php:87 app/module/audit/view/table.php:55
1309
  #: app/module/audit/view/table.php:115
1310
  msgid "Type"
1311
  msgstr ""
1312
 
1313
+ #: app/module/audit/controller/main.php:88 app/module/audit/view/table.php:56
1314
  #: app/module/audit/view/table.php:126
1315
  msgid "IP address"
1316
  msgstr ""
1317
 
1318
+ #: app/module/audit/controller/main.php:89 app/module/audit/view/table.php:57
1319
  #: app/module/audit/view/table.php:137
1320
  msgid "User"
1321
  msgstr ""
1322
 
1323
+ #: app/module/audit/controller/main.php:204
 
 
 
 
 
1324
  #: app/module/audit/view/layouts/layout.php:39
1325
  msgid "at %s"
1326
  msgstr ""
1327
 
1328
+ #: app/module/audit/controller/main.php:206
1329
  #: app/module/audit/view/layouts/layout.php:42
1330
  msgid "%s at %s"
1331
  msgstr ""
1332
 
1333
+ #: app/module/audit/controller/main.php:346
1334
  msgid "Hi {USER_NAME},"
1335
  msgstr ""
1336
 
1337
+ #: app/module/audit/controller/main.php:348
1338
  msgid ""
1339
  "It’s WP Defender here, reporting from the frontline with a quick update on "
1340
  "what’s been happening at <a href=\"%s\">%s</a>."
1341
  msgstr ""
1342
 
1343
+ #: app/module/audit/controller/main.php:360
1344
  msgid "Event Type"
1345
  msgstr ""
1346
 
1347
+ #: app/module/audit/controller/main.php:364
1348
  msgid "Action Summaries"
1349
  msgstr ""
1350
 
1351
+ #: app/module/audit/controller/main.php:405
1352
  msgid "You can view the full audit report for your site here."
1353
  msgstr ""
1354
 
1355
+ #: app/module/audit/controller/main.php:438
1356
  msgid "There were no events logged for %s"
1357
  msgstr ""
1358
 
1359
+ #: app/module/audit/controller/main.php:443
1360
+ #: app/module/audit/controller/main.php:469
1361
  msgid "Here’s what’s been happening at %s"
1362
  msgstr ""
1363
 
1364
+ #: app/module/audit/controller/main.php:562 app/view/settings.php:209
1365
  msgid "Type a user’s name"
1366
  msgstr ""
1367
 
1368
+ #: app/module/audit/controller/main.php:563
1369
  msgid "We did not find an user with this name..."
1370
  msgstr ""
1371
 
1437
  msgstr ""
1438
 
1439
  #: app/module/audit/view/free.php:9 free/main-activator.php:118
1440
+ #: free/main-activator.php:163
1441
  msgid "Upgrade"
1442
  msgstr ""
1443
 
1769
  #: app/module/hardener/component/protect-information-service.php:46
1770
  #: app/module/hardener/component/protect-information-service.php:69
1771
  #: app/module/hardener/component/security-key-service.php:48
1772
+ #: app/module/hardener/component/servers/apache-service.php:67
1773
+ #: app/module/hardener/component/servers/apache-service.php:71
1774
+ #: app/module/hardener/component/servers/apache-service.php:111
1775
+ #: app/module/hardener/component/servers/apache-service.php:115
1776
+ #: app/module/hardener/component/servers/apache-service.php:169
1777
+ #: app/module/hardener/component/servers/apache-service.php:173
1778
+ #: app/module/hardener/component/servers/apache-service.php:219
1779
+ #: app/module/hardener/component/servers/apache-service.php:250
1780
+ #: app/module/hardener/component/servers/apache-service.php:284
1781
  msgid "The file %s is not writeable"
1782
  msgstr ""
1783
 
1860
  msgid "Duration can only be a number and greater than 0"
1861
  msgstr ""
1862
 
1863
+ #: app/module/hardener/component/login-duration.php:195
1864
  msgid ""
1865
  "Your session has expired because it has been over %d days since your last "
1866
  "login. Please log back in to continue."
2273
  msgstr ""
2274
 
2275
  #: app/module/hardener/view/rules/prevent-php-executed.php:138
2276
+ #: app/module/hardener/view/rules/protect-information.php:98
2277
  msgid "For NGINX servers:"
2278
  msgstr ""
2279
 
2280
  #: app/module/hardener/view/rules/prevent-php-executed.php:141
2281
+ #: app/module/hardener/view/rules/protect-information.php:101
2282
  msgid ""
2283
  "Copy the generated code into your site specific .conf file usually located "
2284
  "in a subdirectory under /etc/nginx/... or /usr/local/nginx/conf/..."
2285
  msgstr ""
2286
 
2287
  #: app/module/hardener/view/rules/prevent-php-executed.php:144
2288
+ #: app/module/hardener/view/rules/protect-information.php:104
2289
  msgid ""
2290
  "Add the code above inside the <strong>server</strong> section in the file, "
2291
  "right before the php location block. Looks something like:"
2292
  msgstr ""
2293
 
2294
  #: app/module/hardener/view/rules/prevent-php-executed.php:148
2295
+ #: app/module/hardener/view/rules/protect-information.php:108
2296
  msgid "Reload NGINX."
2297
  msgstr ""
2298
 
2299
  #: app/module/hardener/view/rules/prevent-php-executed.php:151
2300
+ #: app/module/hardener/view/rules/protect-information.php:111
2301
  msgid ""
2302
  "Still having trouble? <a target='_blank' href=\"%s\">Open a support "
2303
  "ticket</a>."
2304
  msgstr ""
2305
 
2306
  #: app/module/hardener/view/rules/prevent-php-executed.php:161
2307
+ #: app/module/hardener/view/rules/protect-information.php:117
2308
  msgid "For IIS servers, <a href=\"%s\">visit Microsoft TechNet</a>"
2309
  msgstr ""
2310
 
2348
  msgid "Your WordPress is protected."
2349
  msgstr ""
2350
 
2351
+ #: app/module/hardener/view/rules/protect-information.php:122
2352
  msgid "For IIS 7 servers, <a href=\"%s\">visit Microsoft TechNet</a>"
2353
  msgstr ""
2354
 
2459
  msgstr ""
2460
 
2461
  #: app/module/ip-lockout/component/login-protection-api.php:61
2462
+ #: app/module/ip-lockout/controller/main.php:595
2463
+ #: app/module/ip-lockout/controller/main.php:604
2464
  msgid ""
2465
  "You have been locked out by the administrator for attempting to login with "
2466
  "a banned username"
2599
  msgid "Demo"
2600
  msgstr ""
2601
 
2602
+ #: app/module/ip-lockout/controller/main.php:409
2603
  msgid "404 lockout alert for %s"
2604
  msgstr ""
2605
 
2606
+ #: app/module/ip-lockout/controller/main.php:436
2607
  msgid "Login lockout alert for %s"
2608
  msgstr ""
2609
 
2610
+ #: app/module/ip-lockout/controller/main.php:534
2611
  msgid "Failed login attempt with username %s"
2612
  msgstr ""
2613
 
2614
+ #: app/module/ip-lockout/controller/main.php:597
2615
+ #: app/module/ip-lockout/controller/main.php:607
2616
  msgid "%d login attempts remaining"
2617
  msgstr ""
2618
 
2619
+ #: app/module/ip-lockout/controller/main.php:696
2620
  msgid ""
2621
  "Your settings have been updated, however some IPs were removed because "
2622
  "invalid format, or you blacklist yourself"
2623
  msgstr ""
2624
 
2625
+ #: app/module/ip-lockout/controller/main.php:707
2626
  msgid "Login Protection has been activated."
2627
  msgstr ""
2628
 
2629
+ #: app/module/ip-lockout/controller/main.php:709
2630
  msgid "Login Protection has been deactivated."
2631
  msgstr ""
2632
 
2633
+ #: app/module/ip-lockout/controller/main.php:714
2634
  msgid "404 Detection has been activated."
2635
  msgstr ""
2636
 
2637
+ #: app/module/ip-lockout/controller/main.php:716
2638
  msgid "404 Detection has been deactivated."
2639
  msgstr ""
2640
 
2641
+ #: app/module/ip-lockout/controller/main.php:746 app/module/ip-lockout.php:35
2642
  #: app/view/activator-free.php:33 app/view/activator.php:49
2643
  msgid "IP Lockouts"
2644
  msgstr ""
2645
 
2646
+ #: app/module/ip-lockout/controller/main.php:763
2647
+ #: app/module/ip-lockout/controller/main.php:769
2648
  msgid "Your file is invalid!"
2649
  msgstr ""
2650
 
2651
+ #: app/module/ip-lockout/controller/main.php:775
2652
  msgid "Your file content is invalid!"
2653
  msgstr ""
2654
 
2655
+ #: app/module/ip-lockout/controller/main.php:784
2656
  msgid "Your whitelist/blacklist has been successfully imported."
2657
  msgstr ""
2658
 
2659
+ #: app/module/ip-lockout/controller/main.php:969
2660
  msgid "Thanks for your patience. All set."
2661
  msgstr ""
2662
 
2900
  #: app/module/ip-lockout/view/emails/login-lockout.php:483
2901
  #: app/module/ip-lockout/view/emails/login-username-ban.php:482
2902
  #: app/module/ip-lockout/view/emails/report.php:515
 
2903
  msgid "WP Defender"
2904
  msgstr ""
2905
 
3254
  "Schedule automated file scanning and email reporting for all your websites. "
3255
  "This feature is included in a WPMU DEV membership along with 100+ plugins & "
3256
  "themes, 24/7 support and lots of handy site management tools – <a "
3257
+ "target='_blank' href=\"%s\">Try it all FREE today!</a>"
3258
  msgstr ""
3259
 
3260
  #: app/module/ip-lockout/view/settings.php:10
3320
  msgstr ""
3321
 
3322
  #: app/module/scan/behavior/core-result.php:75
3323
+ #: app/module/scan/behavior/core-result.php:406
3324
+ #: app/module/scan/behavior/core-result.php:411
3325
  #: app/module/scan/behavior/pro/content-result.php:209
3326
  #: app/module/scan/behavior/pro/content-result.php:230
3327
  #: app/module/scan/behavior/pro/content-result.php:235
3329
  msgstr ""
3330
 
3331
  #: app/module/scan/behavior/core-result.php:81
3332
+ msgid "This file can't be removed"
3333
  msgstr ""
3334
 
3335
  #: app/module/scan/behavior/core-result.php:101
3369
 
3370
  #: app/module/scan/behavior/core-result.php:199
3371
  msgid ""
3372
+ "This will permanently remove the selected file/folder. Are you sure you "
3373
+ "want to continue?"
3374
  msgstr ""
3375
 
3376
  #: app/module/scan/behavior/core-result.php:202
3383
  msgid "No"
3384
  msgstr ""
3385
 
3386
+ #: app/module/scan/behavior/core-result.php:216
3387
  msgid "Restore to Original"
3388
  msgstr ""
3389
 
3390
+ #: app/module/scan/behavior/core-result.php:265
3391
  msgid ""
3392
  "A stray file has been found in your site directory, which your version of "
3393
  "WordPress doesn't need. As far as we can tell, the file is harmless (and "
3396
  "beforehand"
3397
  msgstr ""
3398
 
3399
+ #: app/module/scan/behavior/core-result.php:281
3400
+ #: app/module/scan/behavior/core-result.php:303
3401
+ #: app/module/scan/behavior/core-result.php:325
3402
  #: app/module/scan/behavior/pro/content-result.php:93
3403
  msgid "Pulling source file..."
3404
  msgstr ""
3405
 
3406
+ #: app/module/scan/behavior/core-result.php:298
3407
  msgid ""
3408
  "Compare your file with the original file in the WordPress repository. "
3409
  "Pieces highlighted in red will be removed when you patch the file, and "
3410
  "pieces highlighted in green will be added."
3411
  msgstr ""
3412
 
3413
+ #: app/module/scan/behavior/core-result.php:320
3414
  msgid ""
3415
  "We found this folder in your WordPress file list. Your current version of "
3416
  "WordPress doesn’t use this folder so it might belong to another "
3685
  msgstr ""
3686
 
3687
  #: app/module/scan/controller/main.php:381
3688
+ msgid "This item has been permanently removed"
3689
  msgstr ""
3690
 
3691
  #: app/module/scan/controller/main.php:520
3828
  " Get enhanced security protection as part of a WPMU DEV "
3829
  "membership including 100+ plugins & themes, 24/7\n"
3830
  " support and lots of handy site management tools – <a "
3831
+ "target='_blank' href=\"%s\">Try Defender Pro today for FREE</a>"
3832
  msgstr ""
3833
 
3834
  #: app/module/scan/view/setting-free.php:9 app/module/scan/view/setting.php:9
3863
  "Defenders scans through every line of code on your website, searching for "
3864
  "anything suspicious. This feature is included when you join WPMU DEV, along "
3865
  "with 100+ plugins and themes, 24/7 support and lots of handy site "
3866
+ "management tools. – <a href=\"%s\" target='_blank' role='button'>Try it "
3867
+ "all FREE today!\n"
3868
  " </a>"
3869
  msgstr ""
3870
 
3979
  msgid "Automatic File Scans & Reporting"
3980
  msgstr ""
3981
 
3982
+ #: app/view/activator-free.php:18 app/view/activator.php:18
3983
  msgid ""
3984
  "Scan your website for file changes, vulnerabilities and injected code and "
3985
  "get notified about anything suspicious."
4012
  "are turned on by default."
4013
  msgstr ""
4014
 
 
 
 
 
 
 
4015
  #: app/view/activator.php:68
4016
  msgid ""
4017
  "Automatically check if you’re on Google’s blacklist every 6 hours. If "
4047
  "try everything absolutely free."
4048
  msgstr ""
4049
 
4050
+ #: app/view/dashboard.php:95
4051
  msgid "FIND OUT MORE"
4052
  msgstr ""
4053
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4054
  #: app/view/requirement.php:11
4055
  msgid ""
4056
  "Defender is currently scanning your files for malicious code, please be "
4203
  msgid "<br/>Something went wrong. Please try again later!"
4204
  msgstr ""
4205
 
4206
+ #: free/main-activator.php:162 main-activator.php:103
4207
+ msgid "Docs"
4208
+ msgstr ""
4209
+
4210
  #: free-dashboard/module.php:377
4211
  msgid ""
4212
  "We're happy that you've chosen to install %s! Are you interested in how to "
4243
  msgid "Rate %s"
4244
  msgstr ""
4245
 
4246
+ #: main-activator.php:87
4247
  msgid ""
4248
  "We noticed you have both the free and pro versions of Defender installed, "
4249
  "so we've automatically deactivated the free version for you."
4257
  msgid "Remove"
4258
  msgstr ""
4259
 
 
 
 
 
4260
  #. Plugin URI of the plugin/theme
4261
  msgid "https://premium.wpmudev.org/project/wp-defender/"
4262
  msgstr ""
main-activator.php CHANGED
@@ -40,7 +40,7 @@ class WD_Main_Activator {
40
  update_site_option( 'wd_db_version', "1.7.1" );
41
  }
42
 
43
- add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( &$this, 'addSettingsLink' ) );
44
  add_action( 'admin_enqueue_scripts', array( &$this, 'register_styles' ) );
45
  if ( ! \WP_Defender\Behavior\Utils::instance()->checkRequirement() ) {
46
  } else {
@@ -146,7 +146,6 @@ class WD_Main_Activator {
146
  'message' => __( "<br/>Something went wrong. Please try again later!", "defender-security" )
147
  ) );
148
  }
149
-
150
  }
151
 
152
  /**
@@ -158,7 +157,12 @@ class WD_Main_Activator {
158
  '<a href="' . admin_url( 'admin.php?page=wp-defender' ) . '">' . __( "Settings", "defender-security" ) . '</a>',
159
  );
160
 
161
- return array_merge( $mylinks, $links );
 
 
 
 
 
162
  }
163
 
164
  /**
40
  update_site_option( 'wd_db_version', "1.7.1" );
41
  }
42
 
43
+ add_filter( 'plugin_action_links_' . plugin_basename( wp_defender()->plugin_slug ), array( &$this, 'addSettingsLink' ) );
44
  add_action( 'admin_enqueue_scripts', array( &$this, 'register_styles' ) );
45
  if ( ! \WP_Defender\Behavior\Utils::instance()->checkRequirement() ) {
46
  } else {
146
  'message' => __( "<br/>Something went wrong. Please try again later!", "defender-security" )
147
  ) );
148
  }
 
149
  }
150
 
151
  /**
157
  '<a href="' . admin_url( 'admin.php?page=wp-defender' ) . '">' . __( "Settings", "defender-security" ) . '</a>',
158
  );
159
 
160
+ $mylinks = array_merge( $mylinks, $links );
161
+ $mylinks = array_merge( $mylinks, array(
162
+ '<a target="_blank" href="https://premium.wpmudev.org/docs/wpmu-dev-plugins/defender/">' . __( "Docs", "defender-security" ) . '</a>',
163
+ '<a style="color: #1ABC9C" target="_blank" href="'.\WP_Defender\Behavior\Utils::instance()->campaignURL('defender_wppluginslist_upgrade').'">' . __( "Upgrade", "defender-security" ) . '</a>',
164
+ ) );
165
+ return $mylinks;
166
  }
167
 
168
  /**
readme.txt CHANGED
@@ -1,13 +1,13 @@
1
  === Defender Security, Monitoring, and Hack Protection ===
2
  Plugin Name: Defender Security, Monitoring, and Hack Protection
3
- Version: 1.7.4
4
  Author: WPMU DEV
5
  Author URI: http://premium.wpmudev.org/
6
  Contributors: WPMUDEV
7
  Tags: Security, Security Tweaks, Hardening, IP lockout, Monitoring, Blacklist, Site Protection, Hacked, Security Scan
8
  Requires at least: 4.6
9
  Tested up to: 4.9.2
10
- Stable tag: 1.7.4
11
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12
 
13
  Protect WordPress from hackers with security tweaks, code scans, 2-Step Verification, IP lockouts, and monitoring.
@@ -117,6 +117,11 @@ Hackers and bot attacks are not the only threat to your site. No matter what se
117
 
118
  == Changelog ==
119
 
 
 
 
 
 
120
  = 1.7.4 =
121
  - Fix: Conflict with Jetpack where Defender 2FA module would not detect if Jetpack 2FA was disabled.
122
  - Fix: Visitor would get a 404 lockout if landing on a page with many dead links.
1
  === Defender Security, Monitoring, and Hack Protection ===
2
  Plugin Name: Defender Security, Monitoring, and Hack Protection
3
+ Version: 1.7.6
4
  Author: WPMU DEV
5
  Author URI: http://premium.wpmudev.org/
6
  Contributors: WPMUDEV
7
  Tags: Security, Security Tweaks, Hardening, IP lockout, Monitoring, Blacklist, Site Protection, Hacked, Security Scan
8
  Requires at least: 4.6
9
  Tested up to: 4.9.2
10
+ Stable tag: 1.7.6
11
  License: GPL v2 - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
12
 
13
  Protect WordPress from hackers with security tweaks, code scans, 2-Step Verification, IP lockouts, and monitoring.
117
 
118
  == Changelog ==
119
 
120
+ = 1.7.6 =
121
+ - Fix: Defender now can recognize and verify Bing Bot for whitelisting
122
+ - Fix: Lockout page now will use site title instead of the text 'WP Defender'
123
+ - Other minor enhancements and fixes
124
+
125
  = 1.7.4 =
126
  - Fix: Conflict with Jetpack where Defender 2FA module would not detect if Jetpack 2FA was disabled.
127
  - Fix: Visitor would get a 404 lockout if landing on a page with many dead links.
wp-defender.php CHANGED
@@ -1,9 +1,9 @@
1
  <?php
2
 
3
  /**
4
- * Plugin Name: WP Defender
5
  * Plugin URI: https://premium.wpmudev.org/project/wp-defender/
6
- * Version: 1.7.4
7
  * Description: Get regular security scans, vulnerability reports, safety recommendations and customized hardening for your site in just a few clicks. Defender is the analyst and enforcer who never sleeps.
8
  * Author: WPMU DEV
9
  * Author URI: http://premium.wpmudev.org/
1
  <?php
2
 
3
  /**
4
+ * Plugin Name: Defender
5
  * Plugin URI: https://premium.wpmudev.org/project/wp-defender/
6
+ * Version: 1.7.6
7
  * Description: Get regular security scans, vulnerability reports, safety recommendations and customized hardening for your site in just a few clicks. Defender is the analyst and enforcer who never sleeps.
8
  * Author: WPMU DEV
9
  * Author URI: http://premium.wpmudev.org/