Cerber Security & Antispam - Version 9.3.3

Version Description

Download this release

Release Info

Developer Gioni
Plugin Icon 128x128 Cerber Security & Antispam
Version 9.3.3
Comparing to
See all releases

Code changes from version 9.2.2 to 9.3.3

admin/cerber-admin-settings.php CHANGED
@@ -287,7 +287,7 @@ function cerber_field_show( $config ) {
287
  }
288
 
289
  if ( $placeholder ) {
290
- $atts .= ' placeholder="' . crb_escape_attr( $placeholder ) . '" ';
291
  }
292
 
293
  if ( isset( $config['disabled'] ) ) {
@@ -311,7 +311,7 @@ function cerber_field_show( $config ) {
311
  }
312
  }
313
 
314
- $value = crb_escape_attr( $value );
315
 
316
  $value = crb_format_field_value( $value, $config );
317
 
@@ -1319,7 +1319,7 @@ function crb_journaling( $data, $list ) {
1319
  *
1320
  * @return array|string
1321
  */
1322
- function crb_escape_attr( $value ) {
1323
  if ( is_array( $value ) ) {
1324
  array_walk_recursive( $value, function ( &$element ) {
1325
  $element = crb_escape( $element );
@@ -1333,7 +1333,7 @@ function crb_escape_attr( $value ) {
1333
  }
1334
 
1335
  /**
1336
- * Escaping string/texts for HTML output
1337
  *
1338
  * @param string $val
1339
  *
287
  }
288
 
289
  if ( $placeholder ) {
290
+ $atts .= ' placeholder="' . crb_attr_escape( $placeholder ) . '" ';
291
  }
292
 
293
  if ( isset( $config['disabled'] ) ) {
311
  }
312
  }
313
 
314
+ $value = crb_attr_escape( $value );
315
 
316
  $value = crb_format_field_value( $value, $config );
317
 
1319
  *
1320
  * @return array|string
1321
  */
1322
+ function crb_attr_escape( $value ) {
1323
  if ( is_array( $value ) ) {
1324
  array_walk_recursive( $value, function ( &$element ) {
1325
  $element = crb_escape( $element );
1333
  }
1334
 
1335
  /**
1336
+ * Helper
1337
  *
1338
  * @param string $val
1339
  *
admin/cerber-dashboard.php CHANGED
@@ -213,6 +213,7 @@ function cerber_show_lockouts( $args = array(), $echo = true ) {
213
 
214
  foreach ( $rows as $row ) {
215
  $ip = '<a href="' . $base_url . '&filter_ip=' . $row->ip . '">' . $row->ip . '</a>';
 
216
 
217
  $ip_info = cerber_get_ip_info( $row->ip, true );
218
  if ( isset( $ip_info['hostname_html'] ) ) {
@@ -231,7 +232,7 @@ function cerber_show_lockouts( $args = array(), $echo = true ) {
231
  $country = '';
232
  }
233
 
234
- $the_row = '<td>' . $ip . '</td><td>' . $hostname . $country . '</td><td>' . cerber_date( $row->block_until ) . '</td><td>' . $row->reason . '</td>';
235
 
236
  if ( $controls ) {
237
  $the_row .= '<td><a href="' . $remove_base . '&cerber_admin_do=lockdel&ip=' . esc_attr( $row->ip ) . '">' . __( 'Remove', 'wp-cerber' ) . '</a></td>';
@@ -712,8 +713,9 @@ function cerber_admin_request( $is_post = false ) {
712
  switch ( $do ) {
713
  case 'lockdel':
714
  $err = '';
 
715
 
716
- if ( $ip = filter_var( crb_array_get( $get, 'ip' ), FILTER_VALIDATE_IP ) ) {
717
  if ( cerber_block_delete( $ip ) ) {
718
  cerber_admin_message( sprintf( __( 'Lockout for %s was removed', 'wp-cerber' ), $ip ) );
719
  }
@@ -722,7 +724,7 @@ function cerber_admin_request( $is_post = false ) {
722
  }
723
  }
724
  else {
725
- $err = 'An invalid IP address has specified.';
726
  }
727
 
728
  if ( $err ) {
@@ -1180,6 +1182,7 @@ function crb_admin_activity_nav_links( $context = '' ) {
1180
  }
1181
 
1182
  return crb_make_nav_links( $links, 'activity' );
 
1183
  }
1184
 
1185
  /**
@@ -1244,13 +1247,10 @@ function crb_make_nav_links( $link_list, $tab = 'activity', $class = '' ) {
1244
  return '<div class="crb-tag-buttons ' . $class . '">' . $ret . '</div>';
1245
  }
1246
 
1247
- /**
1248
- * Generates a table view of the Activity log
1249
  *
1250
- * @param array $args
1251
- * @param bool $echo
1252
  *
1253
- * @return string|void
1254
  */
1255
  function cerber_show_activity( $args = array(), $echo = true ) {
1256
 
@@ -1441,6 +1441,8 @@ function cerber_show_activity( $args = array(), $echo = true ) {
1441
  $table .= cerber_page_navi( $total, $per_page );
1442
  }
1443
 
 
 
1444
  if ( empty( $args['no_export'] ) ) {
1445
  $export_link .= '<a class="button button-secondary cerber-button" href="' .
1446
  cerber_admin_link_add( array(
@@ -1685,12 +1687,11 @@ function crb_admin_ip_cell( $ip, $ip_link = '', $text = '' ) {
1685
  return $cache[ $ip ];
1686
  }
1687
 
1688
- $row = true;
1689
  $acl = cerber_acl_check( $ip, '', 0, $row );
1690
 
1691
  $tip = '';
1692
 
1693
- if ( ! empty( $row->comments ) ) {
1694
  $tip = $row->comments;
1695
  }
1696
  else {
@@ -1714,7 +1715,7 @@ function crb_admin_ip_cell( $ip, $ip_link = '', $text = '' ) {
1714
  $ip = '<a href="' . $ip_link . '">' . $ip . '</a>';
1715
  }
1716
 
1717
- $cache[ $ip ] = '<div class="crb_css_table"><div><span class="crb_act_icon crb_ip_acl' . $acl . ' ' . $block . '" title="' . crb_escape_attr( $tip ) . '"></span></div><div>' . $ip . $text . '</div></div>';
1718
 
1719
  return $cache[ $ip ];
1720
  }
@@ -1770,10 +1771,9 @@ function crb_generate_ip_extra_view( $ip, $context = 'activity', $cache_only = f
1770
  $ip_navs .= ' <a class="crb-button-tiny" href="' . cerber_admin_link( 'activity', array( 'filter_ip' => $ip ) ) . '">' . __( 'Check for activities', 'wp-cerber' ) . '</a>';
1771
  }
1772
 
1773
- $row = true;
1774
  $acl = cerber_acl_check( $ip, '', 0, $row );
1775
 
1776
- $comments = crb_escape_attr( $row->comments );
1777
 
1778
  $ip_status = '';
1779
 
@@ -2204,18 +2204,18 @@ function cerber_quick_w(){
2204
 
2205
  echo '<tr class="with-padding"><td>' . __( 'Logged-in users', 'wp-cerber' ) . '</td><td><b><a href="' . $sess . '">' . $s_count . ' ' . _n( 'user', 'users', $s_count, 'wp-cerber' ) . '</a></b></td></tr>';
2206
 
2207
- echo '<tr class="with-padding"><td>' . __( 'White IP Access List', 'wp-cerber' ) . '</td><td><b><a href="' . $acl . '">' . $w_count . ' ' . _n( 'entry', 'entries', $w_count, 'wp-cerber' ) . '</a></b></td></tr>';
2208
- echo '<tr><td>' . __( 'Black IP Access List', 'wp-cerber' ) . '</td><td><b><a href="' . $acl . '">' . absint( $b_count ) . ' ' . _n( 'entry', 'entries', $b_count, 'wp-cerber' ) . '</a></b></td></tr>';
2209
- /* CHID869 */
2210
- /* CHID870
2211
- $status = ( ! crb_get_settings( 'tienabled' ) ) ? '<span style="color: red;">' . __( 'disabled', 'wp-cerber' ) . '</span>' : __( 'enabled', 'wp-cerber' );
2212
- echo '<tr class="with-padding"><td>' . __( 'Traffic Inspector', 'wp-cerber' ) . '</td><td><span style="color: red;"><b>' . $status . '</b></span></td></tr>';
2213
 
2214
  $lab = lab_lab();
2215
  if ( $lab ) {
2216
  $status = ( ! lab_is_cloud_ok() ) ? '<span style="color: red;">' . __( 'no connection', 'wp-cerber' ) . '</span>' : __( 'active', 'wp-cerber' );
2217
  echo '<tr><td>Cloud Protection</td><td><b>' . $status . '</b></td></tr>';
2218
- }*/
2219
 
2220
  $s = '';
2221
  $scan = cerber_get_scan();
213
 
214
  foreach ( $rows as $row ) {
215
  $ip = '<a href="' . $base_url . '&filter_ip=' . $row->ip . '">' . $row->ip . '</a>';
216
+ $reason = '<a href="' . $base_url . '&filter_set=1&filter_ip=' . $row->ip . '">' . $row->reason . '</a>';
217
 
218
  $ip_info = cerber_get_ip_info( $row->ip, true );
219
  if ( isset( $ip_info['hostname_html'] ) ) {
232
  $country = '';
233
  }
234
 
235
+ $the_row = '<td>' . $ip . '</td><td>' . $hostname . $country . '</td><td>' . cerber_date( $row->block_until ) . '</td><td>' . $reason . '</td>';
236
 
237
  if ( $controls ) {
238
  $the_row .= '<td><a href="' . $remove_base . '&cerber_admin_do=lockdel&ip=' . esc_attr( $row->ip ) . '">' . __( 'Remove', 'wp-cerber' ) . '</a></td>';
713
  switch ( $do ) {
714
  case 'lockdel':
715
  $err = '';
716
+ $ip = crb_array_get( $get, 'ip' );
717
 
718
+ if ( cerber_is_ip_or_net( $ip ) ) {
719
  if ( cerber_block_delete( $ip ) ) {
720
  cerber_admin_message( sprintf( __( 'Lockout for %s was removed', 'wp-cerber' ), $ip ) );
721
  }
724
  }
725
  }
726
  else {
727
+ $err = 'An invalid IP address has been specified.';
728
  }
729
 
730
  if ( $err ) {
1182
  }
1183
 
1184
  return crb_make_nav_links( $links, 'activity' );
1185
+
1186
  }
1187
 
1188
  /**
1247
  return '<div class="crb-tag-buttons ' . $class . '">' . $ret . '</div>';
1248
  }
1249
 
1250
+ /*
1251
+ * Display activities in the WP Dashboard
1252
  *
 
 
1253
  *
 
1254
  */
1255
  function cerber_show_activity( $args = array(), $echo = true ) {
1256
 
1441
  $table .= cerber_page_navi( $total, $per_page );
1442
  }
1443
 
1444
+ //$legend = '<p>'.sprintf(__('Showing last %d records from %d','wp-cerber'),count($rows),$total);
1445
+
1446
  if ( empty( $args['no_export'] ) ) {
1447
  $export_link .= '<a class="button button-secondary cerber-button" href="' .
1448
  cerber_admin_link_add( array(
1687
  return $cache[ $ip ];
1688
  }
1689
 
 
1690
  $acl = cerber_acl_check( $ip, '', 0, $row );
1691
 
1692
  $tip = '';
1693
 
1694
+ if ( ! empty( $row ) ) {
1695
  $tip = $row->comments;
1696
  }
1697
  else {
1715
  $ip = '<a href="' . $ip_link . '">' . $ip . '</a>';
1716
  }
1717
 
1718
+ $cache[ $ip ] = '<div class="crb_css_table"><div><span class="crb_act_icon crb_ip_acl' . $acl . ' ' . $block . '" title="' . crb_attr_escape( $tip ) . '"></span></div><div>' . $ip . $text . '</div></div>';
1719
 
1720
  return $cache[ $ip ];
1721
  }
1771
  $ip_navs .= ' <a class="crb-button-tiny" href="' . cerber_admin_link( 'activity', array( 'filter_ip' => $ip ) ) . '">' . __( 'Check for activities', 'wp-cerber' ) . '</a>';
1772
  }
1773
 
 
1774
  $acl = cerber_acl_check( $ip, '', 0, $row );
1775
 
1776
+ $comments = ( $row ) ? crb_attr_escape( $row->comments ) : '';
1777
 
1778
  $ip_status = '';
1779
 
2204
 
2205
  echo '<tr class="with-padding"><td>' . __( 'Logged-in users', 'wp-cerber' ) . '</td><td><b><a href="' . $sess . '">' . $s_count . ' ' . _n( 'user', 'users', $s_count, 'wp-cerber' ) . '</a></b></td></tr>';
2206
 
2207
+ echo '<tr class="with-padding"><td>'.__('White IP Access List','wp-cerber').'</td><td><b><a href="'.$acl.'">'.$w_count.' '._n('entry','entries',$w_count,'wp-cerber').'</a></b></td></tr>';
2208
+ echo '<tr><td>'.__('Black IP Access List','wp-cerber').'</td><td><b><a href="'.$acl.'">'.$b_count.' '._n('entry','entries',$b_count,'wp-cerber').'</a></b></td></tr>';
2209
+ echo '<tr class="with-padding"><td>'.__('Citadel mode','wp-cerber').'</td><td><b>'.$citadel.'</b></td></tr>';
2210
+
2211
+ $status = ( ! crb_get_settings( 'tienabled' ) ) ? '<span style="color: red;">'.__('disabled','wp-cerber').'</span>' : __('enabled','wp-cerber');
2212
+ echo '<tr class="with-padding"><td>'.__('Traffic Inspector','wp-cerber').'</td><td><b>'.$status.'</b></td></tr>';
2213
 
2214
  $lab = lab_lab();
2215
  if ( $lab ) {
2216
  $status = ( ! lab_is_cloud_ok() ) ? '<span style="color: red;">' . __( 'no connection', 'wp-cerber' ) . '</span>' : __( 'active', 'wp-cerber' );
2217
  echo '<tr><td>Cloud Protection</td><td><b>' . $status . '</b></td></tr>';
2218
+ }
2219
 
2220
  $s = '';
2221
  $scan = cerber_get_scan();
admin/cerber-tools.php CHANGED
@@ -486,7 +486,7 @@ function cerber_show_wp_diag(){
486
  $opt = ( is_multisite() ) ? $wpdb->sitemeta : $wpdb->options;
487
 
488
  $sys = array(
489
- /* CHID546 */
490
  array( 'PHP version', phpversion() ),
491
  //array( 'Server API', php_sapi_name() ),
492
  array( 'Server API', PHP_SAPI ),
486
  $opt = ( is_multisite() ) ? $wpdb->sitemeta : $wpdb->options;
487
 
488
  $sys = array(
489
+ array( 'Web Server', $_SERVER['SERVER_SOFTWARE'] ),
490
  array( 'PHP version', phpversion() ),
491
  //array( 'Server API', php_sapi_name() ),
492
  array( 'Server API', PHP_SAPI ),
admin/cerber-users.php CHANGED
@@ -353,7 +353,7 @@ function crb_admin_role_form( $role_id, $values ) {
353
  }
354
 
355
  function crb_admin_form_field( $field, $name, $value, $id = '' ) {
356
- $value = crb_escape_attr( $value );
357
  $label = crb_array_get( $field, 'label' );
358
 
359
  if ( ! $id ) {
353
  }
354
 
355
  function crb_admin_form_field( $field, $name, $value, $id = '' ) {
356
+ $value = crb_attr_escape( $value );
357
  $label = crb_array_get( $field, 'label' );
358
 
359
  if ( ! $id ) {
cerber-2fa.php CHANGED
@@ -279,13 +279,13 @@ final class CRB_2FA {
279
  }
280
  }
281
 
282
- // Check if the same same browser and IP
283
- if ( $twofactor['ip'] != cerber_get_remote_ip()
284
- || $twofactor['ua'] != sha1( crb_array_get( $_SERVER, 'HTTP_USER_AGENT', '' ) )
285
- || ! cerber_is_ip_allowed() ) {
286
 
287
- self::delete_2fa( $user_id );
288
- cerber_user_logout();
289
  wp_redirect( get_home_url() );
290
 
291
  exit;
@@ -308,9 +308,9 @@ final class CRB_2FA {
308
  }
309
  }
310
 
311
- if ( $twofactor['attempts'] > 10 ) {
312
- cerber_block_add( cerber_get_remote_ip(), 721 );
313
- cerber_user_logout();
314
 
315
  wp_redirect( get_home_url() );
316
  exit;
279
  }
280
  }
281
 
282
+ // Check the context
283
+ if ( ( $sts = ( $twofactor['ip'] != cerber_get_remote_ip() ? 540 : 0 ) )
284
+ || ( $sts = ( $twofactor['ua'] != sha1( crb_array_get( $_SERVER, 'HTTP_USER_AGENT', '' ) ) ? 541 : 0 ) )
285
+ || ( $sts = ( cerber_is_ip_allowed() ? 0 : CRB_Globals::$act_status ) ) ) {
286
 
287
+ self::delete_2fa( $user_id );
288
+ cerber_user_logout( $sts );
289
  wp_redirect( get_home_url() );
290
 
291
  exit;
308
  }
309
  }
310
 
311
+ if ( $twofactor['attempts'] > 5 ) {
312
+ cerber_soft_block_add( cerber_get_remote_ip(), 721 );
313
+ cerber_user_logout( 542 );
314
 
315
  wp_redirect( get_home_url() );
316
  exit;
cerber-common.php CHANGED
@@ -732,15 +732,16 @@ function cerber_get_remote_ip() {
732
  }
733
  }
734
  else {
735
- if ( $ip = filter_var( $_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP ) ) {
736
- $remote_ip = $ip;
737
  }
738
- elseif ( $ip = filter_var( $_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP ) ) {
739
- $remote_ip = $ip;
740
  }
741
- elseif ( $ip = filter_var( $_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP ) ) {
742
- $remote_ip = $ip;
743
  }
 
744
  }
745
 
746
  if ( ! $remote_ip ) { // including WP-CLI, other way is: if defined('WP_CLI')
@@ -1152,24 +1153,8 @@ function cerber_is_rest_url() {
1152
 
1153
  $ret = false;
1154
 
1155
- $request_path = CRB_Request::get_request_path();
1156
- list( $root, $dir ) = crb_parse_site_url();
1157
- //$rest_prefix = $dir . '/' . rest_get_url_prefix() . '/';
1158
- $rest_prefix = $dir . '/' . rest_get_url_prefix();
1159
- $rp_len = strlen( $rest_prefix );
1160
-
1161
- //if ( 0 === strpos( substr( $request_path, 0, $rp_len ), $rest_prefix ) ) {
1162
- if ( substr( $request_path, 0, $rp_len ) == $rest_prefix ) {
1163
- if ( $request_path[ $rp_len ] == '?' ) { // An exception for: WordPress processes /wp-json? as a REST API request
1164
- $ret = true;
1165
- }
1166
- else {
1167
- $url_len = strlen( crb_get_rest_url() );
1168
- //if ( 0 === strpos( substr( $root . $request_path, 0, $ru_len ), crb_get_rest_url() ) ) {
1169
- if ( substr( $root . $request_path, 0, $url_len ) == crb_get_rest_url() ) {
1170
- $ret = true;
1171
- }
1172
- }
1173
  }
1174
 
1175
  return $ret;
@@ -1441,7 +1426,13 @@ function cerber_is_rest_permitted() {
1441
  return false;
1442
  }
1443
 
 
 
 
 
 
1444
  function crb_get_rest_path() {
 
1445
  static $ret;
1446
 
1447
  if ( isset( $ret ) ) {
@@ -1451,14 +1442,24 @@ function crb_get_rest_path() {
1451
  $ret = '';
1452
 
1453
  if ( isset( $_REQUEST['rest_route'] ) ) {
1454
- $ret = ltrim( $_REQUEST['rest_route'], '/' );
1455
  }
1456
  elseif ( cerber_is_permalink_enabled() ) {
1457
- $path = CRB_Request::get_request_path();
1458
- list( $root, $dir ) = crb_parse_site_url();
1459
- $pos = strlen( crb_get_rest_url() );
1460
- $ret = substr( $root . $path, $pos ); // @since 8.1
1461
- $ret = trim( $ret, '/' );
 
 
 
 
 
 
 
 
 
 
1462
  }
1463
 
1464
  return $ret;
@@ -1909,7 +1910,6 @@ function cerber_get_labels( $type = 'activity', $id = 0 ) {
1909
  $sts[10] = __( 'Denied', 'wp-cerber' ); // @since 8.9.5.6
1910
  $sts[ CRB_STS_11 ] = __( 'Bot detected', 'wp-cerber' );
1911
  $sts[12] = __( 'Citadel mode is active', 'wp-cerber' );
1912
- $sts[13] = __( 'Locked out', 'wp-cerber' );
1913
  $sts[13] = __( 'IP address is locked out', 'wp-cerber' );
1914
  $sts[14] = __( 'IP blacklisted', 'wp-cerber' );
1915
  $sts[15] = __( 'Malicious activity detected', 'wp-cerber' );
@@ -1962,6 +1962,11 @@ function cerber_get_labels( $type = 'activity', $id = 0 ) {
1962
  $sts[533] = __( 'reCAPTCHA settings are incorrect', 'wp-cerber' );
1963
  $sts[534] = __( 'Request to the Google reCAPTCHA service failed', 'wp-cerber' );
1964
 
 
 
 
 
 
1965
  // Note: 7xx is in use in cerber_get_reason()
1966
 
1967
  cerber_cache_set( 'labels', $labels );
@@ -2076,7 +2081,8 @@ function cerber_get_reason( $reason_id = null ) {
2076
 
2077
  $labels[711] = __( 'Multiple erroneous requests', 'wp-cerber' );
2078
  $labels[712] = __( 'Multiple suspicious requests', 'wp-cerber' );
2079
- $labels[721] = 'Limit on 2FA verifications has reached';
 
2080
 
2081
  cerber_cache_set( 'reasons', $labels );
2082
 
@@ -3777,7 +3783,6 @@ function cerber_diag_log( $msg, $source = '', $error = false ) {
3777
 
3778
  function cerber_get_diag_log() {
3779
 
3780
- //$dir = ( defined( 'CERBER_DIAG_DIR' ) && is_dir( CERBER_DIAG_DIR ) ) ? CERBER_DIAG_DIR . '/' : cerber_get_the_folder();
3781
  if ( defined( 'CERBER_DIAG_DIR' ) && is_dir( CERBER_DIAG_DIR ) ) {
3782
  $dir = CERBER_DIAG_DIR;
3783
  }
@@ -3787,7 +3792,7 @@ function cerber_get_diag_log() {
3787
  }
3788
  }
3789
 
3790
- return rtrim( $dir, '/' ) . '/cerber-debug.log';
3791
  }
3792
 
3793
  function cerber_truncate_log( $bytes = 10000000 ) {
@@ -4619,7 +4624,7 @@ add_filter( 'update_plugins_downloads.wpcerber.com', 'cerber_check_for_update',
4619
  *
4620
  * @return mixed|null
4621
  *
4622
- * @since 9.2
4623
  */
4624
  function cerber_check_for_update( $update, $plugin_data, $plugin_file, $locales ) {
4625
 
@@ -4690,35 +4695,3 @@ class CRB_Globals {
4690
  }
4691
  }
4692
  }
4693
-
4694
- /**
4695
- * Sanitizing of the request URI
4696
- *
4697
- * @param $uri string
4698
- *
4699
- * @return string
4700
- *
4701
- * @since 9.2.2
4702
- */
4703
- function crb_sanitize_uri( $uri ) {
4704
- return preg_replace( '/[<>\'"\\\\()]/', '', (string) $uri );
4705
- }
4706
-
4707
- /**
4708
- * Escaping JS values and attributes
4709
- *
4710
- * @param $val
4711
- *
4712
- * @return string
4713
- *
4714
- * @since 9.2.2
4715
- */
4716
- function crb_escape_js( $val ) {
4717
- if ( ! $val
4718
- || is_numeric( $val ) ) {
4719
- return $val;
4720
- }
4721
-
4722
- // the same way as in esc_attr();
4723
- return _wp_specialchars( $val, ENT_QUOTES );
4724
- }
732
  }
733
  }
734
  else {
735
+ if ( ! empty( $_SERVER['REMOTE_ADDR'] ) ) {
736
+ $remote_ip = $_SERVER['REMOTE_ADDR'];
737
  }
738
+ elseif ( ! empty( $_SERVER['HTTP_X_REAL_IP'] ) ) {
739
+ $remote_ip = $_SERVER['HTTP_X_REAL_IP'];
740
  }
741
+ elseif ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
742
+ $remote_ip = $_SERVER['HTTP_CLIENT_IP'];
743
  }
744
+ $remote_ip = filter_var( $remote_ip, FILTER_VALIDATE_IP );
745
  }
746
 
747
  if ( ! $remote_ip ) { // including WP-CLI, other way is: if defined('WP_CLI')
1153
 
1154
  $ret = false;
1155
 
1156
+ if ( crb_get_rest_path() ) {
1157
+ $ret = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1158
  }
1159
 
1160
  return $ret;
1426
  return false;
1427
  }
1428
 
1429
+ /**
1430
+ * Requested REST API route without leading and trailing slashes
1431
+ *
1432
+ * @return string Empty string for any non REST API request
1433
+ */
1434
  function crb_get_rest_path() {
1435
+ global $wp_rewrite;
1436
  static $ret;
1437
 
1438
  if ( isset( $ret ) ) {
1442
  $ret = '';
1443
 
1444
  if ( isset( $_REQUEST['rest_route'] ) ) {
1445
+ $ret = trim( $_REQUEST['rest_route'], '/' );
1446
  }
1447
  elseif ( cerber_is_permalink_enabled() ) {
1448
+ $path = CRB_Request::get_relative_path();
1449
+ $path = trim( $path, '/' );
1450
+ $prefix = rest_get_url_prefix() . '/';
1451
+
1452
+ // See get_rest_url() ----------------
1453
+
1454
+ if ( ( $wp_rewrite instanceof WP_Rewrite ) && $wp_rewrite->using_index_permalinks() ) {
1455
+ $prefix = $wp_rewrite->index . '/' . $prefix;
1456
+ }
1457
+
1458
+ // -----------------------------------
1459
+
1460
+ if ( 0 === strpos( $path, $prefix ) ) {
1461
+ $ret = substr( $path, strlen( $prefix ) );
1462
+ }
1463
  }
1464
 
1465
  return $ret;
1910
  $sts[10] = __( 'Denied', 'wp-cerber' ); // @since 8.9.5.6
1911
  $sts[ CRB_STS_11 ] = __( 'Bot detected', 'wp-cerber' );
1912
  $sts[12] = __( 'Citadel mode is active', 'wp-cerber' );
 
1913
  $sts[13] = __( 'IP address is locked out', 'wp-cerber' );
1914
  $sts[14] = __( 'IP blacklisted', 'wp-cerber' );
1915
  $sts[15] = __( 'Malicious activity detected', 'wp-cerber' );
1962
  $sts[533] = __( 'reCAPTCHA settings are incorrect', 'wp-cerber' );
1963
  $sts[534] = __( 'Request to the Google reCAPTCHA service failed', 'wp-cerber' );
1964
 
1965
+ // @since 9.3.2
1966
+ $sts[540] = __( "User's IP address does not match the one used to log in", 'wp-cerber' );
1967
+ $sts[541] = __( "User's browser does not match the one used to log in", 'wp-cerber' );
1968
+ $sts[542] = __( 'Exceeded the limit on the number of attempts to enter 2FA code', 'wp-cerber' );
1969
+
1970
  // Note: 7xx is in use in cerber_get_reason()
1971
 
1972
  cerber_cache_set( 'labels', $labels );
2081
 
2082
  $labels[711] = __( 'Multiple erroneous requests', 'wp-cerber' );
2083
  $labels[712] = __( 'Multiple suspicious requests', 'wp-cerber' );
2084
+ //$labels[721] = 'Limit on 2FA verifications has reached';
2085
+ $labels[721] = __( 'Exceeded the limit on the number of attempts to enter 2FA code', 'wp-cerber' );
2086
 
2087
  cerber_cache_set( 'reasons', $labels );
2088
 
3783
 
3784
  function cerber_get_diag_log() {
3785
 
 
3786
  if ( defined( 'CERBER_DIAG_DIR' ) && is_dir( CERBER_DIAG_DIR ) ) {
3787
  $dir = CERBER_DIAG_DIR;
3788
  }
3792
  }
3793
  }
3794
 
3795
+ return rtrim( $dir, DIRECTORY_SEPARATOR ) . DIRECTORY_SEPARATOR . 'cerber-debug.log';
3796
  }
3797
 
3798
  function cerber_truncate_log( $bytes = 10000000 ) {
4624
  *
4625
  * @return mixed|null
4626
  *
4627
+ * @since 9.1.2
4628
  */
4629
  function cerber_check_for_update( $update, $plugin_data, $plugin_file, $locales ) {
4630
 
4695
  }
4696
  }
4697
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cerber-lab.php CHANGED
@@ -624,9 +624,8 @@ function lab_save_push( $ip, $reason_id, $details = null ) {
624
  }
625
 
626
  $reason_id = absint( $reason_id );
627
-
628
  if ( in_array( $reason_id, array( 708, 709, 55 ) ) ) {
629
- /* CHID812 */
630
  }
631
  elseif ( $reason_id == 100 ) {
632
  $details = absint( CRB_Globals::$act_status );
624
  }
625
 
626
  $reason_id = absint( $reason_id );
 
627
  if ( in_array( $reason_id, array( 708, 709, 55 ) ) ) {
628
+ $details = array( 'uri' => $_SERVER['REQUEST_URI'] );
629
  }
630
  elseif ( $reason_id == 100 ) {
631
  $details = absint( CRB_Globals::$act_status );
cerber-load.php CHANGED
@@ -1025,7 +1025,7 @@ function cerber_is_login_request() {
1025
  * @return bool
1026
  */
1027
  function cerber_auth_required( $allowed_url ) {
1028
- if ( $allowed_url && CRB_Request::is_url_equal( $allowed_url ) ) {
1029
  return false;
1030
  }
1031
  if ( cerber_is_login_request() ) {
@@ -1034,11 +1034,11 @@ function cerber_auth_required( $allowed_url ) {
1034
  if ( CRB_Request::is_script( array( '/' . WP_LOGIN_SCRIPT, '/' . WP_SIGNUP_SCRIPT, '/wp-activate.php' ) ) ) {
1035
  return false;
1036
  }
1037
- if ( CRB_Request::is_url_start_with( wp_login_url() ) ) {
1038
  return false;
1039
  }
1040
  if ( class_exists( 'WooCommerce' ) ) {
1041
- if ( CRB_Request::is_url_start_with( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) ) {
1042
  return false;
1043
  }
1044
  }
@@ -1712,12 +1712,12 @@ function cerber_restrict_user( $user_id ) {
1712
 
1713
  $done = true;
1714
 
1715
- if ( crb_is_user_blocked( $user_id )
1716
- || ! CRB_DS::is_user_valid( $user_id )
1717
- || crb_acl_is_black() // @since 8.2.4
1718
- || ! cerber_geo_allowed( 'geo_login', $user_id ) ) { // @since 8.2.3
1719
 
1720
- cerber_user_logout();
1721
 
1722
  if ( is_admin() ) {
1723
  wp_redirect( cerber_get_home_url() );
@@ -2267,7 +2267,7 @@ add_filter( 'comment_form_submit_field', function ( $value ) {
2267
  //echo '<div id="cerber-recaptcha-msg">' . __( 'ERROR:', 'wp-cerber' ) . ' ' . $wp_cerber->reCaptchaMsg( 'comment' ) . '</div>';
2268
  echo '<div id="cerber-recaptcha-msg">' . __( 'ERROR:', 'wp-cerber' ) . ' ' . __( 'Sorry, human verification failed.', 'wp-cerber' ) . '</div>';
2269
  $p = cerber_get_cookie_prefix();
2270
- echo '<script type="text/javascript">document.cookie = "' . crb_escape_js( $p ) . 'cerber_post_id=0;path=/";</script>';
2271
  }
2272
 
2273
  if ( ! crb_get_settings( 'recapcomauth' ) || ! is_user_logged_in() ) {
@@ -2640,7 +2640,7 @@ function cerber_is_antibot_exception(){
2640
 
2641
  if ( class_exists( 'WooCommerce' ) ) {
2642
  if ( cerber_is_permalink_enabled() ) {
2643
- if ( CRB_Request::is_url_start_with( cerber_get_home_url() . '/wc-api/' ) ) {
2644
  return true;
2645
  }
2646
  }
@@ -2725,7 +2725,7 @@ function cerber_antibot_mode() {
2725
 
2726
  if ( cerber_is_permalink_enabled() ) {
2727
  //if ( function_exists( 'wc_get_page_id' ) && 0 === strpos( cerber_get_site_root() . cerber_purify_uri(), get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
2728
- if ( function_exists( 'wc_get_page_id' ) && CRB_Request::is_url_start_with( get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
2729
  return 2;
2730
  }
2731
  }
@@ -3010,17 +3010,17 @@ function cerber_antibot_code( $location ) {
3010
 
3011
  for (let i = 0; i < document.forms.length; ++i) {
3012
  let form = document.forms[i];
3013
- <?php
3014
- foreach ( $values[0] as $value ) {
3015
- echo 'if ($(form).attr("method") != "get") { $(form).append(\'<input type="hidden" name="' . crb_escape_js( $value[0] ) . '" value="' . crb_escape_js( $value[1] ) . '" />\'); }' . "\n";
3016
- }
3017
- ?>
3018
  }
3019
 
3020
  $(document).on('submit', 'form', function () {
3021
  <?php
3022
  foreach ( $values[0] as $value ) {
3023
- echo 'if ($(this).attr("method") != "get") { $(this).append(\'<input type="hidden" name="' . crb_escape_js( $value[0] ) . '" value="' . crb_escape_js( $value[1] ) . '" />\'); }' . "\n";
3024
  }
3025
  ?>
3026
  return true;
@@ -3032,18 +3032,18 @@ function cerber_antibot_code( $location ) {
3032
  if (data.type !== 'POST') return;
3033
 
3034
  if (typeof data.data === 'object' && data.data !== null) {
3035
- <?php
3036
- foreach ( $values[0] as $value ) {
3037
- echo 'data.data.append("' . crb_escape_js( $value[0] ) . '", "' . crb_escape_js( $value[1] ) . '");' . "\n";
3038
- }
3039
- ?>
3040
  }
3041
  else {
3042
  data.data = data.data + '<?php
3043
- foreach ( $values[0] as $value ) {
3044
- echo '&' . crb_escape_js( $value[0] ) . '=' . crb_escape_js( $value[1] );
3045
- }
3046
- ?>';
3047
  }
3048
  }
3049
  });
@@ -3152,7 +3152,7 @@ function cerber_is_bot( $location = '' ) {
3152
 
3153
  // Antibot whitelist
3154
  if ( ( $list = crb_get_settings( 'botswhite' ) ) && is_array( $list ) ) {
3155
- $uri = '/' . trim( crb_sanitize_uri( $_SERVER['REQUEST_URI'] ), '/' );
3156
  $uri_slash = $uri . ( ( empty( $_GET ) ) ? '/' : '' ); // @since 8.8
3157
  foreach ( $list as $item ) {
3158
  if ( $item[0] == '{' && substr( $item, - 1 ) == '}' ) {
@@ -3635,7 +3635,9 @@ function cerber_block_add( $ip_address = '', $reason_id = 1, $details = '', $dur
3635
  cerber_db_error_log();
3636
  }
3637
 
3638
- crb_send_lockout( $ip_address );
 
 
3639
 
3640
  return $result;
3641
  }
@@ -3975,13 +3977,13 @@ function crb_acl_is_black( $ip = '' ) {
3975
  * @param string $ip
3976
  * @param string $tag
3977
  * @param int $acl_slice
3978
- * @param object|null $row If a given IP is in any ACL, it contains an appropriate DB row object:
3979
  * for IPv4 all columns
3980
  * for IPv6 comments column only
3981
  *
3982
  * @return bool|string If string, returns 'W' or 'B'
3983
  */
3984
- function cerber_acl_check( $ip = null, $tag = '', $acl_slice = 0, &$row = null ) {
3985
  static $cache, $row_cache;
3986
 
3987
  if ( ! $ip ) {
@@ -4010,12 +4012,14 @@ function cerber_acl_check( $ip = null, $tag = '', $acl_slice = 0, &$row = null )
4010
  if ( $tag ) {
4011
  if ( $tag !== 'W' && $tag !== 'B' ) {
4012
  $ret = false;
 
4013
  }
4014
  elseif ( $row = cerber_db_get_row( 'SELECT * FROM ' . CERBER_ACL_TABLE . ' WHERE acl_slice = ' . $acl_slice . ' AND ver6 = 0 AND ip_long_begin <= ' . $long . ' AND ' . $long . ' <= ip_long_end AND tag = "' . $tag . '" LIMIT 1', MYSQL_FETCH_OBJECT ) ) {
4015
  $ret = true;
4016
  }
4017
  else {
4018
  $ret = false;
 
4019
  }
4020
 
4021
  $row_cache[ $key ] = $row;
@@ -4971,7 +4975,7 @@ function cerber_send_notification( $type, $msg_parts = array(), $ip = '', $chann
4971
  $footer .= "\n\n" . __( 'Your license is valid until', 'wp-cerber' ) . ' ' . $date;
4972
  }
4973
 
4974
- $footer .= "\n\n\n" . __( 'This message created by', 'wp-cerber' ) . ' WP Cerber Security ' . ( lab_lab() ? 'PRO ' : '' ) . CERBER_VER;
4975
  $footer .= "\n" . __( 'Date:', 'wp-cerber' ) . ' ' . cerber_date( time(), false );
4976
  $footer .= "\n" . 'https://wpcerber.com';
4977
 
@@ -6202,8 +6206,8 @@ function cerber_pre_checks() {
6202
  if ( cerber_get_get( 'action' ) === 'activate'
6203
  && cerber_get_get( 'plugin' ) === CERBER_PLUGIN_ID ) {
6204
  // The plugin is activated in wp-admin
6205
- if ( ! crb_get_settings() ) {
6206
- define('CRB_JUST_MARRIED', 1);
6207
  cerber_load_defaults();
6208
  }
6209
  }
@@ -6213,7 +6217,7 @@ function cerber_pre_checks() {
6213
  if ( $plugin !== CERBER_PLUGIN_ID ) {
6214
  return;
6215
  }
6216
- if ( ! crb_get_settings() ) {
6217
  if ( ! defined( 'CRB_JUST_MARRIED' ) ) {
6218
  define( 'CRB_JUST_MARRIED', 1 );
6219
  }
1025
  * @return bool
1026
  */
1027
  function cerber_auth_required( $allowed_url ) {
1028
+ if ( $allowed_url && CRB_Request::is_full_url_equal( $allowed_url ) ) {
1029
  return false;
1030
  }
1031
  if ( cerber_is_login_request() ) {
1034
  if ( CRB_Request::is_script( array( '/' . WP_LOGIN_SCRIPT, '/' . WP_SIGNUP_SCRIPT, '/wp-activate.php' ) ) ) {
1035
  return false;
1036
  }
1037
+ if ( CRB_Request::is_full_url_start_with( wp_login_url() ) ) {
1038
  return false;
1039
  }
1040
  if ( class_exists( 'WooCommerce' ) ) {
1041
+ if ( CRB_Request::is_full_url_start_with( get_permalink( get_option( 'woocommerce_myaccount_page_id' ) ) ) ) {
1042
  return false;
1043
  }
1044
  }
1712
 
1713
  $done = true;
1714
 
1715
+ if ( ( $sts = ( crb_is_user_blocked( $user_id ) ? CRB_STS_29 : 0 ) )
1716
+ || ( $sts = ( CRB_DS::is_user_valid( $user_id ) ? 0 : 35 ) )
1717
+ || ( $sts = ( crb_acl_is_black() ? 14 : 0 ) ) // @since 8.2.4
1718
+ || ( $sts = ( cerber_geo_allowed( 'geo_login', $user_id ) ? 0 : 16 ) ) ) { // @since 8.2.3
1719
 
1720
+ cerber_user_logout( $sts );
1721
 
1722
  if ( is_admin() ) {
1723
  wp_redirect( cerber_get_home_url() );
2267
  //echo '<div id="cerber-recaptcha-msg">' . __( 'ERROR:', 'wp-cerber' ) . ' ' . $wp_cerber->reCaptchaMsg( 'comment' ) . '</div>';
2268
  echo '<div id="cerber-recaptcha-msg">' . __( 'ERROR:', 'wp-cerber' ) . ' ' . __( 'Sorry, human verification failed.', 'wp-cerber' ) . '</div>';
2269
  $p = cerber_get_cookie_prefix();
2270
+ echo '<script type="text/javascript">document.cookie = "' . $p . 'cerber_post_id=0;path=/";</script>';
2271
  }
2272
 
2273
  if ( ! crb_get_settings( 'recapcomauth' ) || ! is_user_logged_in() ) {
2640
 
2641
  if ( class_exists( 'WooCommerce' ) ) {
2642
  if ( cerber_is_permalink_enabled() ) {
2643
+ if ( CRB_Request::is_full_url_start_with( cerber_get_home_url() . '/wc-api/' ) ) {
2644
  return true;
2645
  }
2646
  }
2725
 
2726
  if ( cerber_is_permalink_enabled() ) {
2727
  //if ( function_exists( 'wc_get_page_id' ) && 0 === strpos( cerber_get_site_root() . cerber_purify_uri(), get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
2728
+ if ( function_exists( 'wc_get_page_id' ) && CRB_Request::is_full_url_start_with( get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
2729
  return 2;
2730
  }
2731
  }
3010
 
3011
  for (let i = 0; i < document.forms.length; ++i) {
3012
  let form = document.forms[i];
3013
+ <?php
3014
+ foreach ( $values[0] as $value ) {
3015
+ echo 'if ($(form).attr("method") != "get") { $(form).append(\'<input type="hidden" name="' . $value[0] . '" value="' . $value[1] . '" />\'); }' . "\n";
3016
+ }
3017
+ ?>
3018
  }
3019
 
3020
  $(document).on('submit', 'form', function () {
3021
  <?php
3022
  foreach ( $values[0] as $value ) {
3023
+ echo 'if ($(this).attr("method") != "get") { $(this).append(\'<input type="hidden" name="' . $value[0] . '" value="' . $value[1] . '" />\'); }' . "\n";
3024
  }
3025
  ?>
3026
  return true;
3032
  if (data.type !== 'POST') return;
3033
 
3034
  if (typeof data.data === 'object' && data.data !== null) {
3035
+ <?php
3036
+ foreach ( $values[0] as $value ) {
3037
+ echo 'data.data.append("' . $value[0] . '", "' . $value[1] . '");' . "\n";
3038
+ }
3039
+ ?>
3040
  }
3041
  else {
3042
  data.data = data.data + '<?php
3043
+ foreach ( $values[0] as $value ) {
3044
+ echo '&' . $value[0] . '=' . $value[1];
3045
+ }
3046
+ ?>';
3047
  }
3048
  }
3049
  });
3152
 
3153
  // Antibot whitelist
3154
  if ( ( $list = crb_get_settings( 'botswhite' ) ) && is_array( $list ) ) {
3155
+ $uri = '/' . trim( $_SERVER['REQUEST_URI'], '/' );
3156
  $uri_slash = $uri . ( ( empty( $_GET ) ) ? '/' : '' ); // @since 8.8
3157
  foreach ( $list as $item ) {
3158
  if ( $item[0] == '{' && substr( $item, - 1 ) == '}' ) {
3635
  cerber_db_error_log();
3636
  }
3637
 
3638
+ if ( ! $update ) {
3639
+ crb_send_lockout( $ip_address );
3640
+ }
3641
 
3642
  return $result;
3643
  }
3977
  * @param string $ip
3978
  * @param string $tag
3979
  * @param int $acl_slice
3980
+ * @param object|false $row If a given IP is in any ACL, it contains an appropriate DB row object:
3981
  * for IPv4 all columns
3982
  * for IPv6 comments column only
3983
  *
3984
  * @return bool|string If string, returns 'W' or 'B'
3985
  */
3986
+ function cerber_acl_check( $ip = null, $tag = '', $acl_slice = 0, &$row = false ) {
3987
  static $cache, $row_cache;
3988
 
3989
  if ( ! $ip ) {
4012
  if ( $tag ) {
4013
  if ( $tag !== 'W' && $tag !== 'B' ) {
4014
  $ret = false;
4015
+ $row = false;
4016
  }
4017
  elseif ( $row = cerber_db_get_row( 'SELECT * FROM ' . CERBER_ACL_TABLE . ' WHERE acl_slice = ' . $acl_slice . ' AND ver6 = 0 AND ip_long_begin <= ' . $long . ' AND ' . $long . ' <= ip_long_end AND tag = "' . $tag . '" LIMIT 1', MYSQL_FETCH_OBJECT ) ) {
4018
  $ret = true;
4019
  }
4020
  else {
4021
  $ret = false;
4022
+ $row = false;
4023
  }
4024
 
4025
  $row_cache[ $key ] = $row;
4975
  $footer .= "\n\n" . __( 'Your license is valid until', 'wp-cerber' ) . ' ' . $date;
4976
  }
4977
 
4978
+ $footer .= "\n\n\n" . __( 'This message was created by', 'wp-cerber' ) . ' WP Cerber Security ' . ( lab_lab() ? 'PRO ' : '' ) . CERBER_VER;
4979
  $footer .= "\n" . __( 'Date:', 'wp-cerber' ) . ' ' . cerber_date( time(), false );
4980
  $footer .= "\n" . 'https://wpcerber.com';
4981
 
6206
  if ( cerber_get_get( 'action' ) === 'activate'
6207
  && cerber_get_get( 'plugin' ) === CERBER_PLUGIN_ID ) {
6208
  // The plugin is activated in wp-admin
6209
+ if ( ! crb_get_settings( '', true, false ) ) {
6210
+ define( 'CRB_JUST_MARRIED', 1 );
6211
  cerber_load_defaults();
6212
  }
6213
  }
6217
  if ( $plugin !== CERBER_PLUGIN_ID ) {
6218
  return;
6219
  }
6220
+ if ( ! crb_get_settings( '', true, false ) ) {
6221
  if ( ! defined( 'CRB_JUST_MARRIED' ) ) {
6222
  define( 'CRB_JUST_MARRIED', 1 );
6223
  }
cerber-request.php CHANGED
@@ -35,7 +35,7 @@ final class CRB_Request {
35
  * @since 7.9.2
36
  */
37
  private static function purify() {
38
- $uri = crb_sanitize_uri( $_SERVER['REQUEST_URI'] );
39
 
40
  if ( $pos = strpos( $uri, '?' ) ) {
41
  $uri = substr( $uri, 0, $pos );
@@ -58,19 +58,21 @@ final class CRB_Request {
58
  }
59
 
60
  list( self::$site_root, self::$sub_folder ) = crb_parse_site_url();
 
61
 
62
- /*$site_url = cerber_get_site_url(); // Including the path to WP files and stuff
63
- $p1 = strpos( $site_url, '//' );
64
- $p2 = strpos( $site_url, '/', $p1 + 2 );
65
- if ( $p2 !== false ) {
66
- self::$site_root = substr( $site_url, 0, $p2 );
67
- self::$sub_folder = substr( $site_url, $p2 );
 
 
 
 
68
  }
69
- else {
70
- self::$site_root = $site_url;
71
- self::$sub_folder = '';
72
- }*/
73
 
 
74
  }
75
 
76
  /**
@@ -82,7 +84,7 @@ final class CRB_Request {
82
 
83
  self::parse_site_url();
84
 
85
- return self::$site_root . crb_sanitize_uri( $_SERVER['REQUEST_URI'] );
86
 
87
  }
88
 
@@ -95,14 +97,14 @@ final class CRB_Request {
95
  }
96
 
97
  /**
98
- * Does requested URL start with a given string?
99
  * Safe for checking malformed URLs
100
  *
101
  * @param $str string
102
  *
103
  * @return bool
104
  */
105
- static function is_url_start_with( $str ) {
106
 
107
  $url = self::full_url_clean();
108
 
@@ -125,7 +127,7 @@ final class CRB_Request {
125
  *
126
  * @return bool
127
  */
128
- static function is_url_equal( $str ) {
129
 
130
  $url = self::full_url_clean();
131
 
@@ -152,7 +154,7 @@ final class CRB_Request {
152
  self::parse_site_url();
153
  $slug = ( $slug[0] != '/' ) ? '/' . $slug : $slug;
154
  $slug = self::$sub_folder . rtrim( $slug, '/' );
155
- $uri = rtrim( crb_sanitize_uri( $_SERVER['REQUEST_URI'] ), '/' );
156
 
157
  if ( strlen( $slug ) === strlen( $uri )
158
  && $slug == $uri ) {
@@ -211,7 +213,7 @@ final class CRB_Request {
211
  return true;
212
  }
213
 
214
- if ( self::is_start_with( '/search/' ) ) {
215
  return true;
216
  }
217
 
@@ -221,13 +223,14 @@ final class CRB_Request {
221
 
222
  /**
223
  * Returns true if the request URI starts with a given string.
224
- * Suitable for malformed URI.
225
  *
226
  * @param string $str
 
227
  *
228
  * @return bool
229
  */
230
- static function is_start_with( $str ) {
231
  static $cache;
232
 
233
  if ( ! $str ) {
@@ -235,8 +238,9 @@ final class CRB_Request {
235
  }
236
 
237
  if ( ! isset( $cache[ $str ] ) ) {
238
- $len = strlen( $str );
239
- $sub = substr( self::URI(), 0, $len );
 
240
 
241
  $cache[ $str ] = ( $sub == $str );
242
  }
@@ -244,12 +248,34 @@ final class CRB_Request {
244
  return $cache[ $str ];
245
  }
246
 
247
- static function get_request_path() {
 
 
 
 
 
 
 
 
248
  if ( ! isset( self::$the_path ) ) {
249
- if ( ! $path = crb_array_get( $_SERVER, 'PATH_INFO' ) ) { // Like /index.php/path-to-some-page/ or rest route
250
- $path = $_SERVER['REQUEST_URI'];
 
 
251
  }
252
- self::$the_path = '/' . trim( urldecode( $path ), '/' ) . '/';
 
 
 
 
 
 
 
 
 
 
 
 
253
  }
254
 
255
  return self::$the_path;
35
  * @since 7.9.2
36
  */
37
  private static function purify() {
38
+ $uri = $_SERVER['REQUEST_URI'];
39
 
40
  if ( $pos = strpos( $uri, '?' ) ) {
41
  $uri = substr( $uri, 0, $pos );
58
  }
59
 
60
  list( self::$site_root, self::$sub_folder ) = crb_parse_site_url();
61
+ }
62
 
63
+ /**
64
+ * If the WordPress is installed in a subfolder, returns the subfolder. The empty string otherwise.
65
+ *
66
+ * @return string
67
+ *
68
+ * @since 9.3.1
69
+ */
70
+ static function get_site_path() {
71
+ if ( ! isset( self::$site_root ) ) {
72
+ self::parse_site_url();
73
  }
 
 
 
 
74
 
75
+ return self::$sub_folder;
76
  }
77
 
78
  /**
84
 
85
  self::parse_site_url();
86
 
87
+ return self::$site_root . $_SERVER['REQUEST_URI'];
88
 
89
  }
90
 
97
  }
98
 
99
  /**
100
+ * Does request URI starts with a given string?
101
  * Safe for checking malformed URLs
102
  *
103
  * @param $str string
104
  *
105
  * @return bool
106
  */
107
+ static function is_full_url_start_with( $str ) {
108
 
109
  $url = self::full_url_clean();
110
 
127
  *
128
  * @return bool
129
  */
130
+ static function is_full_url_equal( $str ) {
131
 
132
  $url = self::full_url_clean();
133
 
154
  self::parse_site_url();
155
  $slug = ( $slug[0] != '/' ) ? '/' . $slug : $slug;
156
  $slug = self::$sub_folder . rtrim( $slug, '/' );
157
+ $uri = rtrim( $_SERVER['REQUEST_URI'], '/' );
158
 
159
  if ( strlen( $slug ) === strlen( $uri )
160
  && $slug == $uri ) {
213
  return true;
214
  }
215
 
216
+ if ( self::is_path_start_with( '/search/' , true ) ) {
217
  return true;
218
  }
219
 
223
 
224
  /**
225
  * Returns true if the request URI starts with a given string.
226
+ *
227
  *
228
  * @param string $str
229
+ * @param bool $relative
230
  *
231
  * @return bool
232
  */
233
+ static function is_path_start_with( $str, $relative = false ) {
234
  static $cache;
235
 
236
  if ( ! $str ) {
238
  }
239
 
240
  if ( ! isset( $cache[ $str ] ) ) {
241
+
242
+ $path = $relative ? self::get_relative_path() : self::URI();
243
+ $sub = substr( $path, 0, strlen( $str ) );
244
 
245
  $cache[ $str ] = ( $sub == $str );
246
  }
248
  return $cache[ $str ];
249
  }
250
 
251
+ /**
252
+ * The request path without trailing slashes
253
+ * No subfolder if WP is installed in a subfolder
254
+ *
255
+ * @return string
256
+ *
257
+ * @since 9.3.1
258
+ */
259
+ static function get_relative_path() {
260
  if ( ! isset( self::$the_path ) ) {
261
+ $path = $_SERVER['REQUEST_URI'];
262
+
263
+ if ( $pos = strpos( $path, '?' ) ) {
264
+ $path = substr( $path, 0, $pos );
265
  }
266
+
267
+ if ( $pos = strpos( $path, '#' ) ) {
268
+ $path = substr( $path, 0, $pos );
269
+ }
270
+
271
+ $path = '/' . urldecode( trim( $path, '/' ) );
272
+
273
+ if ( $site_path = self::get_site_path() ) {
274
+ $len = mb_strlen( $site_path );
275
+ $path = mb_substr( $path, $len );
276
+ }
277
+
278
+ self::$the_path = $path;
279
  }
280
 
281
  return self::$the_path;
cerber-settings.php CHANGED
@@ -2322,10 +2322,11 @@ function cerber_get_options( $option = '' ) {
2322
  *
2323
  * @param string $option
2324
  * @param bool $purge_cache purge static cache
 
2325
  *
2326
  * @return array|bool|mixed
2327
  */
2328
- function crb_get_settings( $option = '', $purge_cache = false ) {
2329
  global $wpdb;
2330
  static $united;
2331
 
@@ -2361,7 +2362,8 @@ function crb_get_settings( $option = '', $purge_cache = false ) {
2361
 
2362
  $set = cerber_db_get_col( $sql );
2363
 
2364
- if ( ! $set || ! is_array( $set ) ) {
 
2365
  // @since 8.9.6.6
2366
  $united = crb_get_default_values();
2367
  $set = array();
@@ -2387,7 +2389,7 @@ function crb_get_settings( $option = '', $purge_cache = false ) {
2387
  $united = array_merge( $united, $value );
2388
  }
2389
 
2390
- if ( ! lab_lab() ) {
2391
  $united = array_merge( $united, crb_get_default_pro() );
2392
  }
2393
 
2322
  *
2323
  * @param string $option
2324
  * @param bool $purge_cache purge static cache
2325
+ * @param bool $use_defaults exclusively for plugin installation process
2326
  *
2327
  * @return array|bool|mixed
2328
  */
2329
+ function crb_get_settings( $option = '', $purge_cache = false, $use_defaults = true ) {
2330
  global $wpdb;
2331
  static $united;
2332
 
2362
 
2363
  $set = cerber_db_get_col( $sql );
2364
 
2365
+ if ( ( ! $set || ! is_array( $set ) )
2366
+ && $use_defaults ) {
2367
  // @since 8.9.6.6
2368
  $united = crb_get_default_values();
2369
  $set = array();
2389
  $united = array_merge( $united, $value );
2390
  }
2391
 
2392
+ if ( ! lab_lab() && $use_defaults ) {
2393
  $united = array_merge( $united, crb_get_default_pro() );
2394
  }
2395
 
changelog.txt CHANGED
@@ -1,11 +1,22 @@
1
- = 9.2.2 =
2
- * This release does not bring new features or critical updates. Some parts of the plugin code have been refactored to be in compliance with new wordpress.org plugin guidelines and requirements. If you have updated WP Cerber from the version 9.0, please check the [WP Cerber release history](https://wpcerber.com/security/releases/) to see all the changes and new features introduced in the previous versions 9.1 and 9.2.
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  = 9.2 =
5
  * New: Custom login error message. If showing the default WordPress login error message is disabled, you can optionally specify your own login error message. Available in the professional version.
6
  * New: Custom password reset error message. If showing the default WordPress password reset error message is disabled, you can optionally specify your own password reset error message. Available in the professional version.
7
  * Improved: Implemented Content-Security-Policy HTTP header as an extra layer of protection for the WP Cerber admin pages.
8
- * Fixed A critical XSS vulnerability.
9
  * Fixed: Fatal error "Call to a member function is_block_editor() on null" that occurs when attempting to load any admin page (starting with /wp-admin/) by an unauthorized request. The bug only occurs if the two following settings are configured as: "Disable dashboard redirection" is enabled and "Display 404 page" is set to "Use 404 template from the active theme".
10
  * Fixed: No country flags are shown in some log rows while viewing WP Cerber logs on the managed website via Cerber.Hub.
11
  * Fixed: The file viewer doesn't show the content of a file while viewing the results of a scan on the managed website via Cerber.Hub.
1
+ = 9.3.3 =
2
+ * Fixed: A bug that prevents loading default values of some WP Cerber settings upon the plugin activation. On some websites the bug can cause plugin configuration inconsistency and suboptimal security.
3
+
4
+ = 9.3.2 =
5
+ * Improved: Every locked-out IP address on the "Lockout" tab has a link to check its suspicious activity in the Activity log.
6
+ * Improved: The activity log provides more details on [two-factor authentication (2FA)](https://wpcerber.com/two-factor-authentication-for-wordpress/) events with several new statuses that are logged if an attempt to log in using 2FA was aborted.
7
+ * Improved: The activity log provides more details when a user was forcefully logged out (user session has been terminated) due to a restriction.
8
+ * Fixed minor vulnerability: If WordPress is installed in a subfolder and [access to WordPress REST API has been blocked on the "Hardening" tab](https://wpcerber.com/restrict-access-to-wordpress-rest-api/), a bad actor can get access to REST API by using a specially formatted request.
9
+ * Fixed minor bug: Multiple duplicate notifications are sent via email and [Pushbullet](https://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/) if an IP address is permanently getting blocked due to multiply consequent malicious requests and the notification limit is set to 0.
10
+
11
+ = 9.3 =
12
+ * Fixed: Unable to remove a blocked IP network class C (with an asterisk) from the list of locked out IP addresses by clicking the "Remove" link on the Lockouts tab.
13
+ * Fixed: "Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in … /cerber-common.php on line 4634". The bug occurs if the PHP constant WP_ACCESSIBLE_HOSTS is defined and it does not contain 'downloads.wpcerber.com'.
14
 
15
  = 9.2 =
16
  * New: Custom login error message. If showing the default WordPress login error message is disabled, you can optionally specify your own login error message. Available in the professional version.
17
  * New: Custom password reset error message. If showing the default WordPress password reset error message is disabled, you can optionally specify your own password reset error message. Available in the professional version.
18
  * Improved: Implemented Content-Security-Policy HTTP header as an extra layer of protection for the WP Cerber admin pages.
19
+ * Fixed: A critical vulnerability.
20
  * Fixed: Fatal error "Call to a member function is_block_editor() on null" that occurs when attempting to load any admin page (starting with /wp-admin/) by an unauthorized request. The bug only occurs if the two following settings are configured as: "Disable dashboard redirection" is enabled and "Display 404 page" is set to "Use 404 template from the active theme".
21
  * Fixed: No country flags are shown in some log rows while viewing WP Cerber logs on the managed website via Cerber.Hub.
22
  * Fixed: The file viewer doesn't show the content of a file while viewing the results of a scan on the managed website via Cerber.Hub.
languages/wp-cerber.pot CHANGED
@@ -4,7 +4,7 @@ msgid ""
4
  msgstr ""
5
  "Project-Id-Version: WP Cerber Security, Anti-spam & Malware Scan\n"
6
  "Report-Msgid-Bugs-To: \n"
7
- "POT-Creation-Date: 2022-09-22 15:25+0000\n"
8
  "POT-Revision-Date: Fri Mar 12 2021 20:21:05 GMT+0300 (Moscow Standard Time)\n"
9
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
  "Last-Translator: \n"
@@ -41,7 +41,7 @@ msgid "%s retries are allowed within %s minutes"
41
  msgstr ""
42
 
43
  #. Time difference between two dates, in seconds (sec=second). 1: Number of seconds
44
- #: cerber-common.php:2231
45
  #, php-format
46
  msgid "%s sec"
47
  msgid_plural "%s secs"
@@ -66,7 +66,7 @@ msgstr ""
66
  msgid "A database error occurred while importing access list entries"
67
  msgstr ""
68
 
69
- #: cerber-load.php:4916
70
  msgid "A new activity has occurred"
71
  msgstr ""
72
 
@@ -74,12 +74,12 @@ msgstr ""
74
  msgid "A new version is available"
75
  msgstr ""
76
 
77
- #: cerber-common.php:2481
78
  #, php-format
79
  msgid "A new version of %s is available. Please install it."
80
  msgstr ""
81
 
82
- #: cerber-load.php:4873 cerber-load.php:4875
83
  msgid "A new version of WP Cerber is available to install"
84
  msgstr ""
85
 
@@ -88,7 +88,7 @@ msgid "A newer version is available"
88
  msgstr ""
89
 
90
  #. %s is the name of a mobile device or/and email addresses.
91
- #: admin/cerber-dashboard.php:750
92
  #, php-format
93
  msgid "A test message has been sent to %s"
94
  msgstr ""
@@ -124,7 +124,7 @@ msgstr ""
124
  msgid "Accounts & Roles"
125
  msgstr ""
126
 
127
- #: admin/cerber-dashboard.php:249 admin/cerber-users.php:1059
128
  #: admin/cerber-admin.php:775 admin/cerber-admin.php:930
129
  msgid "Action"
130
  msgstr ""
@@ -133,7 +133,7 @@ msgstr ""
133
  msgid "Activated"
134
  msgstr ""
135
 
136
- #: admin/cerber-dashboard.php:2186
137
  msgid "active"
138
  msgstr ""
139
 
@@ -145,12 +145,12 @@ msgstr ""
145
  msgid "Active sessions"
146
  msgstr ""
147
 
148
- #: cerber-load.php:5979 cerber-settings.php:368 admin/cerber-dashboard.php:2250
149
  #: admin/cerber-dashboard.php:5462 admin/cerber-users.php:1245
150
  msgid "Activity"
151
  msgstr ""
152
 
153
- #: cerber-load.php:5331
154
  msgid "Activity details"
155
  msgstr ""
156
 
@@ -170,7 +170,7 @@ msgstr ""
170
  msgid "Add a remote website"
171
  msgstr ""
172
 
173
- #: admin/cerber-dashboard.php:386
174
  msgid "Add Entry"
175
  msgstr ""
176
 
@@ -195,7 +195,7 @@ msgstr ""
195
  msgid "Added"
196
  msgstr ""
197
 
198
- #: admin/cerber-dashboard.php:1031
199
  msgid "Additional Details"
200
  msgstr ""
201
 
@@ -271,7 +271,7 @@ msgstr ""
271
  msgid "Allow these namespaces"
272
  msgstr ""
273
 
274
- #: cerber-lab.php:897
275
  msgid ""
276
  "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
277
  "This helps the plugin team to develop new algorithms for WP Cerber that will "
@@ -339,11 +339,11 @@ msgstr ""
339
  msgid "Any country is permitted"
340
  msgstr ""
341
 
342
- #: cerber-common.php:1892
343
  msgid "API request authorization failed"
344
  msgstr ""
345
 
346
- #: cerber-common.php:1891
347
  msgid "API request authorized"
348
  msgstr ""
349
 
@@ -378,39 +378,39 @@ msgstr ""
378
  msgid "Are you sure? This permanently invalidates the token."
379
  msgstr ""
380
 
381
- #: cerber-common.php:2066
382
  msgid "Attempt to access"
383
  msgstr ""
384
 
385
- #: cerber-common.php:1864 cerber-common.php:2067
386
  msgid "Attempt to access prohibited URL"
387
  msgstr ""
388
 
389
- #: cerber-common.php:1869
390
  msgid "Attempt to log in denied"
391
  msgstr ""
392
 
393
- #: cerber-common.php:1865 cerber-common.php:2068
394
  msgid "Attempt to log in with non-existing username"
395
  msgstr ""
396
 
397
- #: cerber-common.php:1866 cerber-common.php:2069
398
  msgid "Attempt to log in with prohibited username"
399
  msgstr ""
400
 
401
- #: cerber-common.php:1870
402
  msgid "Attempt to register denied"
403
  msgstr ""
404
 
405
- #: cerber-common.php:2075
406
  msgid "Attempt to upload a file with malicious code"
407
  msgstr ""
408
 
409
- #: cerber-common.php:1872
410
  msgid "Attempt to upload malicious file denied"
411
  msgstr ""
412
 
413
- #: cerber-load.php:5345
414
  msgid "Attempts to log in with non-existing usernames"
415
  msgstr ""
416
 
@@ -470,7 +470,7 @@ msgstr ""
470
  msgid "Average Size"
471
  msgstr ""
472
 
473
- #: cerber-load.php:8376
474
  msgid "Awesome!"
475
  msgstr ""
476
 
@@ -488,7 +488,7 @@ msgid ""
488
  "key on the Google website"
489
  msgstr ""
490
 
491
- #: admin/cerber-dashboard.php:323 admin/cerber-dashboard.php:1701
492
  #: admin/cerber-dashboard.php:1784 admin/cerber-dashboard.php:2208
493
  #: admin/cerber-tools.php:70
494
  msgid "Black IP Access List"
@@ -572,11 +572,11 @@ msgstr ""
572
  msgid "Blocked Users"
573
  msgstr ""
574
 
575
- #: cerber-common.php:2071
576
  msgid "Bot activity is detected"
577
  msgstr ""
578
 
579
- #: cerber-common.php:1910
580
  msgid "Bot detected"
581
  msgstr ""
582
 
@@ -600,7 +600,7 @@ msgstr ""
600
  msgid "by date of registration"
601
  msgstr ""
602
 
603
- #: cerber-load.php:8356
604
  msgid ""
605
  "By sharing your unique opinion on WP Cerber, you help the engineers behind "
606
  "the plugin make greater progress and help other professionals find the right "
@@ -608,15 +608,15 @@ msgid ""
608
  "free to use your native language. Thanks!"
609
  msgstr ""
610
 
611
- #: cerber-load.php:4893
612
  msgid "By the user"
613
  msgstr ""
614
 
615
- #: cerber-common.php:2358
616
  msgid "Bytes"
617
  msgstr ""
618
 
619
- #: cerber-load.php:6250
620
  msgid "Can't activate WP Cerber due to a database error."
621
  msgstr ""
622
 
@@ -692,7 +692,7 @@ msgstr ""
692
  msgid "Channels to send alerts"
693
  msgstr ""
694
 
695
- #: admin/cerber-dashboard.php:369 admin/cerber-dashboard.php:1770
696
  #: admin/cerber-dashboard.php:1827 admin/cerber-dashboard.php:2037
697
  msgid "Check for activities"
698
  msgstr ""
@@ -701,7 +701,7 @@ msgstr ""
701
  msgid "Check for requests"
702
  msgstr ""
703
 
704
- #: admin/cerber-dashboard.php:1487
705
  msgid "Check for requests from the IP address"
706
  msgstr ""
707
 
@@ -717,11 +717,11 @@ msgstr ""
717
  msgid "Checksum mismatch"
718
  msgstr ""
719
 
720
- #: cerber-common.php:1835
721
  msgid "Citadel activated!"
722
  msgstr ""
723
 
724
- #: cerber-settings.php:339
725
  msgid "Citadel mode"
726
  msgstr ""
727
 
@@ -729,13 +729,13 @@ msgstr ""
729
  msgid "Citadel mode duration"
730
  msgstr ""
731
 
732
- #: cerber-load.php:4830
733
  #, php-format
734
  msgid ""
735
  "Citadel mode has been activated after %d failed login attempts in %d minutes."
736
  msgstr ""
737
 
738
- #: cerber-load.php:4828 cerber-common.php:1911
739
  msgid "Citadel mode is active"
740
  msgstr ""
741
 
@@ -755,7 +755,7 @@ msgstr ""
755
  msgid "Click on a country name to add it to the list of selected countries"
756
  msgstr ""
757
 
758
- #: admin/cerber-dashboard.php:258
759
  msgid "Click the IP address to see its activity"
760
  msgstr ""
761
 
@@ -771,7 +771,7 @@ msgstr ""
771
  msgid "Click to send test"
772
  msgstr ""
773
 
774
- #: cerber-common.php:1839
775
  msgid "Comment denied"
776
  msgstr ""
777
 
@@ -821,7 +821,7 @@ msgstr ""
821
  msgid "Countries"
822
  msgstr ""
823
 
824
- #: admin/cerber-dashboard.php:246 admin/cerber-dashboard.php:1418
825
  msgid "Country"
826
  msgstr ""
827
 
@@ -889,7 +889,7 @@ msgstr ""
889
  msgid "Data Shield Policies"
890
  msgstr ""
891
 
892
- #: admin/cerber-dashboard.php:1029 admin/cerber-dashboard.php:1419
893
  #: admin/cerber-dashboard.php:4224 admin/cerber-dashboard.php:4709
894
  msgid "Date"
895
  msgstr ""
@@ -902,7 +902,7 @@ msgstr ""
902
  msgid "Date format for CSV export"
903
  msgstr ""
904
 
905
- #: cerber-load.php:4975 cerber-2fa.php:522
906
  msgid "Date:"
907
  msgstr ""
908
 
@@ -923,7 +923,7 @@ msgstr ""
923
  msgid "Default processing"
924
  msgstr ""
925
 
926
- #: admin/cerber-dashboard.php:822
927
  msgid "Default settings have been loaded"
928
  msgstr ""
929
 
@@ -944,7 +944,7 @@ msgstr ""
944
  msgid "Deferred rendering"
945
  msgstr ""
946
 
947
- #: admin/cerber-dashboard.php:1472 admin/cerber-tools.php:378
948
  #: admin/cerber-admin.php:228
949
  msgid "Delete"
950
  msgstr ""
@@ -989,7 +989,7 @@ msgstr ""
989
  msgid "Deleted"
990
  msgstr ""
991
 
992
- #: cerber-common.php:1909 cerber-common.php:1919
993
  msgid "Denied"
994
  msgstr ""
995
 
@@ -1009,7 +1009,7 @@ msgstr ""
1009
  msgid "Deny it completely"
1010
  msgstr ""
1011
 
1012
- #: cerber-common.php:3469
1013
  msgid "Destination folder access denied"
1014
  msgstr ""
1015
 
@@ -1113,7 +1113,7 @@ msgstr ""
1113
  msgid "Disabled"
1114
  msgstr ""
1115
 
1116
- #: admin/cerber-dashboard.php:2193
1117
  msgid "disabled"
1118
  msgstr ""
1119
 
@@ -1202,7 +1202,7 @@ msgstr ""
1202
  msgid "Duration"
1203
  msgstr ""
1204
 
1205
- #: cerber-common.php:1579
1206
  #, php-format
1207
  msgctxt "e.g. blocked by John at 11:00"
1208
  msgid "blocked by %s at %s"
@@ -1315,6 +1315,10 @@ msgstr ""
1315
  msgid "Enable traffic inspection"
1316
  msgstr ""
1317
 
 
 
 
 
1318
  #: cerber-settings.php:726 admin/cerber-users.php:479
1319
  msgid "Enabled, access to API using standard user passwords is allowed"
1320
  msgstr ""
@@ -1382,7 +1386,7 @@ msgstr ""
1382
  msgid "Errors"
1383
  msgstr ""
1384
 
1385
- #: admin/cerber-dashboard.php:1030 admin/cerber-dashboard.php:1420
1386
  msgid "Event"
1387
  msgstr ""
1388
 
@@ -1403,6 +1407,10 @@ msgctxt "Example: Last malware scan: 23 Jan 2018"
1403
  msgid "Last malware scan"
1404
  msgstr ""
1405
 
 
 
 
 
1406
  #: cerber-scanner.php:1638
1407
  msgid "Executable code found"
1408
  msgstr ""
@@ -1419,7 +1427,7 @@ msgstr ""
1419
  msgid "Executable files are not supported. Please upload a ZIP archive."
1420
  msgstr ""
1421
 
1422
- #: admin/cerber-dashboard.php:247 admin/cerber-users.php:1056
1423
  msgid "Expires"
1424
  msgstr ""
1425
 
@@ -1427,7 +1435,7 @@ msgstr ""
1427
  msgid "expires"
1428
  msgstr ""
1429
 
1430
- #: admin/cerber-dashboard.php:1449 admin/cerber-dashboard.php:4802
1431
  msgid "Export"
1432
  msgstr ""
1433
 
@@ -1483,7 +1491,7 @@ msgstr ""
1483
  msgid "File Name"
1484
  msgstr ""
1485
 
1486
- #: cerber-common.php:3472
1487
  msgid "File not found"
1488
  msgstr ""
1489
 
@@ -1491,7 +1499,7 @@ msgstr ""
1491
  msgid "File recovered"
1492
  msgstr ""
1493
 
1494
- #: cerber-common.php:1873
1495
  msgid "File upload denied"
1496
  msgstr ""
1497
 
@@ -1531,11 +1539,11 @@ msgstr ""
1531
  msgid "Files without extension"
1532
  msgstr ""
1533
 
1534
- #: admin/cerber-dashboard.php:1513
1535
  msgid "Filter"
1536
  msgstr ""
1537
 
1538
- #: admin/cerber-dashboard.php:1501 admin/cerber-users.php:1101
1539
  msgid "Filter by registered user"
1540
  msgstr ""
1541
 
@@ -1569,7 +1577,7 @@ msgstr ""
1569
  msgid "Form fields data"
1570
  msgstr ""
1571
 
1572
- #: cerber-common.php:1838
1573
  msgid "Form submission denied"
1574
  msgstr ""
1575
 
@@ -1577,11 +1585,11 @@ msgstr ""
1577
  msgid "Form submissions"
1578
  msgstr ""
1579
 
1580
- #: cerber-load.php:4897
1581
  msgid "From the country"
1582
  msgstr ""
1583
 
1584
- #: cerber-load.php:4894
1585
  msgid "From the IP address"
1586
  msgstr ""
1587
 
@@ -1597,7 +1605,7 @@ msgstr ""
1597
  msgid "Full Scan Report"
1598
  msgstr ""
1599
 
1600
- #: admin/cerber-dashboard.php:1474
1601
  msgid "Get me notified when such an event occurs"
1602
  msgstr ""
1603
 
@@ -1605,7 +1613,7 @@ msgstr ""
1605
  msgid "Get notified instantly with mobile and desktop notifications"
1606
  msgstr ""
1607
 
1608
- #: cerber-load.php:4903 cerber-load.php:6296
1609
  msgid "Getting Started Guide"
1610
  msgstr ""
1611
 
@@ -1641,7 +1649,7 @@ msgstr ""
1641
  msgid "Here are the details of the sign-in attempt"
1642
  msgstr ""
1643
 
1644
- #: cerber-load.php:4874
1645
  msgid "Hi!"
1646
  msgstr ""
1647
 
@@ -1661,7 +1669,7 @@ msgstr ""
1661
  msgid "Host Info"
1662
  msgstr ""
1663
 
1664
- #: admin/cerber-dashboard.php:245 admin/cerber-dashboard.php:1417
1665
  msgid "Hostname"
1666
  msgstr ""
1667
 
@@ -1740,7 +1748,7 @@ msgid ""
1740
  "email address on the account."
1741
  msgstr ""
1742
 
1743
- #: cerber-load.php:4706
1744
  msgid ""
1745
  "If you believe you should be able to perform this request, please let us "
1746
  "know."
@@ -1785,7 +1793,7 @@ msgid ""
1785
  "Immediately block IP when attempting to log in with a non-existing username"
1786
  msgstr ""
1787
 
1788
- #: cerber-load.php:6305
1789
  msgid "Import settings"
1790
  msgstr ""
1791
 
@@ -1877,7 +1885,7 @@ msgstr ""
1877
  msgid "Invalid cookies cleared"
1878
  msgstr ""
1879
 
1880
- #: cerber-common.php:1901
1881
  msgid "Invalid master credentials"
1882
  msgstr ""
1883
 
@@ -1893,22 +1901,22 @@ msgstr ""
1893
  msgid "Invisible reCAPTCHA"
1894
  msgstr ""
1895
 
1896
- #: admin/cerber-dashboard.php:244 admin/cerber-dashboard.php:1028
1897
  #: admin/cerber-dashboard.php:1416 admin/cerber-dashboard.php:4711
1898
  #: admin/cerber-users.php:1057
1899
  msgid "IP Address"
1900
  msgstr ""
1901
 
1902
- #: cerber-load.php:5984 cerber-load.php:5985 admin/cerber-dashboard.php:4223
1903
  msgid "IP address"
1904
  msgstr ""
1905
 
1906
- #: admin/cerber-dashboard.php:413
1907
  #, php-format
1908
  msgid "IP address %s has been added to Black IP Access List"
1909
  msgstr ""
1910
 
1911
- #: admin/cerber-dashboard.php:416
1912
  #, php-format
1913
  msgid "IP address %s has been added to White IP Access List"
1914
  msgstr ""
@@ -1921,7 +1929,7 @@ msgstr ""
1921
  msgid "IP address is not allowed"
1922
  msgstr ""
1923
 
1924
- #: admin/cerber-dashboard.php:385
1925
  msgid "IP address, range, wildcard, or CIDR"
1926
  msgstr ""
1927
 
@@ -1933,11 +1941,11 @@ msgstr ""
1933
  msgid "IP blacklisted"
1934
  msgstr ""
1935
 
1936
- #: cerber-common.php:1831 admin/cerber-dashboard.php:1173
1937
  msgid "IP blocked"
1938
  msgstr ""
1939
 
1940
- #: cerber-common.php:1832
1941
  msgid "IP subnet blocked"
1942
  msgstr ""
1943
 
@@ -1991,7 +1999,7 @@ msgid ""
1991
  "with public web access, report them, and remove malicious ones."
1992
  msgstr ""
1993
 
1994
- #: cerber-lab.php:900 admin/cerber-admin-settings.php:107
1995
  #: admin/cerber-admin-settings.php:266
1996
  msgid "Know more"
1997
  msgstr ""
@@ -2004,7 +2012,7 @@ msgstr ""
2004
  msgid "Largest"
2005
  msgstr ""
2006
 
2007
- #: cerber-load.php:4831
2008
  #, php-format
2009
  msgid "Last failed attempt was at %s from IP %s using username: %s."
2010
  msgstr ""
@@ -2013,7 +2021,7 @@ msgstr ""
2013
  msgid "Last lockout"
2014
  msgstr ""
2015
 
2016
- #: cerber-load.php:4865
2017
  #, php-format
2018
  msgid "Last lockout was added: %s for IP %s"
2019
  msgstr ""
@@ -2058,11 +2066,11 @@ msgstr ""
2058
  msgid "Limit on concurrent user sessions"
2059
  msgstr ""
2060
 
2061
- #: cerber-common.php:2070
2062
  msgid "Limit on failed reCAPTCHA verifications is reached"
2063
  msgstr ""
2064
 
2065
- #: cerber-common.php:2065
2066
  msgid "Limit on login attempts is reached"
2067
  msgstr ""
2068
 
@@ -2070,7 +2078,7 @@ msgstr ""
2070
  msgid "Limit reached"
2071
  msgstr ""
2072
 
2073
- #: admin/cerber-dashboard.php:379
2074
  msgid "List is empty"
2075
  msgstr ""
2076
 
@@ -2098,7 +2106,7 @@ msgstr ""
2098
  msgid "Local hash not found"
2099
  msgstr ""
2100
 
2101
- #: admin/cerber-dashboard.php:1032 admin/cerber-dashboard.php:1421
2102
  #: admin/cerber-dashboard.php:4714
2103
  msgid "Local User"
2104
  msgstr ""
@@ -2113,11 +2121,11 @@ msgid ""
2113
  "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
2114
  msgstr ""
2115
 
2116
- #: cerber-common.php:1912 admin/cerber-dashboard.php:1790
2117
  msgid "Locked out"
2118
  msgstr ""
2119
 
2120
- #: admin/cerber-dashboard.php:718
2121
  #, php-format
2122
  msgid "Lockout for %s was removed"
2123
  msgstr ""
@@ -2162,11 +2170,11 @@ msgstr ""
2162
  msgid "Log Out"
2163
  msgstr ""
2164
 
2165
- #: cerber-common.php:1826
2166
  msgid "Logged in"
2167
  msgstr ""
2168
 
2169
- #: cerber-common.php:1827
2170
  msgid "Logged out"
2171
  msgstr ""
2172
 
@@ -2187,7 +2195,7 @@ msgstr ""
2187
  msgid "Logging mode"
2188
  msgstr ""
2189
 
2190
- #: cerber-common.php:1828
2191
  msgid "Login failed"
2192
  msgstr ""
2193
 
@@ -2211,7 +2219,7 @@ msgstr ""
2211
  msgid "Login from a different network Class C"
2212
  msgstr ""
2213
 
2214
- #: admin/cerber-dashboard.php:1158
2215
  msgid "Login issues"
2216
  msgstr ""
2217
 
@@ -2259,7 +2267,7 @@ msgstr ""
2259
  msgid "Malicious activity detected"
2260
  msgstr ""
2261
 
2262
- #: cerber-common.php:1923 cerber-common.php:2074
2263
  msgid "Malicious code detected"
2264
  msgstr ""
2265
 
@@ -2271,7 +2279,7 @@ msgstr ""
2271
  msgid "Malicious IP addresses detected"
2272
  msgstr ""
2273
 
2274
- #: cerber-common.php:1884
2275
  msgid "Malicious request denied"
2276
  msgstr ""
2277
 
@@ -2373,7 +2381,7 @@ msgstr ""
2373
  msgid "Move spam comments to trash after"
2374
  msgstr ""
2375
 
2376
- #: cerber-common.php:2077
2377
  msgid "Multiple erroneous requests"
2378
  msgstr ""
2379
 
@@ -2381,19 +2389,19 @@ msgstr ""
2381
  msgid "Multiple suspicious activities"
2382
  msgstr ""
2383
 
2384
- #: cerber-common.php:2072
2385
  msgid "Multiple suspicious activities were detected"
2386
  msgstr ""
2387
 
2388
- #: cerber-common.php:2078
2389
  msgid "Multiple suspicious requests"
2390
  msgstr ""
2391
 
2392
- #: admin/cerber-dashboard.php:1177
2393
  msgid "My activity"
2394
  msgstr ""
2395
 
2396
- #: admin/cerber-dashboard.php:1178 admin/cerber-dashboard.php:4784
2397
  msgid "My IP"
2398
  msgstr ""
2399
 
@@ -2418,13 +2426,13 @@ msgstr ""
2418
  msgid "Network:"
2419
  msgstr ""
2420
 
2421
- #: cerber-common.php:2243 nexus/cerber-slave-list.php:347
2422
- #: admin/cerber-dashboard.php:529 admin/cerber-dashboard.php:2181
2423
  #: admin/cerber-dashboard.php:2230
2424
  msgid "Never"
2425
  msgstr ""
2426
 
2427
- #: cerber-load.php:4912
2428
  msgid "New Custom login URL"
2429
  msgstr ""
2430
 
@@ -2436,7 +2444,7 @@ msgstr ""
2436
  msgid "New files"
2437
  msgstr ""
2438
 
2439
- #: admin/cerber-dashboard.php:1157
2440
  msgid "New users"
2441
  msgstr ""
2442
 
@@ -2448,11 +2456,15 @@ msgstr ""
2448
  msgid "Newest"
2449
  msgstr ""
2450
 
2451
- #: admin/cerber-dashboard.php:1466 admin/cerber-dashboard.php:1912
2452
  #: admin/cerber-dashboard.php:2789 admin/cerber-admin.php:1340
2453
  msgid "No activity has been logged yet."
2454
  msgstr ""
2455
 
 
 
 
 
2456
  #: admin/cerber-admin.php:958
2457
  msgid "No data for generating reports"
2458
  msgstr ""
@@ -2461,7 +2473,7 @@ msgstr ""
2461
  msgid "No devices found"
2462
  msgstr ""
2463
 
2464
- #: admin/cerber-dashboard.php:1469
2465
  msgid "No events found using the given search criteria"
2466
  msgstr ""
2467
 
@@ -2481,7 +2493,7 @@ msgstr ""
2481
  msgid "No limit"
2482
  msgstr ""
2483
 
2484
- #: admin/cerber-dashboard.php:275 admin/cerber-dashboard.php:2849
2485
  msgid "No lockouts at the moment. The sky is clear."
2486
  msgstr ""
2487
 
@@ -2505,11 +2517,11 @@ msgstr ""
2505
  msgid "No websites configured."
2506
  msgstr ""
2507
 
2508
- #: cerber-lab.php:899
2509
  msgid "NO, maybe later"
2510
  msgstr ""
2511
 
2512
- #: admin/cerber-dashboard.php:1175 admin/cerber-dashboard.php:4778
2513
  msgid "Non-authenticated"
2514
  msgstr ""
2515
 
@@ -2560,7 +2572,7 @@ msgstr ""
2560
  msgid "notifications are allowed per hour (0 means unlimited)"
2561
  msgstr ""
2562
 
2563
- #: cerber-load.php:4862
2564
  msgid "Number of active lockouts"
2565
  msgstr ""
2566
 
@@ -2568,7 +2580,7 @@ msgstr ""
2568
  msgid "Number of allowed concurrent user sessions"
2569
  msgstr ""
2570
 
2571
- #: cerber-load.php:4860
2572
  msgid "Number of lockouts is increasing"
2573
  msgstr ""
2574
 
@@ -2580,7 +2592,7 @@ msgstr ""
2580
  msgid "OK"
2581
  msgstr ""
2582
 
2583
- #: cerber-lab.php:898
2584
  msgid "OK, nail them all"
2585
  msgstr ""
2586
 
@@ -2619,7 +2631,7 @@ msgstr ""
2619
  msgid "Optional alert limits"
2620
  msgstr ""
2621
 
2622
- #: admin/cerber-dashboard.php:387
2623
  msgid "Optional comment for this entry"
2624
  msgstr ""
2625
 
@@ -2651,21 +2663,21 @@ msgstr ""
2651
  msgid "Parsing the list of files"
2652
  msgstr ""
2653
 
2654
- #: cerber-common.php:1848
2655
  msgid "Password changed"
2656
  msgstr ""
2657
 
2658
  #. %s is the name of a website administrator who changed the password.
2659
- #: cerber-common.php:1850
2660
  #, php-format
2661
  msgid "Password changed by %s"
2662
  msgstr ""
2663
 
2664
- #: cerber-common.php:1856
2665
  msgid "Password reset request denied"
2666
  msgstr ""
2667
 
2668
- #: cerber-common.php:1851
2669
  msgid "Password reset requested"
2670
  msgstr ""
2671
 
@@ -2762,7 +2774,7 @@ msgstr ""
2762
  msgid "Preparing for the scan"
2763
  msgstr ""
2764
 
2765
- #: cerber-common.php:2238
2766
  #, php-format
2767
  msgctxt "preposition of a period of time like: in 6 hours"
2768
  msgid "in %s"
@@ -2794,7 +2806,7 @@ msgstr ""
2794
  msgid "Proactive security rules"
2795
  msgstr ""
2796
 
2797
- #: cerber-common.php:1871 cerber-common.php:2073
2798
  msgid "Probing for vulnerable code"
2799
  msgstr ""
2800
 
@@ -2882,7 +2894,7 @@ msgstr ""
2882
  msgid "Read-only mode"
2883
  msgstr ""
2884
 
2885
- #: cerber-load.php:4866 admin/cerber-dashboard.php:248
2886
  msgid "Reason"
2887
  msgstr ""
2888
 
@@ -2890,11 +2902,11 @@ msgstr ""
2890
  msgid "reCAPTCHA settings"
2891
  msgstr ""
2892
 
2893
- #: cerber-common.php:1860 cerber-common.php:1962
2894
  msgid "reCAPTCHA settings are incorrect"
2895
  msgstr ""
2896
 
2897
- #: cerber-common.php:1859 cerber-common.php:1961
2898
  msgid "reCAPTCHA verification failed"
2899
  msgstr ""
2900
 
@@ -2970,7 +2982,7 @@ msgstr ""
2970
  msgid "Regular time intervals (days)"
2971
  msgstr ""
2972
 
2973
- #: admin/cerber-dashboard.php:237 admin/cerber-dashboard.php:373
2974
  msgid "Remove"
2975
  msgstr ""
2976
 
@@ -2986,19 +2998,19 @@ msgstr ""
2986
  msgid "Request"
2987
  msgstr ""
2988
 
2989
- #: admin/cerber-dashboard.php:1505
2990
  msgid "Request ID"
2991
  msgstr ""
2992
 
2993
- #: cerber-common.php:1875
2994
  msgid "Request to REST API denied"
2995
  msgstr ""
2996
 
2997
- #: cerber-common.php:1861 cerber-common.php:1963
2998
  msgid "Request to the Google reCAPTCHA service failed"
2999
  msgstr ""
3000
 
3001
- #: cerber-common.php:1876
3002
  msgid "Request to XML-RPC API denied"
3003
  msgstr ""
3004
 
@@ -3062,7 +3074,7 @@ msgstr ""
3062
  msgid "Return to the website list"
3063
  msgstr ""
3064
 
3065
- #: cerber-common.php:1880
3066
  msgid "Role update denied"
3067
  msgstr ""
3068
 
@@ -3130,7 +3142,7 @@ msgstr ""
3130
  msgid "Scanned"
3131
  msgstr ""
3132
 
3133
- #: cerber-load.php:4931
3134
  msgid "Scanner Report"
3135
  msgstr ""
3136
 
@@ -3162,11 +3174,11 @@ msgstr ""
3162
  msgid "Search for IP address"
3163
  msgstr ""
3164
 
3165
- #: admin/cerber-dashboard.php:1502
3166
  msgid "Search for IP or username"
3167
  msgstr ""
3168
 
3169
- #: admin/cerber-dashboard.php:1506
3170
  msgid "Search in URL"
3171
  msgstr ""
3172
 
@@ -3174,7 +3186,7 @@ msgstr ""
3174
  msgid "Search results for:"
3175
  msgstr ""
3176
 
3177
- #: cerber-load.php:5999 cerber-load.php:6000
3178
  msgid "Search string"
3179
  msgstr ""
3180
 
@@ -3274,7 +3286,7 @@ msgstr[1] ""
3274
  msgid "Sessions"
3275
  msgstr ""
3276
 
3277
- #: cerber-common.php:1881
3278
  msgid "Setting update denied"
3279
  msgstr ""
3280
 
@@ -3407,7 +3419,7 @@ msgstr ""
3407
  msgid "Space Occupied"
3408
  msgstr ""
3409
 
3410
- #: cerber-common.php:1836
3411
  msgid "Spam comment denied"
3412
  msgstr ""
3413
 
@@ -3415,7 +3427,7 @@ msgstr ""
3415
  msgid "Spam comments denied"
3416
  msgstr ""
3417
 
3418
- #: cerber-common.php:1837
3419
  msgid "Spam form submission denied"
3420
  msgstr ""
3421
 
@@ -3501,7 +3513,7 @@ msgstr ""
3501
  msgid "Submit forms"
3502
  msgstr ""
3503
 
3504
- #: admin/cerber-dashboard.php:1163
3505
  msgid "Suspicious activity"
3506
  msgstr ""
3507
 
@@ -3565,7 +3577,7 @@ msgstr ""
3565
  msgid "Terminate user sessions"
3566
  msgstr ""
3567
 
3568
- #: admin/cerber-dashboard.php:745
3569
  msgid "TEST MESSAGE"
3570
  msgstr ""
3571
 
@@ -3661,11 +3673,11 @@ msgstr ""
3661
  msgid "The website you are trying to add is already in the list"
3662
  msgstr ""
3663
 
3664
- #: cerber-load.php:4881
3665
  msgid "The WP Cerber Security plugin has been deactivated"
3666
  msgstr ""
3667
 
3668
- #: cerber-load.php:4901
3669
  msgid "The WP Cerber Security plugin is now active"
3670
  msgstr ""
3671
 
@@ -3742,16 +3754,16 @@ msgctxt "This is a risk level."
3742
  msgid "Medium"
3743
  msgstr ""
3744
 
3745
- #: cerber-load.php:4974
3746
- msgid "This message created by"
3747
- msgstr ""
3748
-
3749
  #: cerber-settings.php:665
3750
  msgid ""
3751
  "This message is displayed to a user if the IP address of the user's computer "
3752
  "is not whitelisted"
3753
  msgstr ""
3754
 
 
 
 
 
3755
  #: admin/cerber-dashboard.php:3480
3756
  msgid ""
3757
  "This scan report was generated by the previous version of WP Cerber. Please "
@@ -3786,11 +3798,11 @@ msgid ""
3786
  "the plugin cache."
3787
  msgstr ""
3788
 
3789
- #: cerber-load.php:4926 cerber-load.php:4934
3790
  msgid "To change reporting settings visit"
3791
  msgstr ""
3792
 
3793
- #: cerber-load.php:6024
3794
  msgid "To delete the alert, click here"
3795
  msgstr ""
3796
 
@@ -3859,7 +3871,8 @@ msgstr ""
3859
  msgid "Traffic Inspection"
3860
  msgstr ""
3861
 
3862
- #: admin/cerber-dashboard.php:62 admin/cerber-dashboard.php:5532
 
3863
  msgid "Traffic Inspector"
3864
  msgstr ""
3865
 
@@ -3909,11 +3922,11 @@ msgstr ""
3909
  msgid "Unable to check the integrity of WordPress files due to a network error"
3910
  msgstr ""
3911
 
3912
- #: cerber-common.php:3475
3913
  msgid "Unable to copy the file"
3914
  msgstr ""
3915
 
3916
- #: cerber-common.php:3464
3917
  msgid "Unable to create the directory"
3918
  msgstr ""
3919
 
@@ -3921,7 +3934,7 @@ msgstr ""
3921
  msgid "Unable to delete"
3922
  msgstr ""
3923
 
3924
- #: cerber-common.php:3481
3925
  msgid "Unable to delete the file"
3926
  msgstr ""
3927
 
@@ -3933,7 +3946,7 @@ msgstr ""
3933
  msgid "Unable to process file"
3934
  msgstr ""
3935
 
3936
- #: admin/cerber-dashboard.php:753
3937
  msgid "Unable to send a test message"
3938
  msgstr ""
3939
 
@@ -3949,14 +3962,14 @@ msgstr ""
3949
  msgid "Unattended suspicious file"
3950
  msgstr ""
3951
 
3952
- #: cerber-load.php:4885 cerber-whois.php:241 cerber-whois.php:272
3953
- #: cerber-common.php:2090 nexus/cerber-slave-list.php:333
3954
- #: admin/cerber-dashboard.php:501 admin/cerber-dashboard.php:4377
3955
  #: admin/cerber-dashboard.php:4983
3956
  msgid "Unknown"
3957
  msgstr ""
3958
 
3959
- #: admin/cerber-dashboard.php:650
3960
  msgid "unknown"
3961
  msgstr ""
3962
 
@@ -3964,11 +3977,11 @@ msgstr ""
3964
  msgid "Unknown Google's bot"
3965
  msgstr ""
3966
 
3967
- #: cerber-common.php:1976
3968
  msgid "Unknown label"
3969
  msgstr ""
3970
 
3971
- #: cerber-load.php:4857
3972
  msgid "unspecified"
3973
  msgstr ""
3974
 
@@ -4076,7 +4089,7 @@ msgstr ""
4076
  msgid "Use XML-RPC"
4077
  msgstr ""
4078
 
4079
- #: cerber-load.php:5989 cerber-load.php:5990 admin/cerber-users.php:1053
4080
  msgid "User"
4081
  msgstr ""
4082
 
@@ -4086,7 +4099,7 @@ msgid_plural "users"
4086
  msgstr[0] ""
4087
  msgstr[1] ""
4088
 
4089
- #: cerber-common.php:1898
4090
  msgid "User activated"
4091
  msgstr ""
4092
 
@@ -4098,27 +4111,27 @@ msgstr ""
4098
  msgid "User Agent"
4099
  msgstr ""
4100
 
4101
- #: cerber-common.php:1888
4102
  msgid "User application password created"
4103
  msgstr ""
4104
 
4105
  #. %s is the name of a website administrator who created the password.
4106
- #: cerber-common.php:1890
4107
  #, php-format
4108
  msgid "User application password created by %s"
4109
  msgstr ""
4110
 
4111
- #: cerber-common.php:1893
4112
  msgid "User application password deleted"
4113
  msgstr ""
4114
 
4115
  #. %s is the name of a website administrator who deleted the password.
4116
- #: cerber-common.php:1895
4117
  #, php-format
4118
  msgid "User application password deleted by %s"
4119
  msgstr ""
4120
 
4121
- #: cerber-common.php:1887
4122
  msgid "User application password updated"
4123
  msgstr ""
4124
 
@@ -4126,31 +4139,31 @@ msgstr ""
4126
  msgid "User blocked by administrator"
4127
  msgstr ""
4128
 
4129
- #: cerber-common.php:1819
4130
  msgid "User created"
4131
  msgstr ""
4132
 
4133
  #. %s is the name of a website administrator who created the user.
4134
- #: cerber-common.php:1821
4135
  #, php-format
4136
  msgid "User created by %s"
4137
  msgstr ""
4138
 
4139
- #: cerber-common.php:1878
4140
  msgid "User creation denied"
4141
  msgstr ""
4142
 
4143
- #: cerber-common.php:1823
4144
  msgid "User deleted"
4145
  msgstr ""
4146
 
4147
  #. %s is the name of a website administrator who deleted the user.
4148
- #: cerber-common.php:1825
4149
  #, php-format
4150
  msgid "User deleted by %s"
4151
  msgstr ""
4152
 
4153
- #: admin/cerber-dashboard.php:1034 admin/cerber-dashboard.php:4229
4154
  msgid "User ID"
4155
  msgstr ""
4156
 
@@ -4166,7 +4179,7 @@ msgstr ""
4166
  msgid "User is not permitted to log into the website"
4167
  msgstr ""
4168
 
4169
- #: admin/cerber-dashboard.php:1033
4170
  msgid "User login"
4171
  msgstr ""
4172
 
@@ -4178,7 +4191,7 @@ msgstr ""
4178
  msgid "User message"
4179
  msgstr ""
4180
 
4181
- #: cerber-common.php:1882
4182
  msgid "User metadata update denied"
4183
  msgstr ""
4184
 
@@ -4186,7 +4199,7 @@ msgstr ""
4186
  msgid "User Policies"
4187
  msgstr ""
4188
 
4189
- #: cerber-common.php:1822
4190
  msgid "User registered"
4191
  msgstr ""
4192
 
@@ -4198,7 +4211,7 @@ msgstr ""
4198
  msgid "User registrations are limited to these roles"
4199
  msgstr ""
4200
 
4201
- #: cerber-common.php:1879
4202
  msgid "User row update denied"
4203
  msgstr ""
4204
 
@@ -4206,12 +4219,12 @@ msgstr ""
4206
  msgid "User session expiration time"
4207
  msgstr ""
4208
 
4209
- #: cerber-common.php:1852
4210
  msgid "User session terminated"
4211
  msgstr ""
4212
 
4213
  #. %s is the name of a website administrator who terminated the session.
4214
- #: cerber-common.php:1854
4215
  #, php-format
4216
  msgid "User session terminated by %s"
4217
  msgstr ""
@@ -4220,7 +4233,15 @@ msgstr ""
4220
  msgid "User Sessions"
4221
  msgstr ""
4222
 
4223
- #: admin/cerber-dashboard.php:1035 admin/cerber-dashboard.php:1422
 
 
 
 
 
 
 
 
4224
  msgid "Username"
4225
  msgstr ""
4226
 
@@ -4236,7 +4257,7 @@ msgstr ""
4236
  msgid "username is prohibited"
4237
  msgstr ""
4238
 
4239
- #: cerber-load.php:5994 cerber-load.php:5995
4240
  msgid "Username used"
4241
  msgstr ""
4242
 
@@ -4247,7 +4268,7 @@ msgid ""
4247
  "blocked. Use comma to separate logins."
4248
  msgstr ""
4249
 
4250
- #: admin/cerber-dashboard.php:1174 admin/cerber-dashboard.php:4777
4251
  msgid "Users"
4252
  msgstr ""
4253
 
@@ -4307,16 +4328,16 @@ msgstr ""
4307
  msgid "View Activity"
4308
  msgstr ""
4309
 
4310
- #: cerber-load.php:4869
4311
  msgid "View activity for this IP"
4312
  msgstr ""
4313
 
4314
- #: cerber-load.php:4833 cerber-load.php:6023
4315
  msgid "View activity in the Dashboard"
4316
  msgstr ""
4317
 
4318
- #: admin/cerber-dashboard.php:1142 admin/cerber-dashboard.php:1153
4319
- #: admin/cerber-dashboard.php:1166 admin/cerber-dashboard.php:2852
4320
  #: admin/cerber-dashboard.php:4774
4321
  msgid "View all"
4322
  msgstr ""
@@ -4325,7 +4346,7 @@ msgstr ""
4325
  msgid "view all"
4326
  msgstr ""
4327
 
4328
- #: admin/cerber-dashboard.php:1479
4329
  msgid "View all logged events"
4330
  msgstr ""
4331
 
@@ -4345,7 +4366,7 @@ msgstr ""
4345
  msgid "View denied REST API requests"
4346
  msgstr ""
4347
 
4348
- #: cerber-load.php:4870
4349
  msgid "View lockouts in the Dashboard"
4350
  msgstr ""
4351
 
@@ -4365,7 +4386,7 @@ msgstr ""
4365
  msgid "Vulnerability found"
4366
  msgstr ""
4367
 
4368
- #: cerber-lab.php:896
4369
  msgid "Want to make WP Cerber even more powerful?"
4370
  msgstr ""
4371
 
@@ -4373,11 +4394,11 @@ msgstr ""
4373
  msgid "We have not found any integrity data to verify"
4374
  msgstr ""
4375
 
4376
- #: cerber-load.php:8354
4377
  msgid "We need your support to keep moving forward"
4378
  msgstr ""
4379
 
4380
- #: cerber-load.php:4704
4381
  msgid "We're sorry, you are not allowed to proceed"
4382
  msgstr ""
4383
 
@@ -4385,7 +4406,7 @@ msgstr ""
4385
  msgid "We've sent a verification PIN code to your email"
4386
  msgstr ""
4387
 
4388
- #: cerber-load.php:4878 cerber-load.php:4891 nexus/cerber-slave-list.php:44
4389
  msgid "Website"
4390
  msgstr ""
4391
 
@@ -4408,11 +4429,11 @@ msgstr ""
4408
  msgid "Website URL"
4409
  msgstr ""
4410
 
4411
- #: cerber-load.php:5319
4412
  msgid "Weekly Report"
4413
  msgstr ""
4414
 
4415
- #: cerber-load.php:4923
4416
  msgid "Weekly report"
4417
  msgstr ""
4418
 
@@ -4456,7 +4477,7 @@ msgid ""
4456
  "loaded. The Custom login URL and Access Lists will not be changed."
4457
  msgstr ""
4458
 
4459
- #: admin/cerber-dashboard.php:319 admin/cerber-dashboard.php:1698
4460
  #: admin/cerber-dashboard.php:1781 admin/cerber-dashboard.php:2207
4461
  #: admin/cerber-tools.php:69
4462
  msgid "White IP Access List"
@@ -4478,16 +4499,16 @@ msgstr ""
4478
  msgid "WordPress uploads analysis"
4479
  msgstr ""
4480
 
4481
- #: cerber-load.php:4902 cerber-load.php:6292
4482
  msgid "WP Cerber is now active and has started protecting your site"
4483
  msgstr ""
4484
 
4485
- #: cerber-load.php:6236 cerber-common.php:618
4486
  #, php-format
4487
  msgid "WP Cerber requires PHP %s or higher. You are running %s."
4488
  msgstr ""
4489
 
4490
- #: cerber-load.php:6240 cerber-common.php:622
4491
  #, php-format
4492
  msgid "WP Cerber requires WordPress %s or higher. You are running %s."
4493
  msgstr ""
@@ -4500,7 +4521,7 @@ msgstr ""
4500
  msgid "Write failed login attempts to the file"
4501
  msgstr ""
4502
 
4503
- #: cerber-common.php:1572 admin/cerber-dashboard.php:2125
4504
  #: admin/cerber-users.php:1212
4505
  msgid "You"
4506
  msgstr ""
@@ -4522,7 +4543,7 @@ msgstr ""
4522
  msgid "You are not allowed to register."
4523
  msgstr ""
4524
 
4525
- #: admin/cerber-dashboard.php:409
4526
  msgid "You cannot add your IP address or network"
4527
  msgstr ""
4528
 
@@ -4577,33 +4598,33 @@ msgid ""
4577
  "safeguard your account."
4578
  msgstr ""
4579
 
4580
- #: admin/cerber-dashboard.php:1472
4581
  msgid "You will be notified when such an event occurs"
4582
  msgstr ""
4583
 
4584
- #: admin/cerber-dashboard.php:331
4585
  msgid "Your IP"
4586
  msgstr ""
4587
 
4588
- #: cerber-load.php:6278
4589
  #, php-format
4590
  msgid "Your IP address %s has been added to the White IP Access List"
4591
  msgstr ""
4592
 
4593
- #: cerber-load.php:5157
4594
  #, php-format
4595
  msgid "Your last sign-in was %s from %s"
4596
  msgstr ""
4597
 
4598
- #: cerber-load.php:4971
4599
  msgid "Your license is valid until"
4600
  msgstr ""
4601
 
4602
- #: cerber-load.php:4966
4603
  msgid "Your login page:"
4604
  msgstr ""
4605
 
4606
- #: cerber-load.php:4705
4607
  msgid ""
4608
  "Your request looks suspiciously similar to automated requests from spam "
4609
  "posting software or it has been denied by a security policy configured by "
4
  msgstr ""
5
  "Project-Id-Version: WP Cerber Security, Anti-spam & Malware Scan\n"
6
  "Report-Msgid-Bugs-To: \n"
7
+ "POT-Creation-Date: 2022-11-09 00:12+0000\n"
8
  "POT-Revision-Date: Fri Mar 12 2021 20:21:05 GMT+0300 (Moscow Standard Time)\n"
9
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
  "Last-Translator: \n"
41
  msgstr ""
42
 
43
  #. Time difference between two dates, in seconds (sec=second). 1: Number of seconds
44
+ #: cerber-common.php:2237
45
  #, php-format
46
  msgid "%s sec"
47
  msgid_plural "%s secs"
66
  msgid "A database error occurred while importing access list entries"
67
  msgstr ""
68
 
69
+ #: cerber-load.php:4920
70
  msgid "A new activity has occurred"
71
  msgstr ""
72
 
74
  msgid "A new version is available"
75
  msgstr ""
76
 
77
+ #: cerber-common.php:2487
78
  #, php-format
79
  msgid "A new version of %s is available. Please install it."
80
  msgstr ""
81
 
82
+ #: cerber-load.php:4877 cerber-load.php:4879
83
  msgid "A new version of WP Cerber is available to install"
84
  msgstr ""
85
 
88
  msgstr ""
89
 
90
  #. %s is the name of a mobile device or/and email addresses.
91
+ #: admin/cerber-dashboard.php:752
92
  #, php-format
93
  msgid "A test message has been sent to %s"
94
  msgstr ""
124
  msgid "Accounts & Roles"
125
  msgstr ""
126
 
127
+ #: admin/cerber-dashboard.php:250 admin/cerber-users.php:1059
128
  #: admin/cerber-admin.php:775 admin/cerber-admin.php:930
129
  msgid "Action"
130
  msgstr ""
133
  msgid "Activated"
134
  msgstr ""
135
 
136
+ #: admin/cerber-dashboard.php:2186 admin/cerber-dashboard.php:2216
137
  msgid "active"
138
  msgstr ""
139
 
145
  msgid "Active sessions"
146
  msgstr ""
147
 
148
+ #: cerber-load.php:5983 cerber-settings.php:368 admin/cerber-dashboard.php:2250
149
  #: admin/cerber-dashboard.php:5462 admin/cerber-users.php:1245
150
  msgid "Activity"
151
  msgstr ""
152
 
153
+ #: cerber-load.php:5335
154
  msgid "Activity details"
155
  msgstr ""
156
 
170
  msgid "Add a remote website"
171
  msgstr ""
172
 
173
+ #: admin/cerber-dashboard.php:387
174
  msgid "Add Entry"
175
  msgstr ""
176
 
195
  msgid "Added"
196
  msgstr ""
197
 
198
+ #: admin/cerber-dashboard.php:1033
199
  msgid "Additional Details"
200
  msgstr ""
201
 
271
  msgid "Allow these namespaces"
272
  msgstr ""
273
 
274
+ #: cerber-lab.php:896
275
  msgid ""
276
  "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
277
  "This helps the plugin team to develop new algorithms for WP Cerber that will "
339
  msgid "Any country is permitted"
340
  msgstr ""
341
 
342
+ #: cerber-common.php:1893
343
  msgid "API request authorization failed"
344
  msgstr ""
345
 
346
+ #: cerber-common.php:1892
347
  msgid "API request authorized"
348
  msgstr ""
349
 
378
  msgid "Are you sure? This permanently invalidates the token."
379
  msgstr ""
380
 
381
+ #: cerber-common.php:2071
382
  msgid "Attempt to access"
383
  msgstr ""
384
 
385
+ #: cerber-common.php:1865 cerber-common.php:2072
386
  msgid "Attempt to access prohibited URL"
387
  msgstr ""
388
 
389
+ #: cerber-common.php:1870
390
  msgid "Attempt to log in denied"
391
  msgstr ""
392
 
393
+ #: cerber-common.php:1866 cerber-common.php:2073
394
  msgid "Attempt to log in with non-existing username"
395
  msgstr ""
396
 
397
+ #: cerber-common.php:1867 cerber-common.php:2074
398
  msgid "Attempt to log in with prohibited username"
399
  msgstr ""
400
 
401
+ #: cerber-common.php:1871
402
  msgid "Attempt to register denied"
403
  msgstr ""
404
 
405
+ #: cerber-common.php:2080
406
  msgid "Attempt to upload a file with malicious code"
407
  msgstr ""
408
 
409
+ #: cerber-common.php:1873
410
  msgid "Attempt to upload malicious file denied"
411
  msgstr ""
412
 
413
+ #: cerber-load.php:5349
414
  msgid "Attempts to log in with non-existing usernames"
415
  msgstr ""
416
 
470
  msgid "Average Size"
471
  msgstr ""
472
 
473
+ #: cerber-load.php:8380
474
  msgid "Awesome!"
475
  msgstr ""
476
 
488
  "key on the Google website"
489
  msgstr ""
490
 
491
+ #: admin/cerber-dashboard.php:324 admin/cerber-dashboard.php:1702
492
  #: admin/cerber-dashboard.php:1784 admin/cerber-dashboard.php:2208
493
  #: admin/cerber-tools.php:70
494
  msgid "Black IP Access List"
572
  msgid "Blocked Users"
573
  msgstr ""
574
 
575
+ #: cerber-common.php:2076
576
  msgid "Bot activity is detected"
577
  msgstr ""
578
 
579
+ #: cerber-common.php:1911
580
  msgid "Bot detected"
581
  msgstr ""
582
 
600
  msgid "by date of registration"
601
  msgstr ""
602
 
603
+ #: cerber-load.php:8360
604
  msgid ""
605
  "By sharing your unique opinion on WP Cerber, you help the engineers behind "
606
  "the plugin make greater progress and help other professionals find the right "
608
  "free to use your native language. Thanks!"
609
  msgstr ""
610
 
611
+ #: cerber-load.php:4897
612
  msgid "By the user"
613
  msgstr ""
614
 
615
+ #: cerber-common.php:2364
616
  msgid "Bytes"
617
  msgstr ""
618
 
619
+ #: cerber-load.php:6254
620
  msgid "Can't activate WP Cerber due to a database error."
621
  msgstr ""
622
 
692
  msgid "Channels to send alerts"
693
  msgstr ""
694
 
695
+ #: admin/cerber-dashboard.php:370 admin/cerber-dashboard.php:1771
696
  #: admin/cerber-dashboard.php:1827 admin/cerber-dashboard.php:2037
697
  msgid "Check for activities"
698
  msgstr ""
701
  msgid "Check for requests"
702
  msgstr ""
703
 
704
+ #: admin/cerber-dashboard.php:1489
705
  msgid "Check for requests from the IP address"
706
  msgstr ""
707
 
717
  msgid "Checksum mismatch"
718
  msgstr ""
719
 
720
+ #: cerber-common.php:1836
721
  msgid "Citadel activated!"
722
  msgstr ""
723
 
724
+ #: cerber-settings.php:339 admin/cerber-dashboard.php:2209
725
  msgid "Citadel mode"
726
  msgstr ""
727
 
729
  msgid "Citadel mode duration"
730
  msgstr ""
731
 
732
+ #: cerber-load.php:4834
733
  #, php-format
734
  msgid ""
735
  "Citadel mode has been activated after %d failed login attempts in %d minutes."
736
  msgstr ""
737
 
738
+ #: cerber-load.php:4832 cerber-common.php:1912
739
  msgid "Citadel mode is active"
740
  msgstr ""
741
 
755
  msgid "Click on a country name to add it to the list of selected countries"
756
  msgstr ""
757
 
758
+ #: admin/cerber-dashboard.php:259
759
  msgid "Click the IP address to see its activity"
760
  msgstr ""
761
 
771
  msgid "Click to send test"
772
  msgstr ""
773
 
774
+ #: cerber-common.php:1840
775
  msgid "Comment denied"
776
  msgstr ""
777
 
821
  msgid "Countries"
822
  msgstr ""
823
 
824
+ #: admin/cerber-dashboard.php:247 admin/cerber-dashboard.php:1418
825
  msgid "Country"
826
  msgstr ""
827
 
889
  msgid "Data Shield Policies"
890
  msgstr ""
891
 
892
+ #: admin/cerber-dashboard.php:1031 admin/cerber-dashboard.php:1419
893
  #: admin/cerber-dashboard.php:4224 admin/cerber-dashboard.php:4709
894
  msgid "Date"
895
  msgstr ""
902
  msgid "Date format for CSV export"
903
  msgstr ""
904
 
905
+ #: cerber-load.php:4979 cerber-2fa.php:522
906
  msgid "Date:"
907
  msgstr ""
908
 
923
  msgid "Default processing"
924
  msgstr ""
925
 
926
+ #: admin/cerber-dashboard.php:824
927
  msgid "Default settings have been loaded"
928
  msgstr ""
929
 
944
  msgid "Deferred rendering"
945
  msgstr ""
946
 
947
+ #: admin/cerber-dashboard.php:1474 admin/cerber-tools.php:378
948
  #: admin/cerber-admin.php:228
949
  msgid "Delete"
950
  msgstr ""
989
  msgid "Deleted"
990
  msgstr ""
991
 
992
+ #: cerber-common.php:1910 cerber-common.php:1919
993
  msgid "Denied"
994
  msgstr ""
995
 
1009
  msgid "Deny it completely"
1010
  msgstr ""
1011
 
1012
+ #: cerber-common.php:3475
1013
  msgid "Destination folder access denied"
1014
  msgstr ""
1015
 
1113
  msgid "Disabled"
1114
  msgstr ""
1115
 
1116
+ #: admin/cerber-dashboard.php:2193 admin/cerber-dashboard.php:2211
1117
  msgid "disabled"
1118
  msgstr ""
1119
 
1202
  msgid "Duration"
1203
  msgstr ""
1204
 
1205
+ #: cerber-common.php:1580
1206
  #, php-format
1207
  msgctxt "e.g. blocked by John at 11:00"
1208
  msgid "blocked by %s at %s"
1315
  msgid "Enable traffic inspection"
1316
  msgstr ""
1317
 
1318
+ #: admin/cerber-dashboard.php:2211
1319
+ msgid "enabled"
1320
+ msgstr ""
1321
+
1322
  #: cerber-settings.php:726 admin/cerber-users.php:479
1323
  msgid "Enabled, access to API using standard user passwords is allowed"
1324
  msgstr ""
1386
  msgid "Errors"
1387
  msgstr ""
1388
 
1389
+ #: admin/cerber-dashboard.php:1032 admin/cerber-dashboard.php:1420
1390
  msgid "Event"
1391
  msgstr ""
1392
 
1407
  msgid "Last malware scan"
1408
  msgstr ""
1409
 
1410
+ #: cerber-common.php:1968 cerber-common.php:2085
1411
+ msgid "Exceeded the limit on the number of attempts to enter 2FA code"
1412
+ msgstr ""
1413
+
1414
  #: cerber-scanner.php:1638
1415
  msgid "Executable code found"
1416
  msgstr ""
1427
  msgid "Executable files are not supported. Please upload a ZIP archive."
1428
  msgstr ""
1429
 
1430
+ #: admin/cerber-dashboard.php:248 admin/cerber-users.php:1056
1431
  msgid "Expires"
1432
  msgstr ""
1433
 
1435
  msgid "expires"
1436
  msgstr ""
1437
 
1438
+ #: admin/cerber-dashboard.php:1451 admin/cerber-dashboard.php:4802
1439
  msgid "Export"
1440
  msgstr ""
1441
 
1491
  msgid "File Name"
1492
  msgstr ""
1493
 
1494
+ #: cerber-common.php:3478
1495
  msgid "File not found"
1496
  msgstr ""
1497
 
1499
  msgid "File recovered"
1500
  msgstr ""
1501
 
1502
+ #: cerber-common.php:1874
1503
  msgid "File upload denied"
1504
  msgstr ""
1505
 
1539
  msgid "Files without extension"
1540
  msgstr ""
1541
 
1542
+ #: admin/cerber-dashboard.php:1515
1543
  msgid "Filter"
1544
  msgstr ""
1545
 
1546
+ #: admin/cerber-dashboard.php:1503 admin/cerber-users.php:1101
1547
  msgid "Filter by registered user"
1548
  msgstr ""
1549
 
1577
  msgid "Form fields data"
1578
  msgstr ""
1579
 
1580
+ #: cerber-common.php:1839
1581
  msgid "Form submission denied"
1582
  msgstr ""
1583
 
1585
  msgid "Form submissions"
1586
  msgstr ""
1587
 
1588
+ #: cerber-load.php:4901
1589
  msgid "From the country"
1590
  msgstr ""
1591
 
1592
+ #: cerber-load.php:4898
1593
  msgid "From the IP address"
1594
  msgstr ""
1595
 
1605
  msgid "Full Scan Report"
1606
  msgstr ""
1607
 
1608
+ #: admin/cerber-dashboard.php:1476
1609
  msgid "Get me notified when such an event occurs"
1610
  msgstr ""
1611
 
1613
  msgid "Get notified instantly with mobile and desktop notifications"
1614
  msgstr ""
1615
 
1616
+ #: cerber-load.php:4907 cerber-load.php:6300
1617
  msgid "Getting Started Guide"
1618
  msgstr ""
1619
 
1649
  msgid "Here are the details of the sign-in attempt"
1650
  msgstr ""
1651
 
1652
+ #: cerber-load.php:4878
1653
  msgid "Hi!"
1654
  msgstr ""
1655
 
1669
  msgid "Host Info"
1670
  msgstr ""
1671
 
1672
+ #: admin/cerber-dashboard.php:246 admin/cerber-dashboard.php:1417
1673
  msgid "Hostname"
1674
  msgstr ""
1675
 
1748
  "email address on the account."
1749
  msgstr ""
1750
 
1751
+ #: cerber-load.php:4710
1752
  msgid ""
1753
  "If you believe you should be able to perform this request, please let us "
1754
  "know."
1793
  "Immediately block IP when attempting to log in with a non-existing username"
1794
  msgstr ""
1795
 
1796
+ #: cerber-load.php:6309
1797
  msgid "Import settings"
1798
  msgstr ""
1799
 
1885
  msgid "Invalid cookies cleared"
1886
  msgstr ""
1887
 
1888
+ #: cerber-common.php:1902
1889
  msgid "Invalid master credentials"
1890
  msgstr ""
1891
 
1901
  msgid "Invisible reCAPTCHA"
1902
  msgstr ""
1903
 
1904
+ #: admin/cerber-dashboard.php:245 admin/cerber-dashboard.php:1030
1905
  #: admin/cerber-dashboard.php:1416 admin/cerber-dashboard.php:4711
1906
  #: admin/cerber-users.php:1057
1907
  msgid "IP Address"
1908
  msgstr ""
1909
 
1910
+ #: cerber-load.php:5988 cerber-load.php:5989 admin/cerber-dashboard.php:4223
1911
  msgid "IP address"
1912
  msgstr ""
1913
 
1914
+ #: admin/cerber-dashboard.php:414
1915
  #, php-format
1916
  msgid "IP address %s has been added to Black IP Access List"
1917
  msgstr ""
1918
 
1919
+ #: admin/cerber-dashboard.php:417
1920
  #, php-format
1921
  msgid "IP address %s has been added to White IP Access List"
1922
  msgstr ""
1929
  msgid "IP address is not allowed"
1930
  msgstr ""
1931
 
1932
+ #: admin/cerber-dashboard.php:386
1933
  msgid "IP address, range, wildcard, or CIDR"
1934
  msgstr ""
1935
 
1941
  msgid "IP blacklisted"
1942
  msgstr ""
1943
 
1944
+ #: cerber-common.php:1832 admin/cerber-dashboard.php:1175
1945
  msgid "IP blocked"
1946
  msgstr ""
1947
 
1948
+ #: cerber-common.php:1833
1949
  msgid "IP subnet blocked"
1950
  msgstr ""
1951
 
1999
  "with public web access, report them, and remove malicious ones."
2000
  msgstr ""
2001
 
2002
+ #: cerber-lab.php:899 admin/cerber-admin-settings.php:107
2003
  #: admin/cerber-admin-settings.php:266
2004
  msgid "Know more"
2005
  msgstr ""
2012
  msgid "Largest"
2013
  msgstr ""
2014
 
2015
+ #: cerber-load.php:4835
2016
  #, php-format
2017
  msgid "Last failed attempt was at %s from IP %s using username: %s."
2018
  msgstr ""
2021
  msgid "Last lockout"
2022
  msgstr ""
2023
 
2024
+ #: cerber-load.php:4869
2025
  #, php-format
2026
  msgid "Last lockout was added: %s for IP %s"
2027
  msgstr ""
2066
  msgid "Limit on concurrent user sessions"
2067
  msgstr ""
2068
 
2069
+ #: cerber-common.php:2075
2070
  msgid "Limit on failed reCAPTCHA verifications is reached"
2071
  msgstr ""
2072
 
2073
+ #: cerber-common.php:2070
2074
  msgid "Limit on login attempts is reached"
2075
  msgstr ""
2076
 
2078
  msgid "Limit reached"
2079
  msgstr ""
2080
 
2081
+ #: admin/cerber-dashboard.php:380
2082
  msgid "List is empty"
2083
  msgstr ""
2084
 
2106
  msgid "Local hash not found"
2107
  msgstr ""
2108
 
2109
+ #: admin/cerber-dashboard.php:1034 admin/cerber-dashboard.php:1421
2110
  #: admin/cerber-dashboard.php:4714
2111
  msgid "Local User"
2112
  msgstr ""
2121
  "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
2122
  msgstr ""
2123
 
2124
+ #: admin/cerber-dashboard.php:1790
2125
  msgid "Locked out"
2126
  msgstr ""
2127
 
2128
+ #: admin/cerber-dashboard.php:720
2129
  #, php-format
2130
  msgid "Lockout for %s was removed"
2131
  msgstr ""
2170
  msgid "Log Out"
2171
  msgstr ""
2172
 
2173
+ #: cerber-common.php:1827
2174
  msgid "Logged in"
2175
  msgstr ""
2176
 
2177
+ #: cerber-common.php:1828
2178
  msgid "Logged out"
2179
  msgstr ""
2180
 
2195
  msgid "Logging mode"
2196
  msgstr ""
2197
 
2198
+ #: cerber-common.php:1829
2199
  msgid "Login failed"
2200
  msgstr ""
2201
 
2219
  msgid "Login from a different network Class C"
2220
  msgstr ""
2221
 
2222
+ #: admin/cerber-dashboard.php:1160
2223
  msgid "Login issues"
2224
  msgstr ""
2225
 
2267
  msgid "Malicious activity detected"
2268
  msgstr ""
2269
 
2270
+ #: cerber-common.php:1923 cerber-common.php:2079
2271
  msgid "Malicious code detected"
2272
  msgstr ""
2273
 
2279
  msgid "Malicious IP addresses detected"
2280
  msgstr ""
2281
 
2282
+ #: cerber-common.php:1885
2283
  msgid "Malicious request denied"
2284
  msgstr ""
2285
 
2381
  msgid "Move spam comments to trash after"
2382
  msgstr ""
2383
 
2384
+ #: cerber-common.php:2082
2385
  msgid "Multiple erroneous requests"
2386
  msgstr ""
2387
 
2389
  msgid "Multiple suspicious activities"
2390
  msgstr ""
2391
 
2392
+ #: cerber-common.php:2077
2393
  msgid "Multiple suspicious activities were detected"
2394
  msgstr ""
2395
 
2396
+ #: cerber-common.php:2083
2397
  msgid "Multiple suspicious requests"
2398
  msgstr ""
2399
 
2400
+ #: admin/cerber-dashboard.php:1179
2401
  msgid "My activity"
2402
  msgstr ""
2403
 
2404
+ #: admin/cerber-dashboard.php:1180 admin/cerber-dashboard.php:4784
2405
  msgid "My IP"
2406
  msgstr ""
2407
 
2426
  msgid "Network:"
2427
  msgstr ""
2428
 
2429
+ #: cerber-common.php:2249 nexus/cerber-slave-list.php:347
2430
+ #: admin/cerber-dashboard.php:530 admin/cerber-dashboard.php:2181
2431
  #: admin/cerber-dashboard.php:2230
2432
  msgid "Never"
2433
  msgstr ""
2434
 
2435
+ #: cerber-load.php:4916
2436
  msgid "New Custom login URL"
2437
  msgstr ""
2438
 
2444
  msgid "New files"
2445
  msgstr ""
2446
 
2447
+ #: admin/cerber-dashboard.php:1159
2448
  msgid "New users"
2449
  msgstr ""
2450
 
2456
  msgid "Newest"
2457
  msgstr ""
2458
 
2459
+ #: admin/cerber-dashboard.php:1468 admin/cerber-dashboard.php:1912
2460
  #: admin/cerber-dashboard.php:2789 admin/cerber-admin.php:1340
2461
  msgid "No activity has been logged yet."
2462
  msgstr ""
2463
 
2464
+ #: admin/cerber-dashboard.php:2216
2465
+ msgid "no connection"
2466
+ msgstr ""
2467
+
2468
  #: admin/cerber-admin.php:958
2469
  msgid "No data for generating reports"
2470
  msgstr ""
2473
  msgid "No devices found"
2474
  msgstr ""
2475
 
2476
+ #: admin/cerber-dashboard.php:1471
2477
  msgid "No events found using the given search criteria"
2478
  msgstr ""
2479
 
2493
  msgid "No limit"
2494
  msgstr ""
2495
 
2496
+ #: admin/cerber-dashboard.php:276 admin/cerber-dashboard.php:2849
2497
  msgid "No lockouts at the moment. The sky is clear."
2498
  msgstr ""
2499
 
2517
  msgid "No websites configured."
2518
  msgstr ""
2519
 
2520
+ #: cerber-lab.php:898
2521
  msgid "NO, maybe later"
2522
  msgstr ""
2523
 
2524
+ #: admin/cerber-dashboard.php:1177 admin/cerber-dashboard.php:4778
2525
  msgid "Non-authenticated"
2526
  msgstr ""
2527
 
2572
  msgid "notifications are allowed per hour (0 means unlimited)"
2573
  msgstr ""
2574
 
2575
+ #: cerber-load.php:4866
2576
  msgid "Number of active lockouts"
2577
  msgstr ""
2578
 
2580
  msgid "Number of allowed concurrent user sessions"
2581
  msgstr ""
2582
 
2583
+ #: cerber-load.php:4864
2584
  msgid "Number of lockouts is increasing"
2585
  msgstr ""
2586
 
2592
  msgid "OK"
2593
  msgstr ""
2594
 
2595
+ #: cerber-lab.php:897
2596
  msgid "OK, nail them all"
2597
  msgstr ""
2598
 
2631
  msgid "Optional alert limits"
2632
  msgstr ""
2633
 
2634
+ #: admin/cerber-dashboard.php:388
2635
  msgid "Optional comment for this entry"
2636
  msgstr ""
2637
 
2663
  msgid "Parsing the list of files"
2664
  msgstr ""
2665
 
2666
+ #: cerber-common.php:1849
2667
  msgid "Password changed"
2668
  msgstr ""
2669
 
2670
  #. %s is the name of a website administrator who changed the password.
2671
+ #: cerber-common.php:1851
2672
  #, php-format
2673
  msgid "Password changed by %s"
2674
  msgstr ""
2675
 
2676
+ #: cerber-common.php:1857
2677
  msgid "Password reset request denied"
2678
  msgstr ""
2679
 
2680
+ #: cerber-common.php:1852
2681
  msgid "Password reset requested"
2682
  msgstr ""
2683
 
2774
  msgid "Preparing for the scan"
2775
  msgstr ""
2776
 
2777
+ #: cerber-common.php:2244
2778
  #, php-format
2779
  msgctxt "preposition of a period of time like: in 6 hours"
2780
  msgid "in %s"
2806
  msgid "Proactive security rules"
2807
  msgstr ""
2808
 
2809
+ #: cerber-common.php:1872 cerber-common.php:2078
2810
  msgid "Probing for vulnerable code"
2811
  msgstr ""
2812
 
2894
  msgid "Read-only mode"
2895
  msgstr ""
2896
 
2897
+ #: cerber-load.php:4870 admin/cerber-dashboard.php:249
2898
  msgid "Reason"
2899
  msgstr ""
2900
 
2902
  msgid "reCAPTCHA settings"
2903
  msgstr ""
2904
 
2905
+ #: cerber-common.php:1861 cerber-common.php:1962
2906
  msgid "reCAPTCHA settings are incorrect"
2907
  msgstr ""
2908
 
2909
+ #: cerber-common.php:1860 cerber-common.php:1961
2910
  msgid "reCAPTCHA verification failed"
2911
  msgstr ""
2912
 
2982
  msgid "Regular time intervals (days)"
2983
  msgstr ""
2984
 
2985
+ #: admin/cerber-dashboard.php:238 admin/cerber-dashboard.php:374
2986
  msgid "Remove"
2987
  msgstr ""
2988
 
2998
  msgid "Request"
2999
  msgstr ""
3000
 
3001
+ #: admin/cerber-dashboard.php:1507
3002
  msgid "Request ID"
3003
  msgstr ""
3004
 
3005
+ #: cerber-common.php:1876
3006
  msgid "Request to REST API denied"
3007
  msgstr ""
3008
 
3009
+ #: cerber-common.php:1862 cerber-common.php:1963
3010
  msgid "Request to the Google reCAPTCHA service failed"
3011
  msgstr ""
3012
 
3013
+ #: cerber-common.php:1877
3014
  msgid "Request to XML-RPC API denied"
3015
  msgstr ""
3016
 
3074
  msgid "Return to the website list"
3075
  msgstr ""
3076
 
3077
+ #: cerber-common.php:1881
3078
  msgid "Role update denied"
3079
  msgstr ""
3080
 
3142
  msgid "Scanned"
3143
  msgstr ""
3144
 
3145
+ #: cerber-load.php:4935
3146
  msgid "Scanner Report"
3147
  msgstr ""
3148
 
3174
  msgid "Search for IP address"
3175
  msgstr ""
3176
 
3177
+ #: admin/cerber-dashboard.php:1504
3178
  msgid "Search for IP or username"
3179
  msgstr ""
3180
 
3181
+ #: admin/cerber-dashboard.php:1508
3182
  msgid "Search in URL"
3183
  msgstr ""
3184
 
3186
  msgid "Search results for:"
3187
  msgstr ""
3188
 
3189
+ #: cerber-load.php:6003 cerber-load.php:6004
3190
  msgid "Search string"
3191
  msgstr ""
3192
 
3286
  msgid "Sessions"
3287
  msgstr ""
3288
 
3289
+ #: cerber-common.php:1882
3290
  msgid "Setting update denied"
3291
  msgstr ""
3292
 
3419
  msgid "Space Occupied"
3420
  msgstr ""
3421
 
3422
+ #: cerber-common.php:1837
3423
  msgid "Spam comment denied"
3424
  msgstr ""
3425
 
3427
  msgid "Spam comments denied"
3428
  msgstr ""
3429
 
3430
+ #: cerber-common.php:1838
3431
  msgid "Spam form submission denied"
3432
  msgstr ""
3433
 
3513
  msgid "Submit forms"
3514
  msgstr ""
3515
 
3516
+ #: admin/cerber-dashboard.php:1165
3517
  msgid "Suspicious activity"
3518
  msgstr ""
3519
 
3577
  msgid "Terminate user sessions"
3578
  msgstr ""
3579
 
3580
+ #: admin/cerber-dashboard.php:747
3581
  msgid "TEST MESSAGE"
3582
  msgstr ""
3583
 
3673
  msgid "The website you are trying to add is already in the list"
3674
  msgstr ""
3675
 
3676
+ #: cerber-load.php:4885
3677
  msgid "The WP Cerber Security plugin has been deactivated"
3678
  msgstr ""
3679
 
3680
+ #: cerber-load.php:4905
3681
  msgid "The WP Cerber Security plugin is now active"
3682
  msgstr ""
3683
 
3754
  msgid "Medium"
3755
  msgstr ""
3756
 
 
 
 
 
3757
  #: cerber-settings.php:665
3758
  msgid ""
3759
  "This message is displayed to a user if the IP address of the user's computer "
3760
  "is not whitelisted"
3761
  msgstr ""
3762
 
3763
+ #: cerber-load.php:4978
3764
+ msgid "This message was created by"
3765
+ msgstr ""
3766
+
3767
  #: admin/cerber-dashboard.php:3480
3768
  msgid ""
3769
  "This scan report was generated by the previous version of WP Cerber. Please "
3798
  "the plugin cache."
3799
  msgstr ""
3800
 
3801
+ #: cerber-load.php:4930 cerber-load.php:4938
3802
  msgid "To change reporting settings visit"
3803
  msgstr ""
3804
 
3805
+ #: cerber-load.php:6028
3806
  msgid "To delete the alert, click here"
3807
  msgstr ""
3808
 
3871
  msgid "Traffic Inspection"
3872
  msgstr ""
3873
 
3874
+ #: admin/cerber-dashboard.php:62 admin/cerber-dashboard.php:2212
3875
+ #: admin/cerber-dashboard.php:5532
3876
  msgid "Traffic Inspector"
3877
  msgstr ""
3878
 
3922
  msgid "Unable to check the integrity of WordPress files due to a network error"
3923
  msgstr ""
3924
 
3925
+ #: cerber-common.php:3481
3926
  msgid "Unable to copy the file"
3927
  msgstr ""
3928
 
3929
+ #: cerber-common.php:3470
3930
  msgid "Unable to create the directory"
3931
  msgstr ""
3932
 
3934
  msgid "Unable to delete"
3935
  msgstr ""
3936
 
3937
+ #: cerber-common.php:3487
3938
  msgid "Unable to delete the file"
3939
  msgstr ""
3940
 
3946
  msgid "Unable to process file"
3947
  msgstr ""
3948
 
3949
+ #: admin/cerber-dashboard.php:755
3950
  msgid "Unable to send a test message"
3951
  msgstr ""
3952
 
3962
  msgid "Unattended suspicious file"
3963
  msgstr ""
3964
 
3965
+ #: cerber-load.php:4889 cerber-whois.php:241 cerber-whois.php:272
3966
+ #: cerber-common.php:2096 nexus/cerber-slave-list.php:333
3967
+ #: admin/cerber-dashboard.php:502 admin/cerber-dashboard.php:4377
3968
  #: admin/cerber-dashboard.php:4983
3969
  msgid "Unknown"
3970
  msgstr ""
3971
 
3972
+ #: admin/cerber-dashboard.php:651
3973
  msgid "unknown"
3974
  msgstr ""
3975
 
3977
  msgid "Unknown Google's bot"
3978
  msgstr ""
3979
 
3980
+ #: cerber-common.php:1981
3981
  msgid "Unknown label"
3982
  msgstr ""
3983
 
3984
+ #: cerber-load.php:4861
3985
  msgid "unspecified"
3986
  msgstr ""
3987
 
4089
  msgid "Use XML-RPC"
4090
  msgstr ""
4091
 
4092
+ #: cerber-load.php:5993 cerber-load.php:5994 admin/cerber-users.php:1053
4093
  msgid "User"
4094
  msgstr ""
4095
 
4099
  msgstr[0] ""
4100
  msgstr[1] ""
4101
 
4102
+ #: cerber-common.php:1899
4103
  msgid "User activated"
4104
  msgstr ""
4105
 
4111
  msgid "User Agent"
4112
  msgstr ""
4113
 
4114
+ #: cerber-common.php:1889
4115
  msgid "User application password created"
4116
  msgstr ""
4117
 
4118
  #. %s is the name of a website administrator who created the password.
4119
+ #: cerber-common.php:1891
4120
  #, php-format
4121
  msgid "User application password created by %s"
4122
  msgstr ""
4123
 
4124
+ #: cerber-common.php:1894
4125
  msgid "User application password deleted"
4126
  msgstr ""
4127
 
4128
  #. %s is the name of a website administrator who deleted the password.
4129
+ #: cerber-common.php:1896
4130
  #, php-format
4131
  msgid "User application password deleted by %s"
4132
  msgstr ""
4133
 
4134
+ #: cerber-common.php:1888
4135
  msgid "User application password updated"
4136
  msgstr ""
4137
 
4139
  msgid "User blocked by administrator"
4140
  msgstr ""
4141
 
4142
+ #: cerber-common.php:1820
4143
  msgid "User created"
4144
  msgstr ""
4145
 
4146
  #. %s is the name of a website administrator who created the user.
4147
+ #: cerber-common.php:1822
4148
  #, php-format
4149
  msgid "User created by %s"
4150
  msgstr ""
4151
 
4152
+ #: cerber-common.php:1879
4153
  msgid "User creation denied"
4154
  msgstr ""
4155
 
4156
+ #: cerber-common.php:1824
4157
  msgid "User deleted"
4158
  msgstr ""
4159
 
4160
  #. %s is the name of a website administrator who deleted the user.
4161
+ #: cerber-common.php:1826
4162
  #, php-format
4163
  msgid "User deleted by %s"
4164
  msgstr ""
4165
 
4166
+ #: admin/cerber-dashboard.php:1036 admin/cerber-dashboard.php:4229
4167
  msgid "User ID"
4168
  msgstr ""
4169
 
4179
  msgid "User is not permitted to log into the website"
4180
  msgstr ""
4181
 
4182
+ #: admin/cerber-dashboard.php:1035
4183
  msgid "User login"
4184
  msgstr ""
4185
 
4191
  msgid "User message"
4192
  msgstr ""
4193
 
4194
+ #: cerber-common.php:1883
4195
  msgid "User metadata update denied"
4196
  msgstr ""
4197
 
4199
  msgid "User Policies"
4200
  msgstr ""
4201
 
4202
+ #: cerber-common.php:1823
4203
  msgid "User registered"
4204
  msgstr ""
4205
 
4211
  msgid "User registrations are limited to these roles"
4212
  msgstr ""
4213
 
4214
+ #: cerber-common.php:1880
4215
  msgid "User row update denied"
4216
  msgstr ""
4217
 
4219
  msgid "User session expiration time"
4220
  msgstr ""
4221
 
4222
+ #: cerber-common.php:1853
4223
  msgid "User session terminated"
4224
  msgstr ""
4225
 
4226
  #. %s is the name of a website administrator who terminated the session.
4227
+ #: cerber-common.php:1855
4228
  #, php-format
4229
  msgid "User session terminated by %s"
4230
  msgstr ""
4233
  msgid "User Sessions"
4234
  msgstr ""
4235
 
4236
+ #: cerber-common.php:1967
4237
+ msgid "User's browser does not match the one used to log in"
4238
+ msgstr ""
4239
+
4240
+ #: cerber-common.php:1966
4241
+ msgid "User's IP address does not match the one used to log in"
4242
+ msgstr ""
4243
+
4244
+ #: admin/cerber-dashboard.php:1037 admin/cerber-dashboard.php:1422
4245
  msgid "Username"
4246
  msgstr ""
4247
 
4257
  msgid "username is prohibited"
4258
  msgstr ""
4259
 
4260
+ #: cerber-load.php:5998 cerber-load.php:5999
4261
  msgid "Username used"
4262
  msgstr ""
4263
 
4268
  "blocked. Use comma to separate logins."
4269
  msgstr ""
4270
 
4271
+ #: admin/cerber-dashboard.php:1176 admin/cerber-dashboard.php:4777
4272
  msgid "Users"
4273
  msgstr ""
4274
 
4328
  msgid "View Activity"
4329
  msgstr ""
4330
 
4331
+ #: cerber-load.php:4873
4332
  msgid "View activity for this IP"
4333
  msgstr ""
4334
 
4335
+ #: cerber-load.php:4837 cerber-load.php:6027
4336
  msgid "View activity in the Dashboard"
4337
  msgstr ""
4338
 
4339
+ #: admin/cerber-dashboard.php:1144 admin/cerber-dashboard.php:1155
4340
+ #: admin/cerber-dashboard.php:1168 admin/cerber-dashboard.php:2852
4341
  #: admin/cerber-dashboard.php:4774
4342
  msgid "View all"
4343
  msgstr ""
4346
  msgid "view all"
4347
  msgstr ""
4348
 
4349
+ #: admin/cerber-dashboard.php:1481
4350
  msgid "View all logged events"
4351
  msgstr ""
4352
 
4366
  msgid "View denied REST API requests"
4367
  msgstr ""
4368
 
4369
+ #: cerber-load.php:4874
4370
  msgid "View lockouts in the Dashboard"
4371
  msgstr ""
4372
 
4386
  msgid "Vulnerability found"
4387
  msgstr ""
4388
 
4389
+ #: cerber-lab.php:895
4390
  msgid "Want to make WP Cerber even more powerful?"
4391
  msgstr ""
4392
 
4394
  msgid "We have not found any integrity data to verify"
4395
  msgstr ""
4396
 
4397
+ #: cerber-load.php:8358
4398
  msgid "We need your support to keep moving forward"
4399
  msgstr ""
4400
 
4401
+ #: cerber-load.php:4708
4402
  msgid "We're sorry, you are not allowed to proceed"
4403
  msgstr ""
4404
 
4406
  msgid "We've sent a verification PIN code to your email"
4407
  msgstr ""
4408
 
4409
+ #: cerber-load.php:4882 cerber-load.php:4895 nexus/cerber-slave-list.php:44
4410
  msgid "Website"
4411
  msgstr ""
4412
 
4429
  msgid "Website URL"
4430
  msgstr ""
4431
 
4432
+ #: cerber-load.php:5323
4433
  msgid "Weekly Report"
4434
  msgstr ""
4435
 
4436
+ #: cerber-load.php:4927
4437
  msgid "Weekly report"
4438
  msgstr ""
4439
 
4477
  "loaded. The Custom login URL and Access Lists will not be changed."
4478
  msgstr ""
4479
 
4480
+ #: admin/cerber-dashboard.php:320 admin/cerber-dashboard.php:1699
4481
  #: admin/cerber-dashboard.php:1781 admin/cerber-dashboard.php:2207
4482
  #: admin/cerber-tools.php:69
4483
  msgid "White IP Access List"
4499
  msgid "WordPress uploads analysis"
4500
  msgstr ""
4501
 
4502
+ #: cerber-load.php:4906 cerber-load.php:6296
4503
  msgid "WP Cerber is now active and has started protecting your site"
4504
  msgstr ""
4505
 
4506
+ #: cerber-load.php:6240 cerber-common.php:618
4507
  #, php-format
4508
  msgid "WP Cerber requires PHP %s or higher. You are running %s."
4509
  msgstr ""
4510
 
4511
+ #: cerber-load.php:6244 cerber-common.php:622
4512
  #, php-format
4513
  msgid "WP Cerber requires WordPress %s or higher. You are running %s."
4514
  msgstr ""
4521
  msgid "Write failed login attempts to the file"
4522
  msgstr ""
4523
 
4524
+ #: cerber-common.php:1573 admin/cerber-dashboard.php:2125
4525
  #: admin/cerber-users.php:1212
4526
  msgid "You"
4527
  msgstr ""
4543
  msgid "You are not allowed to register."
4544
  msgstr ""
4545
 
4546
+ #: admin/cerber-dashboard.php:410
4547
  msgid "You cannot add your IP address or network"
4548
  msgstr ""
4549
 
4598
  "safeguard your account."
4599
  msgstr ""
4600
 
4601
+ #: admin/cerber-dashboard.php:1474
4602
  msgid "You will be notified when such an event occurs"
4603
  msgstr ""
4604
 
4605
+ #: admin/cerber-dashboard.php:332
4606
  msgid "Your IP"
4607
  msgstr ""
4608
 
4609
+ #: cerber-load.php:6282
4610
  #, php-format
4611
  msgid "Your IP address %s has been added to the White IP Access List"
4612
  msgstr ""
4613
 
4614
+ #: cerber-load.php:5161
4615
  #, php-format
4616
  msgid "Your last sign-in was %s from %s"
4617
  msgstr ""
4618
 
4619
+ #: cerber-load.php:4975
4620
  msgid "Your license is valid until"
4621
  msgstr ""
4622
 
4623
+ #: cerber-load.php:4970
4624
  msgid "Your login page:"
4625
  msgstr ""
4626
 
4627
+ #: cerber-load.php:4709
4628
  msgid ""
4629
  "Your request looks suspiciously similar to automated requests from spam "
4630
  "posting software or it has been denied by a security policy configured by "
readme.txt CHANGED
@@ -4,8 +4,8 @@ Tags: security, malware scanner, antispam, firewall, limit login attempts, custo
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SQ5EC8WQP654Q&source=url
5
  Requires at least: 4.9
6
  Requires PHP: 7.0
7
- Tested up to: 6.0
8
- Stable tag: 9.2.2
9
  License: GPLv2
10
 
11
  Protection against hacker attacks and bots. Malware scanner & integrity checker. User activity log. Antispam reCAPTCHA. Limit login attempts.
@@ -316,8 +316,17 @@ To get access to your dashboard you need to copy the WP Cerber Reset folder to t
316
 
317
  == Changelog ==
318
 
319
- = 9.2.2 =
320
- * Some parts of the plugin code have been refactored to be in compliance with new wordpress.org plugin guidelines and requirements. Please check the WP Cerber changelog to see all the changes and new features introduced in the previous versions 9.1 and 9.2.
 
 
 
 
 
 
 
 
 
321
 
322
  = 9.2 =
323
  * New: Custom login error message. If showing the default WordPress login error message is disabled, you can optionally specify your own login error message. Available in the professional version.
4
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SQ5EC8WQP654Q&source=url
5
  Requires at least: 4.9
6
  Requires PHP: 7.0
7
+ Tested up to: 6.1
8
+ Stable tag: 9.3.3
9
  License: GPLv2
10
 
11
  Protection against hacker attacks and bots. Malware scanner & integrity checker. User activity log. Antispam reCAPTCHA. Limit login attempts.
316
 
317
  == Changelog ==
318
 
319
+ = 9.3.2 =
320
+ * Improved: Every locked-out IP address on the "Lockout" tab has a link to check its suspicious activity in the Activity log.
321
+ * Improved: The activity log provides more details on [two-factor authentication (2FA)](https://wpcerber.com/two-factor-authentication-for-wordpress/) events with several new statuses that are logged if an attempt to log in using 2FA was aborted.
322
+ * Improved: The activity log provides more details when a user was forcefully logged out (user session has been terminated) due to a restriction.
323
+ * Fixed minor vulnerability: If WordPress is installed in a subfolder and [access to WordPress REST API has been blocked on the "Hardening" tab](https://wpcerber.com/restrict-access-to-wordpress-rest-api/), a bad actor can get access to REST API by using a specially formatted request.
324
+ * Fixed bug: Multiple duplicate notifications are sent via email and [Pushbullet](https://wpcerber.com/wordpress-mobile-and-browser-notifications-pushbullet/) if an IP address is permanently getting blocked due to multiply consequent malicious requests.
325
+
326
+ = 9.3 =
327
+ * This is a bug fix and code optimization version
328
+ * Fixed: Unable to remove a blocked IP network class C (with an asterisk) from the list of locked out IP addresses by clicking the "Remove" link on the Lockouts tab.
329
+ * Fixed: "Fatal error: Uncaught Error: Cannot use object of type WP_Error as array in … /cerber-common.php on line 4634". The bug occurs if the PHP constant WP_ACCESSIBLE_HOSTS is defined and it does not contain 'downloads.wpcerber.com'.
330
 
331
  = 9.2 =
332
  * New: Custom login error message. If showing the default WordPress login error message is disabled, you can optionally specify your own login error message. Available in the professional version.
wp-cerber.php CHANGED
@@ -6,7 +6,7 @@
6
  Author: Cerber Tech Inc.
7
  Author URI: https://wpcerber.com
8
  Update URI: https://downloads.wpcerber.com/versions/wp-cerber.json
9
- Version: 9.2.2
10
  Text Domain: wp-cerber
11
  Domain Path: /languages
12
  Network: true
@@ -32,7 +32,7 @@
32
 
33
  */
34
 
35
- const CERBER_VER = '9.2.2';
36
  const CERBER_PLUGIN_ID = 'wp-cerber/wp-cerber.php';
37
 
38
  function cerber_plugin_file() {
6
  Author: Cerber Tech Inc.
7
  Author URI: https://wpcerber.com
8
  Update URI: https://downloads.wpcerber.com/versions/wp-cerber.json
9
+ Version: 9.3.3
10
  Text Domain: wp-cerber
11
  Domain Path: /languages
12
  Network: true
32
 
33
  */
34
 
35
+ const CERBER_VER = '9.3.3';
36
  const CERBER_PLUGIN_ID = 'wp-cerber/wp-cerber.php';
37
 
38
  function cerber_plugin_file() {