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

Version Description

  • Fix: Conflict with Jetpack where Defender 2FA module would not detect if Jetpack 2FA was disabled.
  • Fix: Visitor would get a 404 lockout if landing on a page with many dead links.
  • Improvement: When an user is deleted, audit logging now display the user's login instead of only UID.
  • Other minor enhancements/fixes
Download this release

Release Info

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

Code changes from version 1.7.3 to 1.7.4

app/controller.php CHANGED
@@ -34,4 +34,24 @@ class Controller extends Component {
34
  public function isDashboard() {
35
  return HTTP_Helper::retrieve_get( 'page' ) == 'wp-defender';
36
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  }
34
  public function isDashboard() {
35
  return HTTP_Helper::retrieve_get( 'page' ) == 'wp-defender';
36
  }
37
+
38
+ /**
39
+ * @param $viewFile
40
+ * @param array $params
41
+ * @param bool $echo
42
+ *
43
+ * @return bool|string
44
+ */
45
+ public function renderPartial( $viewFile, $params = array(), $echo = true ) {
46
+ ob_start();
47
+ $content = parent::renderPartial( $viewFile, $params, $echo );
48
+ ob_end_clean();
49
+
50
+ $content = apply_filters( 'wd_render_partial', $content, $viewFile, $params );
51
+ if ( $echo ) {
52
+ echo $content;
53
+ }
54
+
55
+ return $content;
56
+ }
57
  }
app/module/advanced-tools/controller/main.php CHANGED
@@ -39,7 +39,7 @@ class Main extends Controller {
39
  $this->add_ajax_action( 'saveAdvancedSettings', 'saveSettings' );
40
  $setting = Auth_Settings::instance();
41
  if ( $setting->enabled ) {
42
- $this->add_action( 'update_option_jetpack_available_modules', 'listenForJetpackOption', 10, 3 );
43
  //prepare for the login part
44
  $isJetpackSSO = Auth_API::isJetPackSSO();
45
  $isTML = Auth_API::isTML();
@@ -86,7 +86,7 @@ class Main extends Controller {
86
  */
87
  public function listenForJetpackOption( $old_value, $value, $option ) {
88
  $settings = Auth_Settings::instance();
89
- if ( array_search( 'sso', $value ) ) {
90
  $settings->markAsConflict( 'jetpack/jetpack.php' );
91
  } else {
92
  $settings->markAsUnConflict( 'jetpack/jetpack.php' );
@@ -304,10 +304,6 @@ class Main extends Controller {
304
  $user = $res[0];
305
  $secret = Auth_API::getUserSecret( $user->ID );
306
  $redirect = HTTP_Helper::retrieve_post( 'redirect_to', admin_url() );
307
- $redirect = apply_filters( 'login_redirect', $redirect );
308
- if ( empty( $redirect ) ) {
309
- $redirect = admin_url();
310
- }
311
  if ( Auth_API::compare( $secret, $otp ) ) {
312
  //sign in
313
  delete_user_meta( $user->ID, 'defOTPLoginToken' );
39
  $this->add_ajax_action( 'saveAdvancedSettings', 'saveSettings' );
40
  $setting = Auth_Settings::instance();
41
  if ( $setting->enabled ) {
42
+ $this->add_action( 'update_option_jetpack_active_modules', 'listenForJetpackOption', 10, 3 );
43
  //prepare for the login part
44
  $isJetpackSSO = Auth_API::isJetPackSSO();
45
  $isTML = Auth_API::isTML();
86
  */
87
  public function listenForJetpackOption( $old_value, $value, $option ) {
88
  $settings = Auth_Settings::instance();
89
+ if ( array_search( 'sso', $value ) !== false ) {
90
  $settings->markAsConflict( 'jetpack/jetpack.php' );
91
  } else {
92
  $settings->markAsUnConflict( 'jetpack/jetpack.php' );
304
  $user = $res[0];
305
  $secret = Auth_API::getUserSecret( $user->ID );
306
  $redirect = HTTP_Helper::retrieve_post( 'redirect_to', admin_url() );
 
 
 
 
307
  if ( Auth_API::compare( $secret, $otp ) ) {
308
  //sign in
309
  delete_user_meta( $user->ID, 'defOTPLoginToken' );
app/module/advanced-tools/model/auth-settings.php CHANGED
@@ -70,11 +70,10 @@ class Auth_Settings extends \Hammer\WP\Settings {
70
  if ( ( $i = array_search( $plugin, $this->isConflict ) ) !== false ) {
71
  unset( $this->isConflict[ $i ] );
72
  }
73
-
74
  if ( ! in_array( '!' . $plugin, $this->isConflict ) ) {
75
  $this->isConflict [] = '!' . $plugin;
76
- $this->save();
77
  }
 
78
  }
79
 
80
  public function events() {
70
  if ( ( $i = array_search( $plugin, $this->isConflict ) ) !== false ) {
71
  unset( $this->isConflict[ $i ] );
72
  }
 
73
  if ( ! in_array( '!' . $plugin, $this->isConflict ) ) {
74
  $this->isConflict [] = '!' . $plugin;
 
75
  }
76
+ $this->save();
77
  }
78
 
79
  public function events() {
app/module/advanced-tools/view/main.php CHANGED
@@ -13,7 +13,7 @@
13
  ?>
14
  <p class="<?php echo $class ?>"><?php _e( "Configure your two-factor authentication settings. Our recommendations are enabled by default.", "defender-security" ) ?></p>
15
  <?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
16
- <div class="well well-error with-cap">
17
  <i class="def-icon icon-warning icon-yellow "></i>
18
  <?php echo implode( '<br/>', wp_defender()->global['compatibility'] ); ?>
19
  </div>
13
  ?>
14
  <p class="<?php echo $class ?>"><?php _e( "Configure your two-factor authentication settings. Our recommendations are enabled by default.", "defender-security" ) ?></p>
15
  <?php if ( isset( wp_defender()->global['compatibility'] ) ): ?>
16
+ <div class="well well-error with-cap mline">
17
  <i class="def-icon icon-warning icon-yellow "></i>
18
  <?php echo implode( '<br/>', wp_defender()->global['compatibility'] ); ?>
19
  </div>
app/module/hardener/component/prevent-php-service.php CHANGED
@@ -22,9 +22,10 @@ class Prevent_PHP_Service extends Rule_Service implements IRule_Service {
22
  if ( $cache === null ) {
23
  //init upload dir and a php file
24
  Utils::instance()->getDefUploadDir();
25
- $url = WP_Helper::getUploadUrl();
26
- $url = $url . '/wp-defender/index.php';
27
- $status = wp_remote_head( $url, array( 'user-agent' => $_SERVER['HTTP_USER_AGENT'], 'timeout' => 10 ) );
 
28
  if ( is_wp_error( $status ) ) {
29
  //General error
30
  return false;
22
  if ( $cache === null ) {
23
  //init upload dir and a php file
24
  Utils::instance()->getDefUploadDir();
25
+ $url = WP_Helper::getUploadUrl();
26
+ $url = $url . '/wp-defender/index.php';
27
+ $ssl_verify = apply_filters( 'defender_ssl_verify', true ); //most hosts dont really have valid ssl or ssl still pending
28
+ $status = wp_remote_head( $url, array( 'user-agent' => $_SERVER['HTTP_USER_AGENT'], 'timeout' => 10, 'sslverify' => $ssl_verify ) );
29
  if ( is_wp_error( $status ) ) {
30
  //General error
31
  return false;
app/module/hardener/component/prevent-php.php CHANGED
@@ -74,9 +74,14 @@ class Prevent_Php extends Rule {
74
  if ( ! $this->verifyNonce() ) {
75
  return;
76
  }
 
 
 
 
 
 
 
77
 
78
- $server = func_get_arg( 0 ); //Get first param
79
- $file_paths = func_get_arg( 1 ); //Get second param
80
  if ( in_array( $server, array( 'apache', 'litespeed' ) ) ) {
81
  $service = $this->getApacheService();
82
  $service->setExcludeFilePaths( $file_paths ); //Set the paths
@@ -106,8 +111,16 @@ class Prevent_Php extends Rule {
106
  return;
107
  }
108
  $settings = Settings::instance();
109
- $server = func_get_arg( 0 ); //Get first param
110
- $file_paths = func_get_arg( 1 ); //Get second param
 
 
 
 
 
 
 
 
111
  if ( in_array( $server, array( 'apache', 'litespeed' ) ) ) {
112
  $service = $this->getApacheService();
113
  $service->setHtConfig( $settings->getNewHtConfig() ); //Set the previous template
74
  if ( ! $this->verifyNonce() ) {
75
  return;
76
  }
77
+ $file_paths = HTTP_Helper::retrieve_post( 'file_paths' ); //File paths to ignore. Apache and litespeed mainly
78
+ if ( $file_paths ) {
79
+ $file_paths = sanitize_textarea_field( $file_paths );
80
+ } else {
81
+ $file_paths = '';
82
+ }
83
+ $server = HTTP_Helper::retrieve_post( 'current_server' ); //Current server
84
 
 
 
85
  if ( in_array( $server, array( 'apache', 'litespeed' ) ) ) {
86
  $service = $this->getApacheService();
87
  $service->setExcludeFilePaths( $file_paths ); //Set the paths
111
  return;
112
  }
113
  $settings = Settings::instance();
114
+
115
+ $file_paths = HTTP_Helper::retrieve_post( 'file_paths' ); //File paths to ignore. Apache and litespeed mainly
116
+ if ( $file_paths ) {
117
+ $file_paths = sanitize_textarea_field( $file_paths );
118
+ } else {
119
+ $file_paths = '';
120
+ }
121
+
122
+ $server = HTTP_Helper::retrieve_post( 'current_server' ); //Current server
123
+
124
  if ( in_array( $server, array( 'apache', 'litespeed' ) ) ) {
125
  $service = $this->getApacheService();
126
  $service->setHtConfig( $settings->getNewHtConfig() ); //Set the previous template
app/module/hardener/component/protect-information-service.php CHANGED
@@ -19,8 +19,9 @@ class Protect_Information_Service extends Rule_Service implements IRule_Service
19
  public function check() {
20
  $cache = WP_Helper::getArrayCache()->get( 'Protect_Information_Service', null );
21
  if ( $cache === null ) {
22
- $url = wp_defender()->getPluginUrl() . 'changelog.txt';
23
- $status = wp_remote_head( $url, array( 'user-agent' => $_SERVER['HTTP_USER_AGENT'] ) );
 
24
  if ( 200 == wp_remote_retrieve_response_code( $status ) ) {
25
  WP_Helper::getArrayCache()->set( 'Protect_Information_Service', false );
26
  return false;
19
  public function check() {
20
  $cache = WP_Helper::getArrayCache()->get( 'Protect_Information_Service', null );
21
  if ( $cache === null ) {
22
+ $url = wp_defender()->getPluginUrl() . 'changelog.txt';
23
+ $ssl_verify = apply_filters( 'defender_ssl_verify', true ); //most hosts dont really have valid ssl or ssl still pending
24
+ $status = wp_remote_head( $url, array( 'user-agent' => $_SERVER['HTTP_USER_AGENT'], 'sslverify' => $ssl_verify ) );
25
  if ( 200 == wp_remote_retrieve_response_code( $status ) ) {
26
  WP_Helper::getArrayCache()->set( 'Protect_Information_Service', false );
27
  return false;
app/module/hardener/controller/main.php CHANGED
@@ -105,14 +105,8 @@ class Main extends Controller {
105
  }
106
 
107
  $slug = HTTP_Helper::retrieve_post( 'slug' );
108
- $file_paths = HTTP_Helper::retrieve_post( 'file_paths' ); //File paths to ignore. Apache and litespeed mainly
109
- if ( $file_paths ) {
110
- $file_paths = sanitize_textarea_field( $file_paths );
111
- } else {
112
- $file_paths = '';
113
- }
114
- $server = HTTP_Helper::retrieve_post( 'current_server' ); //Current server
115
- do_action( "processingHardener" . $slug , $server, $file_paths );
116
  //fall back
117
  wp_send_json_success( array(
118
  'message' => __( "Security tweak successfully resolved.", "defender-security" ),
@@ -131,16 +125,9 @@ class Main extends Controller {
131
  return;
132
  }
133
 
134
- $slug = HTTP_Helper::retrieve_post( 'slug' );
135
- $file_paths = HTTP_Helper::retrieve_post( 'file_paths' ); //File paths to ignore. Apache and litespeed mainly
136
- if ( $file_paths ) {
137
- $file_paths = sanitize_textarea_field( $file_paths );
138
- } else {
139
- $file_paths = '';
140
- }
141
-
142
- $server = HTTP_Helper::retrieve_post( 'current_server' ); //Current server
143
- do_action( "processUpdate" . $slug , $server, $file_paths );
144
  //fall back
145
  wp_send_json_success( array(
146
  'message' => __( "Security tweak successfully updated.", "defender-security" ),
105
  }
106
 
107
  $slug = HTTP_Helper::retrieve_post( 'slug' );
108
+
109
+ do_action( "processingHardener" . $slug );
 
 
 
 
 
 
110
  //fall back
111
  wp_send_json_success( array(
112
  'message' => __( "Security tweak successfully resolved.", "defender-security" ),
125
  return;
126
  }
127
 
128
+ $slug = HTTP_Helper::retrieve_post( 'slug' );
129
+
130
+ do_action( "processUpdate" . $slug );
 
 
 
 
 
 
 
131
  //fall back
132
  wp_send_json_success( array(
133
  'message' => __( "Security tweak successfully updated.", "defender-security" ),
app/module/ip-lockout/controller/main.php CHANGED
@@ -344,7 +344,7 @@ class Main extends Controller {
344
  if ( $settings->login_protection ) {
345
  $this->add_action( 'wp_login_failed', 'recordFailLogin', 9999 );
346
  $this->add_filter( 'authenticate', 'showAttemptLeft', 9999, 3 );
347
- $this->add_action( 'wp_login', 'clearAttemptStats' );
348
  }
349
 
350
  if ( $settings->detect_404 ) {
@@ -450,7 +450,6 @@ class Main extends Controller {
450
  public function record404() {
451
  if ( is_404() ) {
452
  $settings = Settings::instance();
453
-
454
  if ( is_user_logged_in() && current_user_can( 'edit_posts' ) ) {
455
  //we wont track 404 error if user can login and not subscriber
456
  return;
@@ -485,6 +484,35 @@ class Main extends Controller {
485
  }
486
  $model->save();
487
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
488
  do_action( 'wd_lockout_trigger', $model );
489
  }
490
  }
@@ -517,7 +545,7 @@ class Main extends Controller {
517
  /**
518
  * When user get login successfully, we will reset the attempt count
519
  */
520
- public function clearAttemptStats() {
521
  $ip = $this->getUserIp();
522
  $model = IP_Model::findOne( array(
523
  'ip' => $ip
344
  if ( $settings->login_protection ) {
345
  $this->add_action( 'wp_login_failed', 'recordFailLogin', 9999 );
346
  $this->add_filter( 'authenticate', 'showAttemptLeft', 9999, 3 );
347
+ $this->add_action( 'wp_login', 'clearAttemptStats', 10, 2 );
348
  }
349
 
350
  if ( $settings->detect_404 ) {
450
  public function record404() {
451
  if ( is_404() ) {
452
  $settings = Settings::instance();
 
453
  if ( is_user_logged_in() && current_user_can( 'edit_posts' ) ) {
454
  //we wont track 404 error if user can login and not subscriber
455
  return;
484
  }
485
  $model->save();
486
 
487
+ //need to check if this is css,js or images 404 from missig link from a page
488
+ $ref = isset( $_SERVER['HTTP_REFERER'] ) ? $_SERVER['HTTP_REFERER'] : "";
489
+ if ( $ref && parse_url( $ref, PHP_URL_SCHEME ) . '://' . parse_url( $ref, PHP_URL_HOST ) == site_url() ) {
490
+ //the only variable we allow is ver, bydefault of wordpress
491
+ $args = parse_url( $uri, PHP_URL_QUERY );
492
+ if ( ! empty( $args ) ) {
493
+ //validate it
494
+ if ( isset( $args['ver'] ) && is_numeric( $args['ver'] ) ) {
495
+ unset( $args['ver'] );
496
+ }
497
+ }
498
+ if ( count( $args ) == 0 ) {
499
+ //check the extension is js, css, or image type
500
+ $exts = apply_filters( 'wd_allow_ref_extensions', array(
501
+ 'js',
502
+ 'css',
503
+ 'jpg',
504
+ 'png',
505
+ 'gif'
506
+ ) );
507
+ $ext = pathinfo( $uri, PATHINFO_EXTENSION );
508
+ $ext = strtolower( $ext );
509
+ if ( in_array( $ext, $exts ) ) {
510
+ //log but no lock
511
+ return;
512
+ }
513
+ }
514
+ }
515
+
516
  do_action( 'wd_lockout_trigger', $model );
517
  }
518
  }
545
  /**
546
  * When user get login successfully, we will reset the attempt count
547
  */
548
+ public function clearAttemptStats( $user_login, $user = '' ) {
549
  $ip = $this->getUserIp();
550
  $model = IP_Model::findOne( array(
551
  'ip' => $ip
app/module/ip-lockout/js/script.js CHANGED
@@ -127,7 +127,7 @@ jQuery(function ($) {
127
  $('body').addClass('wpmud');
128
  WDP.showOverlay("#defLockoutUpgrade", {
129
  title: 'Updating...',
130
- class: 'no-close wp-defender'
131
  });
132
  }
133
 
127
  $('body').addClass('wpmud');
128
  WDP.showOverlay("#defLockoutUpgrade", {
129
  title: 'Updating...',
130
+ class: 'no-close migrate-iplockout wp-defender'
131
  });
132
  }
133
 
app/module/ip-lockout/view/emails/404-lockout.php CHANGED
@@ -455,8 +455,9 @@
455
  <?php printf( __( "Hi %s", "defender-security" ), $admin ) ?>
456
  ,</h3>
457
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
 
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 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 ) ?>
460
  </p>
461
  <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;">
462
  <?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" ) ) ?>
455
  <?php printf( __( "Hi %s", "defender-security" ), $admin ) ?>
456
  ,</h3>
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" ) ) ?>
app/module/ip-lockout/view/emails/login-lockout.php CHANGED
@@ -454,10 +454,11 @@
454
  <h3 style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 32px; font-weight: normal; line-height: 32px; margin: 0; margin-bottom: 0; padding: 0 0 28px; text-align: left; word-wrap: normal;">
455
  <?php printf( __( "Hi %s,", "defender-security" ), $admin ) ?></h3>
456
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
 
457
  <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
  <?php
459
- $lockout_duration = $setting->login_protection_lockout_ban == true ? __( "They have banned permanently.", "defender-security" ) : sprintf( __( "They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $setting->login_protection_lockout_duration );
460
- 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
461
  ) ?>
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;">
454
  <h3 style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 32px; font-weight: normal; line-height: 32px; margin: 0; margin-bottom: 0; padding: 0 0 28px; text-align: left; word-wrap: normal;">
455
  <?php printf( __( "Hi %s,", "defender-security" ), $admin ) ?></h3>
456
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
457
+ <?php $utils = \WP_Defender\Behavior\Utils::instance() ?>
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;">
app/module/ip-lockout/view/emails/login-username-ban.php CHANGED
@@ -454,10 +454,11 @@
454
  <h3 style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 32px; font-weight: normal; line-height: 32px; margin: 0; margin-bottom: 0; padding: 0 0 28px; text-align: left; word-wrap: normal;">
455
  <?php printf( __( "Hi %s,", "defender-security" ), $admin ) ?></h3>
456
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
 
457
  <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
  <?php
459
- $lockout_duration = $setting->login_protection_lockout_ban == true ? __( "They have banned permanently.", "defender-security" ) : sprintf( __( "They have been locked out for <strong>%s seconds.</strong>", "defender-security" ), $setting->login_protection_lockout_duration );
460
- printf( __( "We've just locked out the host <strong>%s</strong> from %s due to attempting to login with a banned username.They have banned permanently.", "defender-security" ), $ip, network_site_url() ) ?>
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" ) ) ?>
454
  <h3 style="Margin: 0; Margin-bottom: 0; color: #555555; font-family: Helvetica, Arial, sans-serif; font-size: 32px; font-weight: normal; line-height: 32px; margin: 0; margin-bottom: 0; padding: 0 0 28px; text-align: left; word-wrap: normal;">
455
  <?php printf( __( "Hi %s,", "defender-security" ), $admin ) ?></h3>
456
  <?php $setting = \WP_Defender\Module\IP_Lockout\Model\Settings::instance() ?>
457
+ <?php $utils = \WP_Defender\Behavior\Utils::instance() ?>
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" ) ) ?>
app/module/scan/controller/main.php CHANGED
@@ -300,6 +300,7 @@ class Main extends \WP_Defender\Controller {
300
  $settings->save();
301
  if ( $this->hasMethod( 'scheduleReportTime' ) ) {
302
  $this->scheduleReportTime( $settings );
 
303
  }
304
  wp_send_json_success( array(
305
  'message' => __( "Your settings have been updated.", "defender-security" )
300
  $settings->save();
301
  if ( $this->hasMethod( 'scheduleReportTime' ) ) {
302
  $this->scheduleReportTime( $settings );
303
+ $this->submitStatsToDev();
304
  }
305
  wp_send_json_success( array(
306
  'message' => __( "Your settings have been updated.", "defender-security" )
assets/js/scripts.js CHANGED
@@ -87,6 +87,7 @@ jQuery(function ($) {
87
  $('.skip-activator').hide();
88
  var i = 0;
89
  progress();
 
90
  function progress() {
91
  if (i < data.data.activated.length) {
92
  var text = dashboard[data.data.activated[i]];
@@ -123,7 +124,7 @@ jQuery(function ($) {
123
  return false;
124
  });
125
  $('body').on('click', '.dev-overlay', function (e) {
126
- if ($(this).hasClass('scanning') || $(this).hasClass('wd-requirement')) {
127
  return;
128
  }
129
  var target = $(e.target);
87
  $('.skip-activator').hide();
88
  var i = 0;
89
  progress();
90
+
91
  function progress() {
92
  if (i < data.data.activated.length) {
93
  var text = dashboard[data.data.activated[i]];
124
  return false;
125
  });
126
  $('body').on('click', '.dev-overlay', function (e) {
127
+ if ($(this).hasClass('scanning') || $(this).hasClass('migrate-iplockout') || $(this).hasClass('wd-requirement')) {
128
  return;
129
  }
130
  var target = $(e.target);
changelog.txt CHANGED
@@ -4,6 +4,13 @@ Tested up to: 4.7.4
4
 
5
  Change Log:
6
 
 
 
 
 
 
 
 
7
  1.7.3 - 2017-14-10
8
  ----------------------------------------------------------------------
9
  - Fix: Two-factor authentication can be bypassed by user with no role.
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.
10
+ - Fix: Visitor would get a 404 lockout if landing on a page with many dead links.
11
+ - Improvement: When an user is deleted, audit logging now display the user's login instead of only UID.
12
+ - Other minor enhancements/fixes
13
+
14
  1.7.3 - 2017-14-10
15
  ----------------------------------------------------------------------
16
  - Fix: Two-factor authentication can be bypassed by user with no role.
languages/wpdef-default.pot CHANGED
@@ -2,9 +2,9 @@
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.3\n"
6
  "Report-Msgid-Bugs-To: https://wpmudev.org\n"
7
- "POT-Creation-Date: 2017-10-14 05:15:14+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=utf-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -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:846 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:849 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:852 free/utils.php:662
166
  msgid "monthly"
167
  msgstr ""
168
 
@@ -216,22 +216,22 @@ msgstr ""
216
  msgid "Guest"
217
  msgstr ""
218
 
219
- #: app/behavior/utils.php:729
220
  msgid "WordPress Core Integrity"
221
  msgstr ""
222
 
223
- #: app/behavior/utils.php:730
224
  msgid "Plugins & Themes vulnerability"
225
  msgstr ""
226
 
227
- #: app/behavior/utils.php:731 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:829 free/utils.php:639
235
  msgid "Please upgrade to 5.3 or later"
236
  msgstr ""
237
 
@@ -305,7 +305,7 @@ msgid "Defender%s"
305
  msgstr ""
306
 
307
  #: app/module/advanced-tools/behavior/at-widget.php:17
308
- #: app/module/advanced-tools/controller/main.php:396
309
  #: app/module/advanced-tools/view/layouts/layout.php:5
310
  msgid "Advanced Tools"
311
  msgstr ""
@@ -396,14 +396,14 @@ msgstr ""
396
  msgid "Some error happen"
397
  msgstr ""
398
 
399
- #: app/module/advanced-tools/controller/main.php:330
400
  msgid "Whoops, the passcode you entered was incorrect or expired."
401
  msgstr ""
402
 
403
- #: app/module/advanced-tools/controller/main.php:461
404
  #: app/module/audit/controller/main.php:196
405
- #: app/module/ip-lockout/controller/main.php:665
406
- #: app/module/scan/controller/main.php:305
407
  msgid "Your settings have been updated."
408
  msgstr ""
409
 
@@ -439,7 +439,7 @@ msgid "Use the Google Authenticator app to sign in with a separate passcode."
439
  msgstr ""
440
 
441
  #: app/module/advanced-tools/view/login/disabled.php:20
442
- #: app/module/scan/controller/main.php:530 app/module/scan/view/setting.php:138
443
  #: app/module/scan/view/setting.php:158
444
  msgid "Cancel"
445
  msgstr ""
@@ -1225,46 +1225,51 @@ msgid "A new user registered: Username: %s, Role: %s"
1225
  msgstr ""
1226
 
1227
  #: app/module/audit/component/users-audit.php:75
1228
- msgid "%s deleted an user: ID: %s"
 
1229
  msgstr ""
1230
 
1231
- #: app/module/audit/component/users-audit.php:91
 
 
 
 
1232
  msgid "Password requested to reset for user: %s"
1233
  msgstr ""
1234
 
1235
- #: app/module/audit/component/users-audit.php:99
1236
  msgid "Password reset for user: %s"
1237
  msgstr ""
1238
 
1239
- #: app/module/audit/component/users-audit.php:110
1240
  msgid "%s changed user %s's role from %s to %s"
1241
  msgstr ""
1242
 
1243
- #: app/module/audit/component/users-audit.php:164
1244
  msgid "User %s updated his/her profile"
1245
  msgstr ""
1246
 
1247
- #: app/module/audit/component/users-audit.php:169
1248
  msgid "%s updated user %s's profile information"
1249
  msgstr ""
1250
 
1251
- #: app/module/audit/component/users-audit.php:177
1252
  msgid "lost password"
1253
  msgstr ""
1254
 
1255
- #: app/module/audit/component/users-audit.php:178
1256
  msgid "registered"
1257
  msgstr ""
1258
 
1259
- #: app/module/audit/component/users-audit.php:179
1260
  msgid "login"
1261
  msgstr ""
1262
 
1263
- #: app/module/audit/component/users-audit.php:180
1264
  msgid "logout"
1265
  msgstr ""
1266
 
1267
- #: app/module/audit/component/users-audit.php:181
1268
  msgid "password reset"
1269
  msgstr ""
1270
 
@@ -1374,54 +1379,54 @@ msgid "Defender!"
1374
  msgstr ""
1375
 
1376
  #: app/module/audit/view/email_template.php:454
1377
- #: app/module/ip-lockout/view/emails/404-lockout.php:510
1378
- #: app/module/ip-lockout/view/emails/login-lockout.php:512
1379
- #: app/module/ip-lockout/view/emails/login-username-ban.php:511
1380
  #: app/module/ip-lockout/view/emails/report.php:545
1381
  #: app/module/scan/view/email-template.php:477
1382
  msgid "Related plugins worth giving a try"
1383
  msgstr ""
1384
 
1385
  #: app/module/audit/view/email_template.php:475
1386
- #: app/module/ip-lockout/view/emails/404-lockout.php:531
1387
- #: app/module/ip-lockout/view/emails/login-lockout.php:533
1388
- #: app/module/ip-lockout/view/emails/login-username-ban.php:532
1389
  #: app/module/ip-lockout/view/emails/report.php:566
1390
  #: app/module/scan/view/email-template.php:498
1391
  msgid "Optimize your site with"
1392
  msgstr ""
1393
 
1394
  #: app/module/audit/view/email_template.php:477
1395
- #: app/module/ip-lockout/view/emails/404-lockout.php:533
1396
- #: app/module/ip-lockout/view/emails/login-lockout.php:535
1397
- #: app/module/ip-lockout/view/emails/login-username-ban.php:534
1398
  #: app/module/ip-lockout/view/emails/report.php:568
1399
  #: app/module/scan/view/email-template.php:500
1400
  msgid "Hummingbird"
1401
  msgstr ""
1402
 
1403
  #: app/module/audit/view/email_template.php:494
1404
- #: app/module/ip-lockout/view/emails/404-lockout.php:550
1405
- #: app/module/ip-lockout/view/emails/login-lockout.php:552
1406
- #: app/module/ip-lockout/view/emails/login-username-ban.php:551
1407
  #: app/module/ip-lockout/view/emails/report.php:585
1408
  #: app/module/scan/view/email-template.php:517
1409
  msgid "Back up your hard work with"
1410
  msgstr ""
1411
 
1412
  #: app/module/audit/view/email_template.php:496
1413
- #: app/module/ip-lockout/view/emails/404-lockout.php:552
1414
- #: app/module/ip-lockout/view/emails/login-lockout.php:554
1415
- #: app/module/ip-lockout/view/emails/login-username-ban.php:553
1416
  #: app/module/ip-lockout/view/emails/report.php:587
1417
  #: app/module/scan/view/email-template.php:519
1418
  msgid "Snapshot"
1419
  msgstr ""
1420
 
1421
  #: app/module/audit/view/email_template.php:530
1422
- #: app/module/ip-lockout/view/emails/404-lockout.php:586
1423
- #: app/module/ip-lockout/view/emails/login-lockout.php:588
1424
- #: app/module/ip-lockout/view/emails/login-username-ban.php:587
1425
  #: app/module/ip-lockout/view/emails/report.php:621
1426
  #: app/module/scan/view/email-template.php:553
1427
  msgid "<a href=\"%s\">Configure reporting preferences</a>"
@@ -1710,7 +1715,7 @@ msgid "Audit log reports are disabled"
1710
  msgstr ""
1711
 
1712
  #: app/module/hardener/behavior/widget.php:19
1713
- #: app/module/hardener/controller/main.php:159
1714
  #: app/module/hardener/view/layouts/layout.php:3
1715
  msgid "Security Tweaks"
1716
  msgstr ""
@@ -1756,8 +1761,8 @@ msgstr ""
1756
  #: app/module/hardener/component/disable-file-editor-service.php:32
1757
  #: app/module/hardener/component/disable-file-editor-service.php:66
1758
  #: app/module/hardener/component/hide-error-service.php:61
1759
- #: app/module/hardener/component/protect-information-service.php:45
1760
- #: app/module/hardener/component/protect-information-service.php:68
1761
  #: app/module/hardener/component/security-key-service.php:48
1762
  #: app/module/hardener/component/servers/apache-service.php:62
1763
  #: app/module/hardener/component/servers/apache-service.php:66
@@ -1858,12 +1863,12 @@ msgstr ""
1858
  msgid "Update PHP to latest version"
1859
  msgstr ""
1860
 
1861
- #: app/module/hardener/component/prevent-php-service.php:50
1862
  msgid "Process is not possible on your current server"
1863
  msgstr ""
1864
 
1865
- #: app/module/hardener/component/prevent-php-service.php:57
1866
- #: app/module/hardener/component/protect-information-service.php:85
1867
  msgid "Revert is not possible on your current server"
1868
  msgstr ""
1869
 
@@ -1910,11 +1915,11 @@ msgstr ""
1910
  msgid "Security tweak successfully reverted."
1911
  msgstr ""
1912
 
1913
- #: app/module/hardener/controller/main.php:118
1914
  msgid "Security tweak successfully resolved."
1915
  msgstr ""
1916
 
1917
- #: app/module/hardener/controller/main.php:146
1918
  msgid "Security tweak successfully updated."
1919
  msgstr ""
1920
 
@@ -2446,8 +2451,8 @@ msgid "Lockout notifications are disabled"
2446
  msgstr ""
2447
 
2448
  #: app/module/ip-lockout/component/login-protection-api.php:61
2449
- #: app/module/ip-lockout/controller/main.php:560
2450
- #: app/module/ip-lockout/controller/main.php:569
2451
  msgid ""
2452
  "You have been locked out by the administrator for attempting to login with "
2453
  "a banned username"
@@ -2594,56 +2599,56 @@ msgstr ""
2594
  msgid "Login lockout alert for %s"
2595
  msgstr ""
2596
 
2597
- #: app/module/ip-lockout/controller/main.php:499
2598
  msgid "Failed login attempt with username %s"
2599
  msgstr ""
2600
 
2601
- #: app/module/ip-lockout/controller/main.php:562
2602
- #: app/module/ip-lockout/controller/main.php:572
2603
  msgid "%d login attempts remaining"
2604
  msgstr ""
2605
 
2606
- #: app/module/ip-lockout/controller/main.php:661
2607
  msgid ""
2608
  "Your settings have been updated, however some IPs were removed because "
2609
  "invalid format, or you blacklist yourself"
2610
  msgstr ""
2611
 
2612
- #: app/module/ip-lockout/controller/main.php:672
2613
  msgid "Login Protection has been activated."
2614
  msgstr ""
2615
 
2616
- #: app/module/ip-lockout/controller/main.php:674
2617
  msgid "Login Protection has been deactivated."
2618
  msgstr ""
2619
 
2620
- #: app/module/ip-lockout/controller/main.php:679
2621
  msgid "404 Detection has been activated."
2622
  msgstr ""
2623
 
2624
- #: app/module/ip-lockout/controller/main.php:681
2625
  msgid "404 Detection has been deactivated."
2626
  msgstr ""
2627
 
2628
- #: app/module/ip-lockout/controller/main.php:710 app/module/ip-lockout.php:35
2629
  #: app/view/activator-free.php:33 app/view/activator.php:49
2630
  msgid "IP Lockouts"
2631
  msgstr ""
2632
 
2633
- #: app/module/ip-lockout/controller/main.php:727
2634
- #: app/module/ip-lockout/controller/main.php:733
2635
  msgid "Your file is invalid!"
2636
  msgstr ""
2637
 
2638
- #: app/module/ip-lockout/controller/main.php:739
2639
  msgid "Your file content is invalid!"
2640
  msgstr ""
2641
 
2642
- #: app/module/ip-lockout/controller/main.php:748
2643
  msgid "Your whitelist/blacklist has been successfully imported."
2644
  msgstr ""
2645
 
2646
- #: app/module/ip-lockout/controller/main.php:933
2647
  msgid "Thanks for your patience. All set."
2648
  msgstr ""
2649
 
@@ -2862,38 +2867,38 @@ msgstr ""
2862
  msgid "Hi %s"
2863
  msgstr ""
2864
 
2865
- #: app/module/ip-lockout/view/emails/404-lockout.php:459
2866
  msgid ""
2867
  "We've just locked out the host <strong>%s</strong> from %s due to more than "
2868
  "<strong>%s</strong> 404 requests for the file <strong>%s</strong>. They "
2869
  "have been locked out for <strong>%s seconds.</strong>"
2870
  msgstr ""
2871
 
2872
- #: app/module/ip-lockout/view/emails/404-lockout.php:462
2873
- #: app/module/ip-lockout/view/emails/login-lockout.php:464
2874
- #: app/module/ip-lockout/view/emails/login-username-ban.php:463
2875
  #: app/module/ip-lockout/view/emails/report.php:497
2876
  msgid "You can view the full lockout logs <a href=\"%s\">here</a>"
2877
  msgstr ""
2878
 
2879
- #: app/module/ip-lockout/view/emails/404-lockout.php:477
2880
- #: app/module/ip-lockout/view/emails/login-lockout.php:479
2881
- #: app/module/ip-lockout/view/emails/login-username-ban.php:478
2882
  #: app/module/ip-lockout/view/emails/report.php:512
2883
  msgid "Stay vigilant."
2884
  msgstr ""
2885
 
2886
- #: app/module/ip-lockout/view/emails/404-lockout.php:480
2887
- #: app/module/ip-lockout/view/emails/login-lockout.php:482
2888
- #: app/module/ip-lockout/view/emails/login-username-ban.php:481
2889
  #: app/module/ip-lockout/view/emails/report.php:515
2890
  #: app/module/ip-lockout/view/locked.php:7
2891
  msgid "WP Defender"
2892
  msgstr ""
2893
 
2894
- #: app/module/ip-lockout/view/emails/404-lockout.php:482
2895
- #: app/module/ip-lockout/view/emails/login-lockout.php:484
2896
- #: app/module/ip-lockout/view/emails/login-username-ban.php:483
2897
  #: app/module/ip-lockout/view/emails/report.php:517
2898
  msgid "Security Hero"
2899
  msgstr ""
@@ -2913,26 +2918,27 @@ msgstr ""
2913
  msgid "Hi %s,"
2914
  msgstr ""
2915
 
2916
- #: app/module/ip-lockout/view/emails/login-lockout.php:459
2917
- #: app/module/ip-lockout/view/emails/login-username-ban.php:459
2918
- msgid "They have banned permanently."
2919
  msgstr ""
2920
 
2921
- #: app/module/ip-lockout/view/emails/login-lockout.php:459
2922
- #: app/module/ip-lockout/view/emails/login-username-ban.php:459
2923
  msgid "They have been locked out for <strong>%s seconds.</strong>"
2924
  msgstr ""
2925
 
2926
- #: app/module/ip-lockout/view/emails/login-lockout.php:460
2927
  msgid ""
2928
  "We've just locked out the host <strong>%s</strong> from %s due to more than "
2929
  "<strong>%s</strong> failed login attempts. %s"
2930
  msgstr ""
2931
 
2932
- #: app/module/ip-lockout/view/emails/login-username-ban.php:460
2933
  msgid ""
2934
  "We've just locked out the host <strong>%s</strong> from %s due to "
2935
- "attempting to login with a banned username.They have banned permanently."
 
2936
  msgstr ""
2937
 
2938
  #: app/module/ip-lockout/view/emails/report.php:7
@@ -3561,7 +3567,7 @@ msgid "Suspicious File"
3561
  msgstr ""
3562
 
3563
  #: app/module/scan/component/result-table.php:35
3564
- #: app/module/scan/controller/main.php:808
3565
  msgid "Issue"
3566
  msgstr ""
3567
 
@@ -3623,14 +3629,14 @@ msgid "Update Theme"
3623
  msgstr ""
3624
 
3625
  #: app/module/scan/controller/main.php:178
3626
- #: app/module/scan/controller/main.php:439
3627
  msgid "The suspicious file has been successfully ignored."
3628
  msgid_plural "The suspicious files have been successfully ignored."
3629
  msgstr[0] ""
3630
  msgstr[1] ""
3631
 
3632
  #: app/module/scan/controller/main.php:193
3633
- #: app/module/scan/controller/main.php:410
3634
  msgid "The suspicious file has been successfully restored."
3635
  msgid_plural "The suspicious files have been successfully restored."
3636
  msgstr[0] ""
@@ -3656,47 +3662,47 @@ msgstr[1] ""
3656
  msgid "No item has been resolved"
3657
  msgstr ""
3658
 
3659
- #: app/module/scan/controller/main.php:335
3660
  msgid "This item has been resolved."
3661
  msgstr ""
3662
 
3663
- #: app/module/scan/controller/main.php:339
3664
  msgid "Please try again!"
3665
  msgstr ""
3666
 
3667
- #: app/module/scan/controller/main.php:350
3668
- #: app/module/scan/controller/main.php:386
3669
- #: app/module/scan/controller/main.php:415
3670
- #: app/module/scan/controller/main.php:444
3671
  msgid "The item doesn't exist!"
3672
  msgstr ""
3673
 
3674
- #: app/module/scan/controller/main.php:380
3675
  msgid "This item has been permanent removed."
3676
  msgstr ""
3677
 
3678
- #: app/module/scan/controller/main.php:519
3679
  #: app/module/scan/view/layouts/layout.php:5
3680
  #: app/module/scan/view/scanning.php:6 app/view/activator-free.php:13
3681
  #: app/view/activator.php:13
3682
  msgid "File Scanning"
3683
  msgstr ""
3684
 
3685
- #: app/module/scan/controller/main.php:530
3686
  msgid "Scan In Progress"
3687
  msgstr ""
3688
 
3689
- #: app/module/scan/controller/main.php:531 app/module/scan/view/issues.php:37
3690
  msgid ""
3691
  "Your code is currently clean! There were no issues found during the last "
3692
  "scan, though you can always perform a new scan anytime."
3693
  msgstr ""
3694
 
3695
- #: app/module/scan/controller/main.php:806
3696
  msgid "File"
3697
  msgstr ""
3698
 
3699
- #: app/module/scan/controller/main.php:842
3700
  msgid "Let’s get your site patched up."
3701
  msgstr ""
3702
 
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"
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
  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
 
305
  msgstr ""
306
 
307
  #: app/module/advanced-tools/behavior/at-widget.php:17
308
+ #: app/module/advanced-tools/controller/main.php:392
309
  #: app/module/advanced-tools/view/layouts/layout.php:5
310
  msgid "Advanced Tools"
311
  msgstr ""
396
  msgid "Some error happen"
397
  msgstr ""
398
 
399
+ #: app/module/advanced-tools/controller/main.php:326
400
  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 ""
409
 
439
  msgstr ""
440
 
441
  #: app/module/advanced-tools/view/login/disabled.php:20
442
+ #: app/module/scan/controller/main.php:531 app/module/scan/view/setting.php:138
443
  #: app/module/scan/view/setting.php:158
444
  msgid "Cancel"
445
  msgstr ""
1225
  msgstr ""
1226
 
1227
  #: app/module/audit/component/users-audit.php:75
1228
+ #: app/module/audit/component/users-audit.php:111
1229
+ msgid "%s deleted a user: ID: %s, username: %s"
1230
  msgstr ""
1231
 
1232
+ #: app/module/audit/component/users-audit.php:93
1233
+ msgid "%s removed a user: ID: %s, username: %s from blog %s"
1234
+ msgstr ""
1235
+
1236
+ #: app/module/audit/component/users-audit.php:137
1237
  msgid "Password requested to reset for user: %s"
1238
  msgstr ""
1239
 
1240
+ #: app/module/audit/component/users-audit.php:145
1241
  msgid "Password reset for user: %s"
1242
  msgstr ""
1243
 
1244
+ #: app/module/audit/component/users-audit.php:156
1245
  msgid "%s changed user %s's role from %s to %s"
1246
  msgstr ""
1247
 
1248
+ #: app/module/audit/component/users-audit.php:210
1249
  msgid "User %s updated his/her profile"
1250
  msgstr ""
1251
 
1252
+ #: app/module/audit/component/users-audit.php:215
1253
  msgid "%s updated user %s's profile information"
1254
  msgstr ""
1255
 
1256
+ #: app/module/audit/component/users-audit.php:223
1257
  msgid "lost password"
1258
  msgstr ""
1259
 
1260
+ #: app/module/audit/component/users-audit.php:224
1261
  msgid "registered"
1262
  msgstr ""
1263
 
1264
+ #: app/module/audit/component/users-audit.php:225
1265
  msgid "login"
1266
  msgstr ""
1267
 
1268
+ #: app/module/audit/component/users-audit.php:226
1269
  msgid "logout"
1270
  msgstr ""
1271
 
1272
+ #: app/module/audit/component/users-audit.php:227
1273
  msgid "password reset"
1274
  msgstr ""
1275
 
1379
  msgstr ""
1380
 
1381
  #: app/module/audit/view/email_template.php:454
1382
+ #: app/module/ip-lockout/view/emails/404-lockout.php:511
1383
+ #: app/module/ip-lockout/view/emails/login-lockout.php:513
1384
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:512
1385
  #: app/module/ip-lockout/view/emails/report.php:545
1386
  #: app/module/scan/view/email-template.php:477
1387
  msgid "Related plugins worth giving a try"
1388
  msgstr ""
1389
 
1390
  #: app/module/audit/view/email_template.php:475
1391
+ #: app/module/ip-lockout/view/emails/404-lockout.php:532
1392
+ #: app/module/ip-lockout/view/emails/login-lockout.php:534
1393
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:533
1394
  #: app/module/ip-lockout/view/emails/report.php:566
1395
  #: app/module/scan/view/email-template.php:498
1396
  msgid "Optimize your site with"
1397
  msgstr ""
1398
 
1399
  #: app/module/audit/view/email_template.php:477
1400
+ #: app/module/ip-lockout/view/emails/404-lockout.php:534
1401
+ #: app/module/ip-lockout/view/emails/login-lockout.php:536
1402
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:535
1403
  #: app/module/ip-lockout/view/emails/report.php:568
1404
  #: app/module/scan/view/email-template.php:500
1405
  msgid "Hummingbird"
1406
  msgstr ""
1407
 
1408
  #: app/module/audit/view/email_template.php:494
1409
+ #: app/module/ip-lockout/view/emails/404-lockout.php:551
1410
+ #: app/module/ip-lockout/view/emails/login-lockout.php:553
1411
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:552
1412
  #: app/module/ip-lockout/view/emails/report.php:585
1413
  #: app/module/scan/view/email-template.php:517
1414
  msgid "Back up your hard work with"
1415
  msgstr ""
1416
 
1417
  #: app/module/audit/view/email_template.php:496
1418
+ #: app/module/ip-lockout/view/emails/404-lockout.php:553
1419
+ #: app/module/ip-lockout/view/emails/login-lockout.php:555
1420
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:554
1421
  #: app/module/ip-lockout/view/emails/report.php:587
1422
  #: app/module/scan/view/email-template.php:519
1423
  msgid "Snapshot"
1424
  msgstr ""
1425
 
1426
  #: app/module/audit/view/email_template.php:530
1427
+ #: app/module/ip-lockout/view/emails/404-lockout.php:587
1428
+ #: app/module/ip-lockout/view/emails/login-lockout.php:589
1429
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:588
1430
  #: app/module/ip-lockout/view/emails/report.php:621
1431
  #: app/module/scan/view/email-template.php:553
1432
  msgid "<a href=\"%s\">Configure reporting preferences</a>"
1715
  msgstr ""
1716
 
1717
  #: app/module/hardener/behavior/widget.php:19
1718
+ #: app/module/hardener/controller/main.php:146
1719
  #: app/module/hardener/view/layouts/layout.php:3
1720
  msgid "Security Tweaks"
1721
  msgstr ""
1761
  #: app/module/hardener/component/disable-file-editor-service.php:32
1762
  #: app/module/hardener/component/disable-file-editor-service.php:66
1763
  #: app/module/hardener/component/hide-error-service.php:61
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
1863
  msgid "Update PHP to latest version"
1864
  msgstr ""
1865
 
1866
+ #: app/module/hardener/component/prevent-php-service.php:51
1867
  msgid "Process is not possible on your current server"
1868
  msgstr ""
1869
 
1870
+ #: app/module/hardener/component/prevent-php-service.php:58
1871
+ #: app/module/hardener/component/protect-information-service.php:86
1872
  msgid "Revert is not possible on your current server"
1873
  msgstr ""
1874
 
1915
  msgid "Security tweak successfully reverted."
1916
  msgstr ""
1917
 
1918
+ #: app/module/hardener/controller/main.php:112
1919
  msgid "Security tweak successfully resolved."
1920
  msgstr ""
1921
 
1922
+ #: app/module/hardener/controller/main.php:133
1923
  msgid "Security tweak successfully updated."
1924
  msgstr ""
1925
 
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"
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
 
2867
  msgid "Hi %s"
2868
  msgstr ""
2869
 
2870
+ #: app/module/ip-lockout/view/emails/404-lockout.php:460
2871
  msgid ""
2872
  "We've just locked out the host <strong>%s</strong> from %s due to more than "
2873
  "<strong>%s</strong> 404 requests for the file <strong>%s</strong>. They "
2874
  "have been locked out for <strong>%s seconds.</strong>"
2875
  msgstr ""
2876
 
2877
+ #: app/module/ip-lockout/view/emails/404-lockout.php:463
2878
+ #: app/module/ip-lockout/view/emails/login-lockout.php:465
2879
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:464
2880
  #: app/module/ip-lockout/view/emails/report.php:497
2881
  msgid "You can view the full lockout logs <a href=\"%s\">here</a>"
2882
  msgstr ""
2883
 
2884
+ #: app/module/ip-lockout/view/emails/404-lockout.php:478
2885
+ #: app/module/ip-lockout/view/emails/login-lockout.php:480
2886
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:479
2887
  #: app/module/ip-lockout/view/emails/report.php:512
2888
  msgid "Stay vigilant."
2889
  msgstr ""
2890
 
2891
+ #: app/module/ip-lockout/view/emails/404-lockout.php:481
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
 
2899
+ #: app/module/ip-lockout/view/emails/404-lockout.php:483
2900
+ #: app/module/ip-lockout/view/emails/login-lockout.php:485
2901
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:484
2902
  #: app/module/ip-lockout/view/emails/report.php:517
2903
  msgid "Security Hero"
2904
  msgstr ""
2918
  msgid "Hi %s,"
2919
  msgstr ""
2920
 
2921
+ #: app/module/ip-lockout/view/emails/login-lockout.php:460
2922
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:460
2923
+ msgid "They have been banned permanently."
2924
  msgstr ""
2925
 
2926
+ #: app/module/ip-lockout/view/emails/login-lockout.php:460
2927
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:460
2928
  msgid "They have been locked out for <strong>%s seconds.</strong>"
2929
  msgstr ""
2930
 
2931
+ #: app/module/ip-lockout/view/emails/login-lockout.php:461
2932
  msgid ""
2933
  "We've just locked out the host <strong>%s</strong> from %s due to more than "
2934
  "<strong>%s</strong> failed login attempts. %s"
2935
  msgstr ""
2936
 
2937
+ #: app/module/ip-lockout/view/emails/login-username-ban.php:461
2938
  msgid ""
2939
  "We've just locked out the host <strong>%s</strong> from %s due to "
2940
+ "attempting to login with a banned username. They have been banned "
2941
+ "permanently."
2942
  msgstr ""
2943
 
2944
  #: app/module/ip-lockout/view/emails/report.php:7
3567
  msgstr ""
3568
 
3569
  #: app/module/scan/component/result-table.php:35
3570
+ #: app/module/scan/controller/main.php:809
3571
  msgid "Issue"
3572
  msgstr ""
3573
 
3629
  msgstr ""
3630
 
3631
  #: app/module/scan/controller/main.php:178
3632
+ #: app/module/scan/controller/main.php:440
3633
  msgid "The suspicious file has been successfully ignored."
3634
  msgid_plural "The suspicious files have been successfully ignored."
3635
  msgstr[0] ""
3636
  msgstr[1] ""
3637
 
3638
  #: app/module/scan/controller/main.php:193
3639
+ #: app/module/scan/controller/main.php:411
3640
  msgid "The suspicious file has been successfully restored."
3641
  msgid_plural "The suspicious files have been successfully restored."
3642
  msgstr[0] ""
3662
  msgid "No item has been resolved"
3663
  msgstr ""
3664
 
3665
+ #: app/module/scan/controller/main.php:336
3666
  msgid "This item has been resolved."
3667
  msgstr ""
3668
 
3669
+ #: app/module/scan/controller/main.php:340
3670
  msgid "Please try again!"
3671
  msgstr ""
3672
 
3673
+ #: app/module/scan/controller/main.php:351
3674
+ #: app/module/scan/controller/main.php:387
3675
+ #: app/module/scan/controller/main.php:416
3676
+ #: app/module/scan/controller/main.php:445
3677
  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
3685
  #: app/module/scan/view/layouts/layout.php:5
3686
  #: app/module/scan/view/scanning.php:6 app/view/activator-free.php:13
3687
  #: app/view/activator.php:13
3688
  msgid "File Scanning"
3689
  msgstr ""
3690
 
3691
+ #: app/module/scan/controller/main.php:531
3692
  msgid "Scan In Progress"
3693
  msgstr ""
3694
 
3695
+ #: app/module/scan/controller/main.php:532 app/module/scan/view/issues.php:37
3696
  msgid ""
3697
  "Your code is currently clean! There were no issues found during the last "
3698
  "scan, though you can always perform a new scan anytime."
3699
  msgstr ""
3700
 
3701
+ #: app/module/scan/controller/main.php:807
3702
  msgid "File"
3703
  msgstr ""
3704
 
3705
+ #: app/module/scan/controller/main.php:843
3706
  msgid "Let’s get your site patched up."
3707
  msgstr ""
3708
 
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.3
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
10
- Stable tag: 1.7.3
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.
@@ -49,9 +49,15 @@ Keep your site safe with Defender’s simple IP manager. Manually block specific
49
  ★★★★★ <br>
50
  “I found other pro security plugins a bit too fiddly for my taste...I’m delighted with Defender” - <a href="https://profiles.wordpress.org/keithadv">KeithADV</a>
51
 
 
 
 
52
  ★★★★★ <br>
53
  “Defender's interface is very intuitive with warnings that are very helpful” - <a href="https://premium.wpmudev.org/profile/djohns">djohns</a>
54
 
 
 
 
55
  = Log-in Protection =
56
 
57
  Brute force attacks are no match for Defender. Limit login attempts to stop users trying to guess passwords. Permanently ban IPs or trigger a timed lockout after a set number of failed login attempts.
@@ -110,6 +116,13 @@ Hackers and bot attacks are not the only threat to your site. No matter what se
110
 
111
 
112
  == Changelog ==
 
 
 
 
 
 
 
113
  = 1.7.3 =
114
  * Fix: Two-factor authentication can be bypassed by user with no role.
115
  * Improvement: Enhanced two-factor authentication protection across multisites.
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.
49
  ★★★★★ <br>
50
  “I found other pro security plugins a bit too fiddly for my taste...I’m delighted with Defender” - <a href="https://profiles.wordpress.org/keithadv">KeithADV</a>
51
 
52
+ ★★★★★ <br>
53
+ “Thank you for bringing back a free and easy to use 2-Factor Authentication after Clef! Defender helps keep me aware of my sites security.” - <a href="https://wordpress.org/support/users/awijasa/">awijasa</a>
54
+
55
  ★★★★★ <br>
56
  “Defender's interface is very intuitive with warnings that are very helpful” - <a href="https://premium.wpmudev.org/profile/djohns">djohns</a>
57
 
58
+ ★★★★★ <br>
59
+ “Defender Recently blocked over 3000 attacks in one week without any noticeable impact on the website. WPMUDEV knocking it out of the park on this one.” - <a href="https://premium.wpmudev.org/profile/davidoswald/">David Oswald</a>
60
+
61
  = Log-in Protection =
62
 
63
  Brute force attacks are no match for Defender. Limit login attempts to stop users trying to guess passwords. Permanently ban IPs or trigger a timed lockout after a set number of failed login attempts.
116
 
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.
123
+ - Improvement: When an user is deleted, audit logging now display the user's login instead of only UID.
124
+ - Other minor enhancements/fixes
125
+
126
  = 1.7.3 =
127
  * Fix: Two-factor authentication can be bypassed by user with no role.
128
  * Improvement: Enhanced two-factor authentication protection across multisites.
wp-defender.php CHANGED
@@ -3,7 +3,7 @@
3
  /**
4
  * Plugin Name: WP Defender
5
  * Plugin URI: https://premium.wpmudev.org/project/wp-defender/
6
- * Version: 1.7.3
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/
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/