Cerber Security & Antispam - Version 7.9.3

Version Description

  • New: New settings for the Traffic Inspector firewall allow you to fine-tune its behavior. You can enable less or more restrictive firewall rules.
  • Update: Troubleshooting of possible issues with scheduled maintenance tasks has been improved.
  • Update: To make troubleshooting easier the plugin logs not only a lockout event but also logs and displays the reason for the lockout.
  • Update: Compatibility with ManageWP and Gravity Forms has been improved.
  • Update: The layout of the Activity and Live Traffic pages has been improved.
  • Bug fixed: The malware scanner wrongly prevents PHP files with few specific names in one particular location from being deleted after a manual scan or during the automatic malware removal.
  • Bug fixed: The number of email notifications might be incorrectly limited to one email per hour.
  • Read more
Download this release

Release Info

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

Code changes from version 7.9 to 7.9.3

assets/admin.css CHANGED
@@ -274,12 +274,12 @@
274
  color: #222;
275
  }
276
 
277
- #crb-traffic td:nth-child(2),
278
  #crb-traffic td:nth-child(4),
279
  #crb-activity td:nth-child(2),
280
  #crb-activity td:nth-child(5){
281
  word-break: break-all;
282
- }
283
  #crb-traffic td{
284
  vertical-align: top;
285
  /*word-break: break-all;*/
@@ -413,7 +413,7 @@ td.crb-traffic-details div{
413
 
414
  #activity-filter div:first-child {
415
  float: left;
416
- max-width: 85%;
417
  margin-bottom: 1em;
418
  }
419
  #activity-filter div:nth-child(2) {
@@ -527,6 +527,11 @@ p.act-url{
527
  border-left: 4px solid rgba(0, 0, 0, .25);
528
  }
529
 
 
 
 
 
 
530
  /* Pagination links */
531
 
532
  .pagination {
274
  color: #222;
275
  }
276
 
277
+ /*#crb-traffic td:nth-child(2),
278
  #crb-traffic td:nth-child(4),
279
  #crb-activity td:nth-child(2),
280
  #crb-activity td:nth-child(5){
281
  word-break: break-all;
282
+ }*/
283
  #crb-traffic td{
284
  vertical-align: top;
285
  /*word-break: break-all;*/
413
 
414
  #activity-filter div:first-child {
415
  float: left;
416
+ max-width: 80%;
417
  margin-bottom: 1em;
418
  }
419
  #activity-filter div:nth-child(2) {
527
  border-left: 4px solid rgba(0, 0, 0, .25);
528
  }
529
 
530
+ .crb-country {
531
+ padding-left: 24px;
532
+ white-space: nowrap;
533
+ }
534
+
535
  /* Pagination links */
536
 
537
  .pagination {
cerber-lab.php CHANGED
@@ -2,7 +2,8 @@
2
  /*
3
  Cerber Laboratory (cerberlab.net) specific routines.
4
 
5
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
6
 
7
  Licenced under the GNU GPL.
8
 
@@ -551,7 +552,7 @@ function lab_is_cloud_ok(){
551
  */
552
  function lab_save_push( $ip, $reason_id, $details ) {
553
  $ip = filter_var( $ip, FILTER_VALIDATE_IP );
554
- if ( ! $ip || is_ip_private( $ip ) || cerber_acl_check( $ip, 'W' ) || ! ( crb_get_settings( 'cerberlab' ) || lab_lab() ) ) {
555
  return;
556
  }
557
  $reason_id = absint( $reason_id );
2
  /*
3
  Cerber Laboratory (cerberlab.net) specific routines.
4
 
5
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
6
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
7
 
8
  Licenced under the GNU GPL.
9
 
552
  */
553
  function lab_save_push( $ip, $reason_id, $details ) {
554
  $ip = filter_var( $ip, FILTER_VALIDATE_IP );
555
+ if ( ! $ip || is_ip_private( $ip ) || crb_acl_is_white( $ip ) || ! ( crb_get_settings( 'cerberlab' ) || lab_lab() ) ) {
556
  return;
557
  }
558
  $reason_id = absint( $reason_id );
cerber-load.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
- Copyright (C) 2015-18 Gregory Markov, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -91,6 +91,7 @@ define( 'CERBER_AGGRESSIVE', 1 );
91
  require_once( dirname( __FILE__ ) . '/cerber-pluggable.php' );
92
  require_once( dirname( __FILE__ ) . '/common.php' );
93
  require_once( dirname( __FILE__ ) . '/settings.php' );
 
94
  require_once( dirname( __FILE__ ) . '/cerber-lab.php' );
95
  require_once( dirname( __FILE__ ) . '/whois.php' );
96
  require_once( dirname( __FILE__ ) . '/jetflow.php' );
@@ -195,8 +196,9 @@ class WP_Cerber {
195
  return $this->uri_prohibited;
196
  }
197
 
198
- if ( cerber_acl_check() == 'W' ) {
199
  $this->uri_prohibited = false;
 
200
  return false;
201
  }
202
 
@@ -212,7 +214,7 @@ class WP_Cerber {
212
  if ( !empty( $this->options['wplogin'] ) ) {
213
  $cerber_status = 19;
214
  cerber_log( 50 );
215
- cerber_soft_block_add( $this->remote_ip, 2, $script );
216
  $this->uri_prohibited = true;
217
  return true;
218
  }
@@ -266,7 +268,7 @@ class WP_Cerber {
266
  $deny = false;
267
  $act = 18;
268
  if ( cerber_is_http_post() ) {
269
- if ( ! cerber_is_allowed( null, array( 1, 3 ) ) ) {
270
  $deny = true;
271
  $act = 18;
272
  }
@@ -657,7 +659,7 @@ class WP_Cerber {
657
  cerber_log( 40 );
658
  if ($this->options['recaptcha-period'] && $this->options['recaptcha-number'] && $this->options['recaptcha-within']) {
659
  $remain = cerber_get_remain_count($this->remote_ip , true, array( 40 ), $this->options['recaptcha-number'], $this->options['recaptcha-within']);
660
- if ($remain < 1) cerber_block_add( $this->remote_ip, 5 );
661
  }
662
  }
663
 
@@ -867,7 +869,7 @@ function cerber_extra_vision() {
867
  if ( ! empty( $black_logged ) && cerber_is_allowed() ) {
868
  $remain = cerber_get_remain_count( $ip, true, $black ); // @since 6.7.5
869
  if ( $remain < 1 ) {
870
- cerber_soft_block_add( $ip, 7 );
871
  $cerber_status = 18;
872
 
873
  return true;
@@ -927,8 +929,8 @@ function cerber_is_login_request() {
927
  $ret = true;
928
  }
929
  }
930
- //elseif ( strtolower( cerber_parse_uri( true ) ) == WP_LOGIN_SCRIPT ) {
931
- elseif ( cerber_get_uri_script() == WP_LOGIN_SCRIPT ) {
932
  $ret = true;
933
  }
934
 
@@ -991,7 +993,7 @@ function cerber_auth_control( $user, $username, $password ) {
991
  //if ( $wp_cerber->isProhibited( $username ) ) {
992
  if ( $username && cerber_is_prohibited( $username ) ) {
993
  cerber_log( 52, $username );
994
- cerber_block_add( null, 4, $username );
995
 
996
  // Create with message that is identical default WP
997
  return new WP_Error( 'incorrect_password', sprintf(
@@ -1139,10 +1141,10 @@ function cerber_login_failed( $user_login ) {
1139
  }
1140
 
1141
  if ( $no_user && $wp_cerber->getSettings( 'nonusers' ) ) {
1142
- cerber_block_add( $ip, 3, $user_login); // @since 5.7
1143
  }
1144
  elseif ( cerber_get_remain_count($ip, false) < 1 ) { //Limit on the number of login attempts is reached
1145
- cerber_block_add( $ip, 1, '', null, false);
1146
  }
1147
 
1148
  }
@@ -1186,10 +1188,10 @@ function cerber_failed_work($ip, $acl, $no_user, $user_login){
1186
  }
1187
 
1188
  if ( $no_user && $wp_cerber->getSettings( 'nonusers' ) ) {
1189
- cerber_block_add( $ip, 3, $user_login );
1190
  }
1191
  elseif ( cerber_get_remain_count($ip, false) <= 1 ) { //Limit on the number of login attempts is reached
1192
- cerber_block_add( $ip, 1, '', null, false);
1193
  }
1194
  }
1195
 
@@ -1198,51 +1200,56 @@ function cerber_failed_work($ip, $acl, $no_user, $user_login){
1198
  function cerber_is_registration_prohibited( $sanitized_user_login ) {
1199
  global $wp_cerber, $cerber_status;
1200
 
 
 
 
 
 
1201
  $code = null;
1202
  $msg = null;
1203
 
1204
- if (crb_is_reg_limit_reached()){
1205
  $cerber_status = 17;
1206
- cerber_log(54);
1207
  $code = 'ip_denied';
1208
- $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1209
- apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1210
- }
1211
- elseif ( cerber_is_bot('botsreg') ) {
1212
- cerber_log(54); // TODO should be separate code to detect bot activity?
1213
  $code = 'bot_detected';
1214
- $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1215
- apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1216
  }
1217
  elseif ( ! $wp_cerber->reCaptchaValidate() ) {
1218
  $code = 'incorrect_recaptcha';
1219
- $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1220
- $wp_cerber->reCaptchaMsg('register');
1221
  }
1222
  elseif ( cerber_is_prohibited( $sanitized_user_login ) ) {
1223
  $code = 'prohibited_login';
1224
- $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1225
- apply_filters( 'cerber_msg_prohibited', __( 'Username is not allowed. Please choose another one.', 'wp-cerber' ), 'register' );
1226
  }
1227
- elseif ( !cerber_is_allowed() || lab_is_blocked($wp_cerber->getRemoteIp()) ) {
1228
- cerber_log(54);
1229
  $code = 'ip_denied';
1230
- $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1231
- apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1232
  }
1233
  elseif ( ! cerber_geo_allowed( 'geo_register' ) ) {
1234
  $cerber_status = 16; // TODO: refactor cerber_log, include this status as a second parameter
1235
- cerber_log(54); // TODO should be separate code?
1236
  $code = 'country_denied';
1237
- $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1238
- apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1239
  }
1240
 
1241
  if ( $code ) {
1242
  return array( $code, $msg );
1243
  }
1244
 
1245
- return null;
1246
  }
1247
 
1248
  /**
@@ -1282,9 +1289,9 @@ function cerber_pre_new_user( $errors, $sanitized_user_login, $user_email ) {
1282
 
1283
  $prohibited = cerber_is_registration_prohibited( $sanitized_user_login );
1284
 
1285
- if ($prohibited){
1286
- return new WP_Error($prohibited[0], $prohibited[1]);
1287
- }
1288
 
1289
  return $errors;
1290
  }
@@ -1442,7 +1449,7 @@ function cerber_is_comment_allowed(){
1442
  }
1443
  elseif ( cerber_is_bot('botscomm') ) {
1444
  $remain = cerber_get_remain_count( null, true, array( 16 ), 3, 60 );
1445
- if ($remain < 1) cerber_block_add( null, 6, '', 60 );
1446
  $deny = 16;
1447
  }
1448
  elseif ( ! $wp_cerber->reCaptchaValidate( 'comment' , true ) ) {
@@ -1562,9 +1569,7 @@ function cerber_access_control() {
1562
  return;
1563
  }
1564
 
1565
- // IPs from the White List are allowed
1566
- $acl = cerber_acl_check();
1567
- if ( $acl == 'W' ) {
1568
  return;
1569
  }
1570
 
@@ -1638,7 +1643,7 @@ function cerber_access_control() {
1638
  function cerber_post_control() {
1639
  global $cerber_status;
1640
 
1641
- if ( ! cerber_is_http_post() || cerber_acl_check( null, 'W' ) ) {
1642
  return;
1643
  }
1644
 
@@ -1738,7 +1743,8 @@ function cerber_is_antibot_exception(){
1738
 
1739
  if ( class_exists( 'WooCommerce' ) ) {
1740
  if ( cerber_is_permalink_enabled() ) {
1741
- if ( 0 === strpos( cerber_get_site_root() . cerber_purify_uri(), get_home_url() . '/wc-api/' ) ) {
 
1742
  return true;
1743
  }
1744
  }
@@ -1774,12 +1780,16 @@ function cerber_antibot_mode() {
1774
 
1775
  }
1776
 
 
 
 
 
1777
  // Check for third party exceptions
1778
 
1779
  if ( class_exists( 'WooCommerce' ) ) {
1780
 
1781
- if ( !empty( $_GET['wc-ajax'] ) &&
1782
- $_GET['wc-ajax'] == 'get_refreshed_fragments' &&
1783
  count( $_GET ) == 1 &&
1784
  empty( $_POST )
1785
  ) {
@@ -1788,7 +1798,8 @@ function cerber_antibot_mode() {
1788
  }
1789
 
1790
  if ( cerber_is_permalink_enabled() ) {
1791
- if ( function_exists( 'wc_get_page_id' ) && 0 === strpos( cerber_get_site_root() . cerber_purify_uri(), get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
 
1792
  return 2;
1793
  }
1794
  }
@@ -1800,13 +1811,10 @@ function cerber_antibot_mode() {
1800
  }
1801
 
1802
  if ( class_exists( 'GFForms' ) ) {
1803
- if ( !empty( $_GET['gf_page'] ) &&
1804
- count( $_POST ) == 4 &&
1805
- count( $_FILES ) == 1 &&
1806
- ! empty( $_POST['name'] ) &&
1807
- ! empty( $_POST['form_id'] ) &&
1808
- ! empty( $_POST['field_id'] ) &&
1809
- ! empty( $_POST['gform_unique_id'] )
1810
  ) {
1811
 
1812
  return 2;
@@ -2222,8 +2230,7 @@ function cerber_geo_allowed( $rule_id = '' ) {
2222
  return true;
2223
  }
2224
 
2225
- $tag = cerber_acl_check();
2226
- if ( $tag == 'W' ) {
2227
  return true;
2228
  }
2229
 
@@ -2487,8 +2494,8 @@ function cerber_block_add( $ip = '', $reason_id = 1, $details = '', $duration =
2487
  $result = cerber_db_query( 'INSERT INTO ' . CERBER_BLOCKS_TABLE . ' (ip,block_until,reason,reason_id) VALUES ("' . $ip . '",' . $until . ',"' . $reason . '",' . absint( $reason_id ) . ')' );
2488
 
2489
  if ( $result ) {
 
2490
  cerber_log( $activity, null, null, $ip_address );
2491
- $cerber_blocked = true;
2492
  $wp_cerber->setLocked();
2493
  do_action( 'cerber_ip_locked', array( 'IP' => $ip_address, 'reason' => $reason ) );
2494
  $result = true;
@@ -2622,7 +2629,7 @@ function cerber_get_remain_count( $ip = '', $check_acl = true, $activity = array
2622
  $allowed = absint( crb_get_settings( 'attempts' ) );
2623
  }
2624
 
2625
- if ( $check_acl && cerber_acl_check( $ip, 'W' ) ) {
2626
  return $allowed; // whitelist = infinity attempts
2627
  }
2628
 
@@ -2877,16 +2884,39 @@ function cerber_can_be_listed( $ip, $list = 'B' ) {
2877
  return true;
2878
  }
2879
 
2880
- function cerber_is_acl_permit( $ip = '' ) {
2881
- $tag = cerber_acl_check( $ip );
2882
- if ( $tag == 'W' ) {
 
 
 
 
 
 
 
2883
  return true;
2884
  }
2885
- if ( $tag == 'B' ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
2886
  return false;
2887
  }
 
 
 
2888
 
2889
- return true;
2890
  }
2891
 
2892
  /**
@@ -2922,7 +2952,7 @@ function cerber_acl_check( $ip = null, $tag = '' ) {
2922
  $long = ip2long( $ip );
2923
 
2924
  if ( $tag ) {
2925
- if ( $tag != 'W' && $tag != 'B' ) {
2926
  $ret = false;
2927
  }
2928
  elseif ( cerber_db_get_var( 'SELECT ip FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin <= '.$long.' AND '.$long.' <= ip_long_end AND tag = "'.$tag.'" LIMIT 1' ) ) {
@@ -2989,17 +3019,6 @@ function cerber_acl_checkV6( $ip = null, $tag = '' ) {
2989
  }
2990
  }
2991
 
2992
-
2993
- function crb_acl_is_white( $ip = null ){
2994
-
2995
- $acl = cerber_acl_check( $ip );
2996
- if ( $acl == 'W' ) {
2997
- return true;
2998
- }
2999
-
3000
- return false;
3001
- }
3002
-
3003
  /*
3004
  * Logging directly to the file
3005
  *
@@ -3371,14 +3390,14 @@ function cerber_send_email( $type = '', $msg = '', $ip = '' ) {
3371
  if ( $type == 'lockout' && ! is_admin() ) {
3372
  $rate = absint( $wp_cerber->getSettings( 'emailrate' ) );
3373
  if ( $rate ) {
3374
- $last_em = cerber_get_set( '_cerber_last' );
3375
  $period = 60 * 60; // per hour
3376
  if ( $last_em ) {
3377
  if ( $last_em > ( time() - $period / $rate ) ) {
3378
  return false;
3379
  }
3380
  }
3381
- cerber_update_set( '_cerber_last', time(), 1, 0, time() + $period );
3382
  }
3383
  }
3384
 
@@ -3666,7 +3685,7 @@ function cerber_generate_report($period = 7){
3666
  // Maintenance routines ----------------------------------------------------------------
3667
 
3668
  function cerber_init_cron(){
3669
- $next_hour = floor( ( time() + 3600 ) / 3600 ) * 3600;
3670
 
3671
  if ( ! wp_next_scheduled( 'cerber_hourly_1' ) ) {
3672
  wp_schedule_event( $next_hour, 'hourly', 'cerber_hourly_1' );
@@ -3685,11 +3704,16 @@ add_action( 'cerber_hourly_1', 'cerber_do_hourly' );
3685
  function cerber_do_hourly( $force = false ) {
3686
  global $wpdb, $wp_cerber;
3687
 
 
 
 
3688
  // Avoid multiple executions on a weird hosting
3689
- if ( ( $hour = get_site_transient( 'crb_hourly_1' ) ) && $hour == date( 'G' ) ) {
3690
  return;
3691
  }
3692
 
 
 
3693
  if ( is_multisite() ) {
3694
  if ( ! $force && get_site_transient( 'cerber_multisite' ) ) {
3695
  return;
@@ -3697,11 +3721,7 @@ function cerber_do_hourly( $force = false ) {
3697
  set_site_transient( 'cerber_multisite', 'executed', 3600 );
3698
  }
3699
 
3700
- if ( crb_get_settings( 'cerberlab' ) || lab_lab() ) {
3701
- lab_check_nodes( true, true );
3702
- }
3703
-
3704
- $time = time();
3705
  $days = absint( crb_get_settings( 'keeplog' ) );
3706
  if ( $days > 0 ) {
3707
  $wpdb->query( 'DELETE FROM ' . CERBER_LOG_TABLE . ' WHERE stamp < ' . ( $time - $days * 24 * 3600 ) );
@@ -3711,8 +3731,6 @@ function cerber_do_hourly( $force = false ) {
3711
  $wpdb->query( 'DELETE FROM ' . CERBER_TRAF_TABLE . ' WHERE stamp < ' . ( $time - $days * 24 * 3600 ) );
3712
  }
3713
 
3714
- cerber_push_lab();
3715
-
3716
  $wpdb->query( 'DELETE FROM ' . CERBER_LAB_IP_TABLE . ' WHERE expires < ' . $time );
3717
 
3718
  if ( $wp_cerber->getSettings( 'trashafter-enabled') && absint($wp_cerber->getSettings('trashafter'))) {
@@ -3729,19 +3747,22 @@ function cerber_do_hourly( $force = false ) {
3729
 
3730
  cerber_up_data();
3731
 
3732
- // A protection if admin forgot to turn it off
3733
  cerber_truncate_log();
3734
 
3735
- set_site_transient( 'crb_hourly_1', date( 'G' ) , 3600 );
3736
  }
3737
 
3738
  add_action( 'cerber_hourly_2', function () {
 
 
3739
 
3740
- // Avoid multiple executions on a weird hosting
3741
- if ( ( $hour = get_site_transient( 'crb_hourly_2' ) ) && $hour == date( 'G' ) ) {
3742
  return;
3743
  }
3744
 
 
 
3745
  $gmt_offset = get_option( 'gmt_offset' ) * 3600;
3746
 
3747
  if ( crb_get_settings( 'enable-report' )
@@ -3775,6 +3796,12 @@ add_action( 'cerber_hourly_2', function () {
3775
  }
3776
  }
3777
 
 
 
 
 
 
 
3778
  cerber_cloud_sync();
3779
 
3780
  // Simply keep folder locked
@@ -3782,18 +3809,19 @@ add_action( 'cerber_hourly_2', function () {
3782
 
3783
  cerber_db_query( 'DELETE FROM ' . CERBER_QMEM_TABLE . ' WHERE stamp < ' . ( time() - 30 * 60 ) );
3784
 
3785
- set_site_transient( 'crb_hourly_2', date( 'G' ) , 3600 );
3786
  });
3787
 
3788
  add_action( 'cerber_daily', 'cerber_do_daily' );
3789
  function cerber_do_daily() {
 
 
 
3790
 
3791
  cerber_do_hourly( true );
3792
 
3793
  $time = time();
3794
 
3795
- lab_trunc_push();
3796
-
3797
  lab_validate_lic();
3798
 
3799
  cerber_db_query( 'DELETE FROM ' . CERBER_LAB_NET_TABLE . ' WHERE expires < ' . $time );
@@ -3827,7 +3855,7 @@ function cerber_do_daily() {
3827
  // TODO: implement holding previous values for a while
3828
  // cerber_antibot_gene();
3829
 
3830
- set_site_transient( 'crb_daily_1', date( 'j' ) , 24 * 3600 );
3831
  }
3832
 
3833
  /**
@@ -3842,8 +3870,9 @@ function cerber_do_daily() {
3842
  * @since 3.0
3843
  */
3844
  function cerber_log( $activity, $login = '', $user_id = 0, $ip = null ) {
3845
- global $wpdb, $user_ID, $cerber_logged;
3846
  static $logged = array();
 
3847
  $wp_cerber = get_wp_cerber();
3848
 
3849
  $activity = absint( $activity );
@@ -3874,17 +3903,12 @@ function cerber_log( $activity, $login = '', $user_id = 0, $ip = null ) {
3874
  }
3875
 
3876
  if ( empty( $user_id ) ) {
3877
- if ( $user_ID ) {
3878
- $user_id = $user_ID;
3879
- }
3880
- else {
3881
- $user_ID = 0;
3882
- }
3883
  }
3884
 
3885
  $user_id = absint( $user_id );
3886
 
3887
- $stamp = cerber_request_time();
3888
 
3889
  $pos = strpos($_SERVER['REQUEST_URI'],'?');
3890
  if ($pos) {
@@ -3895,42 +3919,26 @@ function cerber_log( $activity, $login = '', $user_id = 0, $ip = null ) {
3895
  }
3896
  $url = strip_tags($_SERVER['HTTP_HOST'] . $path);
3897
 
3898
- $why = 0;
3899
- if ($activity != 10 && $activity != 11) {
3900
- $why = cerber_get_status($ip);
3901
  }
 
 
 
3902
 
3903
- $details = $why .'|0|0|0|'. $url;
3904
 
3905
  $country = lab_get_country( $ip );
3906
 
3907
- /*
3908
- $ret = $wpdb->query( $wpdb->prepare( 'INSERT INTO ' . CERBER_LOG_TABLE . ' (ip, ip_long, user_login, user_id, stamp, activity, session_id, country, details) VALUES (%s,%d,%s,%d,%f,%d,%s,%s,%s)', $ip, $ip_long, $login, $user_id, $stamp, $activity, $wp_cerber->getSessionID(), $country, $details ) );
3909
- if ( ! $ret ) {
3910
- // workaround for a WP bugs like this: WP silently doesn't not insert a row into a table
3911
- // https://core.trac.wordpress.org/ticket/32315
3912
- $ret = $wpdb->insert( CERBER_LOG_TABLE, array(
3913
- 'ip' => $ip,
3914
- 'ip_long' => $ip_long,
3915
- 'user_login' => $login,
3916
- 'user_id' => $user_id,
3917
- 'stamp' => $stamp,
3918
- 'activity' => $activity,
3919
- 'session_id' => $wp_cerber->getSessionID(),
3920
- 'country' => $country,
3921
- 'details' => $details,
3922
- ), array( '%s', '%d', '%s', '%d', '%f', '%d' ) );
3923
- }*/
3924
-
3925
- // @since 6.3
3926
  $login = cerber_real_escape( $login );
3927
  $details = cerber_real_escape( $details );
3928
- $ret = cerber_db_query('INSERT INTO ' . CERBER_LOG_TABLE . ' (ip, ip_long, user_login, user_id, stamp, activity, session_id, country, details)
3929
- VALUES ("'.$ip.'",'.$ip_long.',"'.$login.'",'.$user_id.',"'.$stamp.'",'.$activity.',"'.$wp_cerber->getSessionID().'","'.$country.'","'.$details.'")' );
3930
 
3931
  if ( ! $ret ) {
3932
- cerber_watchdog();
3933
- }
3934
 
3935
  // Subscriptions - notifications for admin ---------------------------------------------------
3936
 
@@ -4857,31 +4865,86 @@ function cerber_foo() {
4857
  }
4858
 
4859
  register_shutdown_function( function () {
4860
- global $cerber_db_errors, $cerber_status;
4861
- $locked = cerber_extra_vision();
4862
 
4863
- // Error monitoring
4864
- if ( crb_get_settings( 'tienabled' ) && crb_get_settings( 'tierrmon' ) ) {
4865
- if ( ( 400 <= http_response_code() ) && ( cerber_get_non_wp_fields() || cerber_is_http_post() ) ) {
4866
- $ip = cerber_get_remote_ip();
4867
- cerber_db_query( 'INSERT INTO ' . CERBER_QMEM_TABLE . ' (ip, http_code, stamp)
4868
- VALUES ("' . $ip . '",' . intval( http_response_code() ) . ',' . time() . ')' );
4869
 
4870
- if ( ! $locked ) {
4871
- $t = time() - 900;
4872
- $c = cerber_db_get_var( 'SELECT COUNT(ip) FROM ' . CERBER_QMEM_TABLE . ' WHERE ip = "' . $ip . '" AND stamp > ' . $t );
4873
- if ( $c >= 3 ) {
4874
- cerber_soft_block_add( $ip, 11 );
4875
- $cerber_status = 18;
4876
- }
4877
- }
4878
- }
4879
  }
4880
 
4881
  cerber_push_lab();
4882
  cerber_traffic_log();
4883
  } );
4884
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4885
  function cerber_catch_error( $errno, $errstr = null, $errfile = null, $errline = null ) {
4886
  global $cerber_php_errors;
4887
  if ( ! $errno ) {
@@ -5077,15 +5140,13 @@ function cerber_traffic_log(){
5077
  else {
5078
  $i ++;
5079
  }
5080
- if ( $i > 15 ) { // Save no more errors
5081
  break;
5082
  }
5083
  }
5084
  if ( $cerber_php_errors ) {
5085
  $cerber_php_errors = array_values( $cerber_php_errors );
5086
- if ( $i > 15 ) {
5087
- $cerber_php_errors = array_slice( $cerber_php_errors, 0, 15 );
5088
- }
5089
  $php_err = serialize( $cerber_php_errors );
5090
  }
5091
  }
@@ -5093,13 +5154,13 @@ function cerber_traffic_log(){
5093
 
5094
  // Timestamps
5095
  if ( ! empty( $wp_cerber_start_stamp ) && is_numeric( $wp_cerber_start_stamp ) ) {
5096
- $stamp = (float) $wp_cerber_start_stamp; // define this variable: $wp_cerber_start_stamp = microtime( true ); in wp-config.php
5097
  }
5098
  else {
5099
- $stamp = cerber_request_time();
5100
  }
5101
 
5102
- $processing = (int) ( 1000 * ( microtime( true ) - $stamp ) );
5103
 
5104
  $uri = cerber_real_escape( $uri );
5105
  $fields = cerber_real_escape( $fields );
@@ -5108,7 +5169,7 @@ function cerber_traffic_log(){
5108
 
5109
  $query = 'INSERT INTO ' . CERBER_TRAF_TABLE . '
5110
  (ip, ip_long, uri, request_fields , request_details, session_id, user_id, stamp, processing, request_method, http_code, wp_id, wp_type, is_bot, blog_id, php_errors )
5111
- VALUES ("' . $ip . '", ' . $ip_long . ',"' . $uri . '","' . $fields . '","' . $details . '", "' . $session_id . '", ' . $user_id . ', ' . $stamp . ',' . $processing . ', "' . $method . '", ' . $http_code . ',' . $wp_id . ', ' . $wp_type . ', ' . $bot . ', ' . absint( $blog_id ) . ',"' . $php_err . '")';
5112
 
5113
  $ret = cerber_db_query( $query );
5114
 
@@ -5141,24 +5202,27 @@ function cerber_traffic_log(){
5141
  * @return bool
5142
  * @since 6.0
5143
  */
5144
- function cerber_to_log($wp_type, $http_code, $user_id){
5145
- global $cerber_logged, $cerber_blocked, $wp_cerber;
5146
 
5147
  $mode = crb_get_settings( 'timode' );
5148
 
5149
- if ($mode == 0) {
5150
  return false;
5151
  }
5152
- if ($mode == 2) {
5153
- if ($wp_type < 515) { // Pure admin requests
5154
  if ( $wp_type < 502 && ! $user_id ) { // @since 6.3
5155
  return true;
5156
  }
5157
- if ( $wp_type == 500 && 'admin-ajax.php' != cerber_get_uri_script() ) { // @since 7.8
 
5158
  return true;
5159
  }
 
5160
  return false;
5161
  }
 
5162
  return true;
5163
  }
5164
 
@@ -5177,30 +5241,31 @@ function cerber_to_log($wp_type, $http_code, $user_id){
5177
  return true;
5178
  }
5179
 
5180
- if ($wp_type < 515) {
5181
  if ( $wp_type < 502 && ! $user_id ) { // @since 6.3
5182
  if ( ! empty( $_GET ) || ! empty( $_POST ) || ! empty( $_FILES ) ) {
5183
- return true;
5184
- }
5185
  }
5186
- if ( $wp_type == 500 && 'admin-ajax.php' != cerber_get_uri_script() ) { // @since 7.8
5187
  return true;
5188
  }
 
5189
  return false;
5190
- }
5191
 
5192
  if ( $http_code >= 400 ||
5193
- $wp_type < 600 ||
5194
  $user_id ||
5195
- cerber_is_http_post() ||
5196
  ! empty( $_POST ) ||
5197
  ! empty( $_FILES ) ||
5198
- isset($_GET['s']) ||
5199
- cerber_get_non_wp_fields()){
5200
  return true;
5201
  }
5202
 
5203
- if ( cerber_get_uri_script() ) {
 
5204
  return true;
5205
  }
5206
 
@@ -5310,13 +5375,17 @@ function cerber_get_non_wp_fields( $fields = array() ) {
5310
  if ( is_object( $wp_query ) ) {
5311
  $keys = $wp_query->fill_query_vars( array() );
5312
  }
5313
- else {
5314
  $tmp = new WP_Query();
5315
  $keys = $tmp->fill_query_vars( array() );
5316
  }
 
 
 
5317
 
5318
  $wp_keys = array_keys( $keys ); // WordPress GET fields for frontend
5319
 
 
5320
  $wp_keys[] = 'redirect_to';
5321
  $wp_keys[] = 'reauth';
5322
  $wp_keys[] = 'action';
@@ -5368,7 +5437,7 @@ function cerber_beast() {
5368
 
5369
  // TI --------------------------------------------------------------------
5370
 
5371
- if ( ! crb_get_settings( 'tienabled' ) ) {
5372
  return;
5373
  }
5374
 
@@ -5378,8 +5447,8 @@ function cerber_beast() {
5378
  }
5379
 
5380
  // White list by URI
5381
- $uri = cerber_purify_uri();
5382
-
5383
  if ( $tiwhite = crb_get_settings( 'tiwhite' ) ) {
5384
  foreach ( (array) $tiwhite as $item ) {
5385
  if ( substr( $item, 0, 1 ) == '{' && substr( $item, - 1 ) == '}' ) {
@@ -5398,27 +5467,28 @@ function cerber_beast() {
5398
  $wp_cerber->InspectRequest();
5399
 
5400
  // Step two
5401
- $uri_script = cerber_get_uri_script();
 
5402
 
5403
  if ( $uri_script && $script_filename = cerber_script_filename() ) {
5404
  // Scanning for executable scripts?
5405
  if ( ! cerber_script_exists( $uri ) && ! cerber_is_login_request() ) {
5406
- /*if ( crb_get_settings( 'tiipwhite' ) && crb_acl_is_white() ) {
5407
- return;
5408
- }*/
5409
  $cerber_status = 19;
5410
  cerber_log( 55 );
5411
- cerber_soft_block_add( null, 8 );
 
 
5412
  cerber_forbidden_page();
5413
  }
5414
  // Direct access to a PHP script
5415
- if ( ! in_array( $uri_script, cerber_get_wp_scripts() ) ) {
5416
- $deny = false;
5417
- if ( ! cerber_is_acl_permit() ) {
5418
- $deny = true;
5419
- $cerber_status = 14;
5420
- }
5421
- elseif ( ! cerber_is_allowed() ) {
 
5422
  $deny = true;
5423
  $cerber_status = 13;
5424
  }
@@ -5426,10 +5496,10 @@ function cerber_beast() {
5426
  $deny = true;
5427
  $cerber_status = 15;
5428
  }
5429
- if ( $deny ) {
5430
- cerber_log( 50 );
5431
- cerber_forbidden_page();
5432
- }
5433
  }
5434
  }
5435
 
@@ -5456,7 +5526,7 @@ function cerber_screen_request_fields(){
5456
  }
5457
 
5458
  if ( ! empty( $_POST ) && ! $found ) {
5459
- if ( WP_COMMENT_SCRIPT == cerber_get_uri_script() ) {
5460
  $white = array( 'comment' );
5461
  }
5462
  $cerber_in_context = 2;
@@ -5465,7 +5535,7 @@ function cerber_screen_request_fields(){
5465
 
5466
  if ( $found ) {
5467
  cerber_log( $found );
5468
- cerber_soft_block_add( null, 9);
5469
  cerber_forbidden_page();
5470
  }
5471
  }
@@ -5808,7 +5878,7 @@ function cerber_inspect_uploads() {
5808
 
5809
  if ( $found ) {
5810
  cerber_log( $found );
5811
- cerber_soft_block_add( null, 10);
5812
  }
5813
 
5814
  return $found;
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
91
  require_once( dirname( __FILE__ ) . '/cerber-pluggable.php' );
92
  require_once( dirname( __FILE__ ) . '/common.php' );
93
  require_once( dirname( __FILE__ ) . '/settings.php' );
94
+ include_once( dirname( __FILE__ ) . '/cerber-request.php' );
95
  require_once( dirname( __FILE__ ) . '/cerber-lab.php' );
96
  require_once( dirname( __FILE__ ) . '/whois.php' );
97
  require_once( dirname( __FILE__ ) . '/jetflow.php' );
196
  return $this->uri_prohibited;
197
  }
198
 
199
+ if ( crb_acl_is_white() ) {
200
  $this->uri_prohibited = false;
201
+
202
  return false;
203
  }
204
 
214
  if ( !empty( $this->options['wplogin'] ) ) {
215
  $cerber_status = 19;
216
  cerber_log( 50 );
217
+ cerber_soft_block_add( $this->remote_ip, 702, $script );
218
  $this->uri_prohibited = true;
219
  return true;
220
  }
268
  $deny = false;
269
  $act = 18;
270
  if ( cerber_is_http_post() ) {
271
+ if ( ! cerber_is_allowed( null, array( 701, 703, 704 ) ) ) {
272
  $deny = true;
273
  $act = 18;
274
  }
659
  cerber_log( 40 );
660
  if ($this->options['recaptcha-period'] && $this->options['recaptcha-number'] && $this->options['recaptcha-within']) {
661
  $remain = cerber_get_remain_count($this->remote_ip , true, array( 40 ), $this->options['recaptcha-number'], $this->options['recaptcha-within']);
662
+ if ($remain < 1) cerber_block_add( $this->remote_ip, 705 );
663
  }
664
  }
665
 
869
  if ( ! empty( $black_logged ) && cerber_is_allowed() ) {
870
  $remain = cerber_get_remain_count( $ip, true, $black ); // @since 6.7.5
871
  if ( $remain < 1 ) {
872
+ cerber_soft_block_add( $ip, 707 );
873
  $cerber_status = 18;
874
 
875
  return true;
929
  $ret = true;
930
  }
931
  }
932
+ //elseif ( cerber_get_uri_script() == WP_LOGIN_SCRIPT ) {
933
+ elseif ( CRB_Request::is_script( '/' . WP_LOGIN_SCRIPT ) ) {
934
  $ret = true;
935
  }
936
 
993
  //if ( $wp_cerber->isProhibited( $username ) ) {
994
  if ( $username && cerber_is_prohibited( $username ) ) {
995
  cerber_log( 52, $username );
996
+ cerber_block_add( null, 704, $username );
997
 
998
  // Create with message that is identical default WP
999
  return new WP_Error( 'incorrect_password', sprintf(
1141
  }
1142
 
1143
  if ( $no_user && $wp_cerber->getSettings( 'nonusers' ) ) {
1144
+ cerber_block_add( $ip, 703, $user_login); // @since 5.7
1145
  }
1146
  elseif ( cerber_get_remain_count($ip, false) < 1 ) { //Limit on the number of login attempts is reached
1147
+ cerber_block_add( $ip, 701, '', null, false);
1148
  }
1149
 
1150
  }
1188
  }
1189
 
1190
  if ( $no_user && $wp_cerber->getSettings( 'nonusers' ) ) {
1191
+ cerber_block_add( $ip, 703, $user_login );
1192
  }
1193
  elseif ( cerber_get_remain_count($ip, false) <= 1 ) { //Limit on the number of login attempts is reached
1194
+ cerber_block_add( $ip, 701, '', null, false);
1195
  }
1196
  }
1197
 
1200
  function cerber_is_registration_prohibited( $sanitized_user_login ) {
1201
  global $wp_cerber, $cerber_status;
1202
 
1203
+ /*
1204
+ if ( crb_acl_is_white() ) {
1205
+ return false;
1206
+ }*/
1207
+
1208
  $code = null;
1209
  $msg = null;
1210
 
1211
+ if ( crb_is_reg_limit_reached() ) {
1212
  $cerber_status = 17;
1213
+ cerber_log( 54 );
1214
  $code = 'ip_denied';
1215
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1216
+ apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1217
+ }
1218
+ elseif ( cerber_is_bot( 'botsreg' ) ) {
1219
+ cerber_log( 54 ); // TODO should be separate code to detect bot activity?
1220
  $code = 'bot_detected';
1221
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1222
+ apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1223
  }
1224
  elseif ( ! $wp_cerber->reCaptchaValidate() ) {
1225
  $code = 'incorrect_recaptcha';
1226
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1227
+ $wp_cerber->reCaptchaMsg( 'register' );
1228
  }
1229
  elseif ( cerber_is_prohibited( $sanitized_user_login ) ) {
1230
  $code = 'prohibited_login';
1231
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1232
+ apply_filters( 'cerber_msg_prohibited', __( 'Username is not allowed. Please choose another one.', 'wp-cerber' ), 'register' );
1233
  }
1234
+ elseif ( ! cerber_is_allowed() || lab_is_blocked( $wp_cerber->getRemoteIp() ) ) {
1235
+ cerber_log( 54 );
1236
  $code = 'ip_denied';
1237
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1238
+ apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1239
  }
1240
  elseif ( ! cerber_geo_allowed( 'geo_register' ) ) {
1241
  $cerber_status = 16; // TODO: refactor cerber_log, include this status as a second parameter
1242
+ cerber_log( 54 ); // TODO should be separate code?
1243
  $code = 'country_denied';
1244
+ $msg = '<strong>' . __( 'ERROR:', 'wp-cerber' ) . ' </strong>' .
1245
+ apply_filters( 'cerber_msg_denied', __( 'You are not allowed to register.', 'wp-cerber' ), 'register' );
1246
  }
1247
 
1248
  if ( $code ) {
1249
  return array( $code, $msg );
1250
  }
1251
 
1252
+ return false;
1253
  }
1254
 
1255
  /**
1289
 
1290
  $prohibited = cerber_is_registration_prohibited( $sanitized_user_login );
1291
 
1292
+ if ( $prohibited ) {
1293
+ return new WP_Error( $prohibited[0], $prohibited[1] );
1294
+ }
1295
 
1296
  return $errors;
1297
  }
1449
  }
1450
  elseif ( cerber_is_bot('botscomm') ) {
1451
  $remain = cerber_get_remain_count( null, true, array( 16 ), 3, 60 );
1452
+ if ($remain < 1) cerber_block_add( null, 706, '', 60 );
1453
  $deny = 16;
1454
  }
1455
  elseif ( ! $wp_cerber->reCaptchaValidate( 'comment' , true ) ) {
1569
  return;
1570
  }
1571
 
1572
+ if ( crb_acl_is_white() ) {
 
 
1573
  return;
1574
  }
1575
 
1643
  function cerber_post_control() {
1644
  global $cerber_status;
1645
 
1646
+ if ( ! cerber_is_http_post() || crb_acl_is_white() ) {
1647
  return;
1648
  }
1649
 
1743
 
1744
  if ( class_exists( 'WooCommerce' ) ) {
1745
  if ( cerber_is_permalink_enabled() ) {
1746
+ //if ( 0 === strpos( cerber_get_site_root() . cerber_purify_uri(), get_home_url() . '/wc-api/' ) ) {
1747
+ if ( 0 === strpos( CRB_Request::full_url(), get_home_url() . '/wc-api/' ) ) {
1748
  return true;
1749
  }
1750
  }
1780
 
1781
  }
1782
 
1783
+ if ( cerber_get_uri_script() ) {
1784
+ return 1;
1785
+ }
1786
+
1787
  // Check for third party exceptions
1788
 
1789
  if ( class_exists( 'WooCommerce' ) ) {
1790
 
1791
+ if ( ! empty( $_GET['wc-ajax'] ) &&
1792
+ //$_GET['wc-ajax'] == 'get_refreshed_fragments' &&
1793
  count( $_GET ) == 1 &&
1794
  empty( $_POST )
1795
  ) {
1798
  }
1799
 
1800
  if ( cerber_is_permalink_enabled() ) {
1801
+ //if ( function_exists( 'wc_get_page_id' ) && 0 === strpos( cerber_get_site_root() . cerber_purify_uri(), get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
1802
+ if ( function_exists( 'wc_get_page_id' ) && 0 === strpos( CRB_Request::full_url(), get_permalink( wc_get_page_id( 'checkout' ) ) ) ) {
1803
  return 2;
1804
  }
1805
  }
1811
  }
1812
 
1813
  if ( class_exists( 'GFForms' ) ) {
1814
+ if ( count( $_GET ) == 2 &&
1815
+ ! empty( $_GET['gf_page'] ) &&
1816
+ ! empty( $_GET['id'] ) &&
1817
+ is_user_logged_in()
 
 
 
1818
  ) {
1819
 
1820
  return 2;
2230
  return true;
2231
  }
2232
 
2233
+ if ( crb_acl_is_white() ) {
 
2234
  return true;
2235
  }
2236
 
2494
  $result = cerber_db_query( 'INSERT INTO ' . CERBER_BLOCKS_TABLE . ' (ip,block_until,reason,reason_id) VALUES ("' . $ip . '",' . $until . ',"' . $reason . '",' . absint( $reason_id ) . ')' );
2495
 
2496
  if ( $result ) {
2497
+ $cerber_blocked = $reason_id;
2498
  cerber_log( $activity, null, null, $ip_address );
 
2499
  $wp_cerber->setLocked();
2500
  do_action( 'cerber_ip_locked', array( 'IP' => $ip_address, 'reason' => $reason ) );
2501
  $result = true;
2629
  $allowed = absint( crb_get_settings( 'attempts' ) );
2630
  }
2631
 
2632
+ if ( $check_acl && crb_acl_is_white( $ip ) ) {
2633
  return $allowed; // whitelist = infinity attempts
2634
  }
2635
 
2884
  return true;
2885
  }
2886
 
2887
+ /**
2888
+ * Is an IP whitelisted?
2889
+ *
2890
+ * @param $ip string
2891
+ *
2892
+ * @return bool
2893
+ */
2894
+ function crb_acl_is_white( $ip = null ){
2895
+
2896
+ if ( cerber_acl_check( $ip, 'W' ) ) {
2897
  return true;
2898
  }
2899
+
2900
+ return false;
2901
+ }
2902
+
2903
+ /**
2904
+ * Is an IP blacklisted?
2905
+ *
2906
+ * @param $ip string
2907
+ *
2908
+ * @return bool
2909
+ */
2910
+ function crb_acl_is_black( $ip = '' ) {
2911
+ $tag = cerber_acl_check( $ip );
2912
+ if ( $tag === 'W' ) {
2913
  return false;
2914
  }
2915
+ elseif ( $tag === 'B' ) {
2916
+ return true;
2917
+ }
2918
 
2919
+ return false;
2920
  }
2921
 
2922
  /**
2952
  $long = ip2long( $ip );
2953
 
2954
  if ( $tag ) {
2955
+ if ( $tag !== 'W' && $tag !== 'B' ) {
2956
  $ret = false;
2957
  }
2958
  elseif ( cerber_db_get_var( 'SELECT ip FROM ' . CERBER_ACL_TABLE . ' WHERE ip_long_begin <= '.$long.' AND '.$long.' <= ip_long_end AND tag = "'.$tag.'" LIMIT 1' ) ) {
3019
  }
3020
  }
3021
 
 
 
 
 
 
 
 
 
 
 
 
3022
  /*
3023
  * Logging directly to the file
3024
  *
3390
  if ( $type == 'lockout' && ! is_admin() ) {
3391
  $rate = absint( $wp_cerber->getSettings( 'emailrate' ) );
3392
  if ( $rate ) {
3393
+ $last_em = cerber_get_set( '_cerber_last', 1, false );
3394
  $period = 60 * 60; // per hour
3395
  if ( $last_em ) {
3396
  if ( $last_em > ( time() - $period / $rate ) ) {
3397
  return false;
3398
  }
3399
  }
3400
+ cerber_update_set( '_cerber_last', time(), 1, false, time() + $period );
3401
  }
3402
  }
3403
 
3685
  // Maintenance routines ----------------------------------------------------------------
3686
 
3687
  function cerber_init_cron(){
3688
+ $next_hour = intval( floor( ( time() + 3600 ) / 3600 ) * 3600 );
3689
 
3690
  if ( ! wp_next_scheduled( 'cerber_hourly_1' ) ) {
3691
  wp_schedule_event( $next_hour, 'hourly', 'cerber_hourly_1' );
3704
  function cerber_do_hourly( $force = false ) {
3705
  global $wpdb, $wp_cerber;
3706
 
3707
+ $t = 'cerber_hourly_1';
3708
+ $start = time();
3709
+
3710
  // Avoid multiple executions on a weird hosting
3711
+ if ( ( $last = get_site_transient( $t ) ) && date( 'G', $last[0] ) == date( 'G' ) ) {
3712
  return;
3713
  }
3714
 
3715
+ set_site_transient( $t, array( $start ), 2 * 3600 );
3716
+
3717
  if ( is_multisite() ) {
3718
  if ( ! $force && get_site_transient( 'cerber_multisite' ) ) {
3719
  return;
3721
  set_site_transient( 'cerber_multisite', 'executed', 3600 );
3722
  }
3723
 
3724
+ $time = time();
 
 
 
 
3725
  $days = absint( crb_get_settings( 'keeplog' ) );
3726
  if ( $days > 0 ) {
3727
  $wpdb->query( 'DELETE FROM ' . CERBER_LOG_TABLE . ' WHERE stamp < ' . ( $time - $days * 24 * 3600 ) );
3731
  $wpdb->query( 'DELETE FROM ' . CERBER_TRAF_TABLE . ' WHERE stamp < ' . ( $time - $days * 24 * 3600 ) );
3732
  }
3733
 
 
 
3734
  $wpdb->query( 'DELETE FROM ' . CERBER_LAB_IP_TABLE . ' WHERE expires < ' . $time );
3735
 
3736
  if ( $wp_cerber->getSettings( 'trashafter-enabled') && absint($wp_cerber->getSettings('trashafter'))) {
3747
 
3748
  cerber_up_data();
3749
 
3750
+ // Keep the size of the log file small
3751
  cerber_truncate_log();
3752
 
3753
+ set_site_transient( $t, array( $start, time() ), 2 * 3600 );
3754
  }
3755
 
3756
  add_action( 'cerber_hourly_2', function () {
3757
+ $t = 'cerber_hourly_2';
3758
+ $start = time();
3759
 
3760
+ if ( ( $last = get_site_transient( $t ) ) && date( 'G', $last[0] ) == date( 'G' ) ) {
 
3761
  return;
3762
  }
3763
 
3764
+ set_site_transient( $t, array( $start ), 2 * 3600 );
3765
+
3766
  $gmt_offset = get_option( 'gmt_offset' ) * 3600;
3767
 
3768
  if ( crb_get_settings( 'enable-report' )
3796
  }
3797
  }
3798
 
3799
+ if ( crb_get_settings( 'cerberlab' ) || lab_lab() ) {
3800
+ lab_check_nodes( true, true );
3801
+ }
3802
+
3803
+ cerber_push_lab();
3804
+
3805
  cerber_cloud_sync();
3806
 
3807
  // Simply keep folder locked
3809
 
3810
  cerber_db_query( 'DELETE FROM ' . CERBER_QMEM_TABLE . ' WHERE stamp < ' . ( time() - 30 * 60 ) );
3811
 
3812
+ set_site_transient( $t, array( $start, time() ), 2 * 3600 );
3813
  });
3814
 
3815
  add_action( 'cerber_daily', 'cerber_do_daily' );
3816
  function cerber_do_daily() {
3817
+ $t = 'cerber_daily_1';
3818
+ $start = time();
3819
+ set_site_transient( $t, array( $start ), 48 * 3600 );
3820
 
3821
  cerber_do_hourly( true );
3822
 
3823
  $time = time();
3824
 
 
 
3825
  lab_validate_lic();
3826
 
3827
  cerber_db_query( 'DELETE FROM ' . CERBER_LAB_NET_TABLE . ' WHERE expires < ' . $time );
3855
  // TODO: implement holding previous values for a while
3856
  // cerber_antibot_gene();
3857
 
3858
+ set_site_transient( $t, array( $start, time() ), 48 * 3600 );
3859
  }
3860
 
3861
  /**
3870
  * @since 3.0
3871
  */
3872
  function cerber_log( $activity, $login = '', $user_id = 0, $ip = null ) {
3873
+ global $user_ID, $cerber_logged, $cerber_blocked;
3874
  static $logged = array();
3875
+
3876
  $wp_cerber = get_wp_cerber();
3877
 
3878
  $activity = absint( $activity );
3903
  }
3904
 
3905
  if ( empty( $user_id ) ) {
3906
+ $user_id = ( $user_ID ) ? $user_ID : 0;
 
 
 
 
 
3907
  }
3908
 
3909
  $user_id = absint( $user_id );
3910
 
3911
+ $stamp = microtime( true );
3912
 
3913
  $pos = strpos($_SERVER['REQUEST_URI'],'?');
3914
  if ($pos) {
3919
  }
3920
  $url = strip_tags($_SERVER['HTTP_HOST'] . $path);
3921
 
3922
+ $status = 0;
3923
+ if ( $activity != 10 && $activity != 11 ) {
3924
+ $status = cerber_get_status( $ip );
3925
  }
3926
+ elseif ( $cerber_blocked ) {
3927
+ $status = $cerber_blocked;
3928
+ }
3929
 
3930
+ $details = $status .'|0|0|0|'. $url;
3931
 
3932
  $country = lab_get_country( $ip );
3933
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3934
  $login = cerber_real_escape( $login );
3935
  $details = cerber_real_escape( $details );
3936
+ $ret = cerber_db_query( 'INSERT INTO ' . CERBER_LOG_TABLE . ' (ip, ip_long, user_login, user_id, stamp, activity, session_id, country, details)
3937
+ VALUES ("' . $ip . '",' . $ip_long . ',"' . $login . '",' . $user_id . ',"' . $stamp . '",' . $activity . ',"' . $wp_cerber->getSessionID() . '","' . $country . '","' . $details . '")' );
3938
 
3939
  if ( ! $ret ) {
3940
+ cerber_watchdog();
3941
+ }
3942
 
3943
  // Subscriptions - notifications for admin ---------------------------------------------------
3944
 
4865
  }
4866
 
4867
  register_shutdown_function( function () {
 
 
4868
 
4869
+ cerber_extra_vision();
 
 
 
 
 
4870
 
4871
+ // Error monitoring
4872
+ if ( 400 <= http_response_code()
4873
+ && ! cerber_is_wp_cron()
4874
+ && ( $mode = crb_get_settings( 'tierrmon' ) ) ) {
4875
+ cerber_error_shield( $mode );
 
 
 
 
4876
  }
4877
 
4878
  cerber_push_lab();
4879
  cerber_traffic_log();
4880
  } );
4881
 
4882
+ function cerber_error_shield( $mode = 1 ) {
4883
+ global $cerber_status, $cerber_blocked;
4884
+
4885
+ if ( ! $mode || ( crb_get_settings( 'tierrnoauth' ) && is_user_logged_in() ) ) {
4886
+ return;
4887
+ }
4888
+
4889
+ $time = 900;
4890
+ $limit = 3; // allowed within $time
4891
+ $codes = array();
4892
+ if ( $mode == 1 ) { // safe mode
4893
+ $time = 300;
4894
+ $limit = 7;
4895
+ $codes = array( 404, 500 );
4896
+ }
4897
+
4898
+ $code = http_response_code();
4899
+ if ( $code < 400 || ( $codes && ! in_array( $code, $codes ) ) ) {
4900
+ return;
4901
+ }
4902
+
4903
+ $go = false;
4904
+ if ( cerber_is_http_post() ) {
4905
+ $go = true;
4906
+ }
4907
+
4908
+ if ( ! $go && cerber_get_uri_script() ) {
4909
+ $go = true;
4910
+ }
4911
+
4912
+ if ( ! $go ) {
4913
+ if ( $mode == 1 ) {
4914
+ if ( cerber_get_non_wp_fields() ) {
4915
+ $go = true;
4916
+ }
4917
+ }
4918
+ else {
4919
+ if ( ! empty( $_GET ) ) {
4920
+ $go = true;
4921
+ }
4922
+ }
4923
+ }
4924
+
4925
+ if ( ! $go && cerber_is_rest_url() ) {
4926
+ $go = true;
4927
+ }
4928
+
4929
+ if ( ! $go ) {
4930
+ return;
4931
+ }
4932
+
4933
+ $ip = cerber_get_remote_ip();
4934
+ cerber_db_query( 'INSERT INTO ' . CERBER_QMEM_TABLE . ' (ip, http_code, stamp)
4935
+ VALUES ("' . $ip . '",' . intval( http_response_code() ) . ',' . time() . ')' );
4936
+
4937
+ if ( ! $cerber_blocked ) {
4938
+ $t = time() - $time;
4939
+ $c = cerber_db_get_var( 'SELECT COUNT(ip) FROM ' . CERBER_QMEM_TABLE . ' WHERE ip = "' . $ip . '" AND stamp > ' . $t );
4940
+ if ( $c >= $limit ) {
4941
+ cerber_soft_block_add( $ip, 711 );
4942
+ $cerber_status = 18;
4943
+ }
4944
+ }
4945
+
4946
+ }
4947
+
4948
  function cerber_catch_error( $errno, $errstr = null, $errfile = null, $errline = null ) {
4949
  global $cerber_php_errors;
4950
  if ( ! $errno ) {
5140
  else {
5141
  $i ++;
5142
  }
5143
+ if ( $i > 25 ) { // Save no more errors
5144
  break;
5145
  }
5146
  }
5147
  if ( $cerber_php_errors ) {
5148
  $cerber_php_errors = array_values( $cerber_php_errors );
5149
+ $cerber_php_errors = array_slice( $cerber_php_errors, 0, 25 );
 
 
5150
  $php_err = serialize( $cerber_php_errors );
5151
  }
5152
  }
5154
 
5155
  // Timestamps
5156
  if ( ! empty( $wp_cerber_start_stamp ) && is_numeric( $wp_cerber_start_stamp ) ) {
5157
+ $start = (float) $wp_cerber_start_stamp; // define this variable: $wp_cerber_start_stamp = microtime( true ); in wp-config.php
5158
  }
5159
  else {
5160
+ $start = cerber_request_time();
5161
  }
5162
 
5163
+ $processing = (int) ( 1000 * ( microtime( true ) - $start ) );
5164
 
5165
  $uri = cerber_real_escape( $uri );
5166
  $fields = cerber_real_escape( $fields );
5169
 
5170
  $query = 'INSERT INTO ' . CERBER_TRAF_TABLE . '
5171
  (ip, ip_long, uri, request_fields , request_details, session_id, user_id, stamp, processing, request_method, http_code, wp_id, wp_type, is_bot, blog_id, php_errors )
5172
+ VALUES ("' . $ip . '", ' . $ip_long . ',"' . $uri . '","' . $fields . '","' . $details . '", "' . $session_id . '", ' . $user_id . ', ' . $start . ',' . $processing . ', "' . $method . '", ' . $http_code . ',' . $wp_id . ', ' . $wp_type . ', ' . $bot . ', ' . absint( $blog_id ) . ',"' . $php_err . '")';
5173
 
5174
  $ret = cerber_db_query( $query );
5175
 
5202
  * @return bool
5203
  * @since 6.0
5204
  */
5205
+ function cerber_to_log( $wp_type, $http_code, $user_id ) {
5206
+ global $cerber_logged, $cerber_blocked, $wp_cerber;
5207
 
5208
  $mode = crb_get_settings( 'timode' );
5209
 
5210
+ if ( $mode == 0 ) {
5211
  return false;
5212
  }
5213
+ if ( $mode == 2 ) {
5214
+ if ( $wp_type < 515 ) { // Pure admin requests
5215
  if ( $wp_type < 502 && ! $user_id ) { // @since 6.3
5216
  return true;
5217
  }
5218
+ //if ( $wp_type == 500 && 'admin-ajax.php' != cerber_get_uri_script() ) { // @since 7.8
5219
+ if ( $wp_type == 500 && ! CRB_Request::is_script( '/wp-admin/admin-ajax.php' ) ) { // @since 7.9.1
5220
  return true;
5221
  }
5222
+
5223
  return false;
5224
  }
5225
+
5226
  return true;
5227
  }
5228
 
5241
  return true;
5242
  }
5243
 
5244
+ if ( $wp_type < 515 ) {
5245
  if ( $wp_type < 502 && ! $user_id ) { // @since 6.3
5246
  if ( ! empty( $_GET ) || ! empty( $_POST ) || ! empty( $_FILES ) ) {
5247
+ return true;
5248
+ }
5249
  }
5250
+ if ( $wp_type == 500 && ! CRB_Request::is_script( '/wp-admin/admin-ajax.php' ) ) { // @since 7.8
5251
  return true;
5252
  }
5253
+
5254
  return false;
5255
+ }
5256
 
5257
  if ( $http_code >= 400 ||
5258
+ $wp_type < 600 ||
5259
  $user_id ||
 
5260
  ! empty( $_POST ) ||
5261
  ! empty( $_FILES ) ||
5262
+ isset( $_GET['s'] )
5263
+ || cerber_get_non_wp_fields() ) {
5264
  return true;
5265
  }
5266
 
5267
+ if ( cerber_is_http_post()
5268
+ || cerber_get_uri_script() ) {
5269
  return true;
5270
  }
5271
 
5375
  if ( is_object( $wp_query ) ) {
5376
  $keys = $wp_query->fill_query_vars( array() );
5377
  }
5378
+ elseif ( class_exists( 'WP_Query' ) ) {
5379
  $tmp = new WP_Query();
5380
  $keys = $tmp->fill_query_vars( array() );
5381
  }
5382
+ else {
5383
+ $keys = array();
5384
+ }
5385
 
5386
  $wp_keys = array_keys( $keys ); // WordPress GET fields for frontend
5387
 
5388
+ // Some well-known fields
5389
  $wp_keys[] = 'redirect_to';
5390
  $wp_keys[] = 'reauth';
5391
  $wp_keys[] = 'action';
5437
 
5438
  // TI --------------------------------------------------------------------
5439
 
5440
+ if ( ! $ti_mode = crb_get_settings( 'tienabled' ) ) {
5441
  return;
5442
  }
5443
 
5447
  }
5448
 
5449
  // White list by URI
5450
+ //$uri = cerber_purify_uri();
5451
+ $uri = CRB_Request::URI();
5452
  if ( $tiwhite = crb_get_settings( 'tiwhite' ) ) {
5453
  foreach ( (array) $tiwhite as $item ) {
5454
  if ( substr( $item, 0, 1 ) == '{' && substr( $item, - 1 ) == '}' ) {
5467
  $wp_cerber->InspectRequest();
5468
 
5469
  // Step two
5470
+ //$uri_script = cerber_get_uri_script();
5471
+ $uri_script = CRB_Request::script();
5472
 
5473
  if ( $uri_script && $script_filename = cerber_script_filename() ) {
5474
  // Scanning for executable scripts?
5475
  if ( ! cerber_script_exists( $uri ) && ! cerber_is_login_request() ) {
 
 
 
5476
  $cerber_status = 19;
5477
  cerber_log( 55 );
5478
+ if ( $ti_mode > 1 ) {
5479
+ cerber_soft_block_add( null, 708 );
5480
+ }
5481
  cerber_forbidden_page();
5482
  }
5483
  // Direct access to a PHP script
5484
+ $deny = false;
5485
+ if ( crb_acl_is_black() ) {
5486
+ $deny = true;
5487
+ $cerber_status = 14;
5488
+ }
5489
+ //elseif ( ! in_array( $uri_script, cerber_get_wp_scripts() ) ) {
5490
+ elseif ( ! CRB_Request::is_script( cerber_get_wp_scripts() ) ) {
5491
+ if ( ! cerber_is_allowed() ) {
5492
  $deny = true;
5493
  $cerber_status = 13;
5494
  }
5496
  $deny = true;
5497
  $cerber_status = 15;
5498
  }
5499
+ }
5500
+ if ( $deny ) {
5501
+ cerber_log( 50 );
5502
+ cerber_forbidden_page();
5503
  }
5504
  }
5505
 
5526
  }
5527
 
5528
  if ( ! empty( $_POST ) && ! $found ) {
5529
+ if ( CRB_Request::is_script( '/' . WP_COMMENT_SCRIPT ) ) {
5530
  $white = array( 'comment' );
5531
  }
5532
  $cerber_in_context = 2;
5535
 
5536
  if ( $found ) {
5537
  cerber_log( $found );
5538
+ cerber_soft_block_add( null, 709);
5539
  cerber_forbidden_page();
5540
  }
5541
  }
5878
 
5879
  if ( $found ) {
5880
  cerber_log( $found );
5881
+ cerber_soft_block_add( null, 710);
5882
  }
5883
 
5884
  return $found;
cerber-news.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
@@ -109,6 +110,14 @@ function cerber_push_the_news( $version ) {
109
  $news['7.9'][] = 'Fix: The number of email notifications per hour can exceed the configured limit.';
110
  $news['7.9'][] = 'Update: Translations have been updated. Thanks to Felipe Turcheti and Eirik Vorland.';
111
 
 
 
 
 
 
 
 
 
112
  if ( ! empty( $news[ $version ] ) ) {
113
  //$text = '<h3>What\'s new in WP Cerber '.$version.'</h3>';
114
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
110
  $news['7.9'][] = 'Fix: The number of email notifications per hour can exceed the configured limit.';
111
  $news['7.9'][] = 'Update: Translations have been updated. Thanks to Felipe Turcheti and Eirik Vorland.';
112
 
113
+ $news['7.9.3'][] = 'New settings for the Traffic Inspector firewall allow you to fine-tune its behavior. You can enable less or more restrictive firewall rules.';
114
+ $news['7.9.3'][] = 'Troubleshooting of possible issues with scheduled maintenance tasks has been improved.';
115
+ $news['7.9.3'][] = 'To make troubleshooting easier the plugin logs not only a lockout event but also logs and displays the reason for the lockout.';
116
+ $news['7.9.3'][] = 'Compatibility with ManageWP and Gravity Forms has been improved.';
117
+ $news['7.9.3'][] = 'The layout of the Activity and Live Traffic pages has been improved.';
118
+ $news['7.9.3'][] = 'Bug fixed: The malware scanner wrongly prevents PHP files with few specific names in one particular location from being deleted after a manual scan or during the automatic malware removal.';
119
+ $news['7.9.3'][] = 'Bug fixed: The number of email notifications might be incorrectly limited to one email per hour.';
120
+
121
  if ( ! empty( $news[ $version ] ) ) {
122
  //$text = '<h3>What\'s new in WP Cerber '.$version.'</h3>';
123
 
cerber-pluggable.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
cerber-request.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ final class CRB_Request {
4
+ private static $remote_ip = null;
5
+ private static $clean_uri = null; // No junk and GET parameters
6
+ private static $uri_script = null; // With path and the starting slash (if script)
7
+ private static $site_root = null; // without trailing slash and path
8
+ private static $sub_folder = null; // without trailing slash and site domain
9
+
10
+ static function URI() {
11
+ if ( isset( self::$clean_uri ) ) {
12
+ return self::$clean_uri;
13
+ }
14
+
15
+ return self::purify();
16
+ }
17
+
18
+ // Clean up the requested URI from GET parameters and extra slashes
19
+ // @since 7.9.2
20
+ static function purify() {
21
+ $uri = $_SERVER['REQUEST_URI'];
22
+
23
+ if ( $pos = strpos( $uri, '?' ) ) {
24
+ $uri = substr( $uri, 0, $pos );
25
+ }
26
+
27
+ if ( $pos = strpos( $uri, '#' ) ) {
28
+ $uri = substr( $uri, 0, $pos );
29
+ }
30
+
31
+ $uri = rtrim( $uri, '/' );
32
+ self::$clean_uri = preg_replace( '/\/+/', '/', $uri );
33
+
34
+ return self::$clean_uri;
35
+ }
36
+
37
+ static function parse_site_url() {
38
+
39
+ if ( isset( self::$site_root ) ) {
40
+ return;
41
+ }
42
+
43
+ $home_url = cerber_get_home_url();
44
+ $p1 = strpos( $home_url, '//' );
45
+ $p2 = strpos( $home_url, '/', $p1 + 2 );
46
+ if ( $p2 !== false ) {
47
+ self::$site_root = substr( $home_url, 0, $p2 );
48
+ self::$sub_folder = substr( $home_url, $p2 );
49
+ }
50
+ else {
51
+ self::$site_root = $home_url;
52
+ self::$sub_folder = '';
53
+ }
54
+
55
+ }
56
+
57
+ static function full_url() {
58
+
59
+ self::parse_site_url();
60
+
61
+ return self::$site_root . self::URI();
62
+
63
+ }
64
+
65
+ static function script() {
66
+
67
+ if ( isset( self::$uri_script ) ) {
68
+ return self::$uri_script;
69
+ }
70
+
71
+ if ( cerber_detect_exec_extension( self::URI() ) ) {
72
+ self::$uri_script = strtolower( self::URI() );
73
+ }
74
+ else {
75
+ self::$uri_script = false;
76
+ }
77
+
78
+ return self::$uri_script;
79
+ }
80
+
81
+ // @since 7.9.2
82
+ static function is_script( $val ) {
83
+ if ( ! self::script() ) {
84
+ return false;
85
+ }
86
+ $uri_script = self::$uri_script;
87
+ self::parse_site_url();
88
+ if ( self::$sub_folder ) {
89
+ $uri_script = substr( self::$uri_script, strlen( self::$sub_folder ) );
90
+ }
91
+
92
+ if ( is_array( $val ) ) {
93
+ if ( in_array( $uri_script, $val ) ) {
94
+ return true;
95
+ }
96
+ }
97
+ elseif ( $uri_script == $val ) {
98
+ return true;
99
+ }
100
+
101
+ return false;
102
+ }
103
+ }
cerber-scanner.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
- Copyright (C) 2015-18 Gregory Markov, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -366,7 +366,7 @@ add_action( 'plugins_loaded', function () {
366
  function cerber_scanner( $control, $mode ) {
367
  global $cerber_db_errors, $cerber_scan_mode;
368
 
369
- if ( function_exists( 'http_response_code' ) ) { // PHP >= 5.4.0
370
  register_shutdown_function( function () {
371
  if ( http_response_code() != 200 ) {
372
  crb_scan_debug( 'SERVER ERROR! The scan is not completed.' );
@@ -380,11 +380,12 @@ function cerber_scanner( $control, $mode ) {
380
  $errors = array();
381
 
382
  if ( function_exists( 'wp_raise_memory_limit' ) ) {
383
- wp_raise_memory_limit( 'admin' );
 
 
 
 
384
  }
385
- else {
386
- $errors[] = 'Unable to raise memory limit';
387
- }
388
 
389
  if ( ! $mode ) {
390
  $mode = 'quick';
@@ -2229,10 +2230,8 @@ function cerber_inspect_php( $file_name = '' ) {
2229
  }
2230
  if ( $token[0] == T_CONSTANT_ENCAPSED_STRING ) {
2231
  if ( $val = cerber_is_base64_encoded( trim( $token[1], '\'"' ) ) ) {
2232
- //if ( cerber_check_string( $token[1] ) ) {
2233
  if ( cerber_inspect_value( $val ) ) {
2234
  $xdata[] = array( 1, 'base64_encoded_php', $token[2], $token[0], $token[1] );
2235
- //$severity[] = 10;
2236
  $severity[] = CERBER_MALWR_DETECTED;
2237
  }
2238
  /*
@@ -2380,55 +2379,6 @@ function cerber_inspect_php( $file_name = '' ) {
2380
 
2381
  }
2382
 
2383
- // Obsolete
2384
- function cerber_check_string( $str ) {
2385
-
2386
- $str = trim( $str, '\'"' );
2387
-
2388
- if ( strlen( $str ) < 8 ) {
2389
- return false;
2390
- }
2391
-
2392
- if ( preg_match( '/[\-_\!\?\;\*]/', $str ) ) {
2393
- return false;
2394
- }
2395
-
2396
- $all = str_split( $str );
2397
- $chars = array_count_values( $all );
2398
- $total = count( $all );
2399
- $distribution = array();
2400
- foreach ( $chars as $char => $entrances ) {
2401
- $distribution[ $char ] = $entrances / $total * 1000;
2402
- }
2403
-
2404
- $dev = cerber_stand_deviation( $distribution );
2405
-
2406
- if ( $dev >= 9 && $dev <= 12 ) { // Typical Base64 encoded string
2407
- return true;
2408
- }
2409
-
2410
- return false;
2411
- }
2412
-
2413
- /**
2414
- * Calculate Standard Deviation of a given array
2415
- *
2416
- * @param array $arr
2417
- *
2418
- * @return float
2419
- */
2420
- function cerber_stand_deviation( $arr ) {
2421
- $count = count( $arr );
2422
- $variance = 0.0;
2423
- $average = array_sum( $arr ) / $count;
2424
-
2425
- foreach ( $arr as $value ) {
2426
- $variance += pow( ( $value - $average ), 2 );
2427
- }
2428
-
2429
- return (float) sqrt( $variance / $count );
2430
- }
2431
-
2432
  /**
2433
  * Unsafe code tokens
2434
  *
@@ -3148,7 +3098,7 @@ function cerber_is_htaccess( $file_name ) {
3148
  function cerber_is_dropin( $file_name ) {
3149
  $dropins = _get_dropins();
3150
  if ( isset( $dropins[ basename( $file_name ) ] ) ) {
3151
- if ( 0 === strpos( $file_name, cerber_get_content_dir() . DIRECTORY_SEPARATOR ) ) {
3152
  return true;
3153
  }
3154
  }
@@ -3651,124 +3601,6 @@ function cerber_check_extension( $filename, $ext_list = array() ) {
3651
 
3652
  }
3653
 
3654
- /**
3655
- * Retrieve a value from the key-value storage
3656
- *
3657
- * @param string $key
3658
- * @param integer $id
3659
- * @param bool $unserialize
3660
- *
3661
- * @return bool|array
3662
- */
3663
- function cerber_get_set( $key, $id = null, $unserialize = true ) {
3664
- $key = preg_replace( '/[^a-z_\-\d]/i', '', $key );
3665
-
3666
- $and = '';
3667
- if ( $id !== null ) {
3668
- $and = ' AND the_id = ' . absint( $id );
3669
- }
3670
-
3671
- $ret = false;
3672
-
3673
- if ( $row = cerber_db_get_row( 'SELECT * FROM ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' WHERE the_key = "' . $key . '" ' . $and ) ) {
3674
- if ( $row['expires'] > 0 && $row['expires'] < time() ) {
3675
- cerber_delete_set( $key, $id );
3676
-
3677
- return false;
3678
- }
3679
- $ret = ( $unserialize ) ? unserialize( $row['the_value'] ) : $row['the_value'];
3680
- }
3681
-
3682
- return $ret;
3683
- }
3684
-
3685
- /**
3686
- * Update/insert value to the key-value storage
3687
- *
3688
- * @param string $key A unique key for the data set
3689
- * @param $value
3690
- * @param integer $id An additional numerical key
3691
- * @param bool $serialize
3692
- * @param integer $expires Unix timestamp (UTC) when this element will be deleted
3693
- *
3694
- * @return bool
3695
- */
3696
- function cerber_update_set( $key, $value, $id = null, $serialize = true, $expires = null ) {
3697
-
3698
- $key = preg_replace( '/[^a-z_\-\d]/i', '', $key );
3699
-
3700
- $id = ( $id !== null ) ? absint( $id ) : 0;
3701
-
3702
- if ( $serialize ) {
3703
- $value = serialize( $value );
3704
- }
3705
- $value = cerber_real_escape( $value );
3706
-
3707
- $expires = ( $expires !== null ) ? absint( $expires ) : 0;
3708
-
3709
- if ( false !== cerber_get_set( $key, $id, false ) ) {
3710
- $sql = 'UPDATE ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' SET the_value = "' . $value . '", expires = ' . $expires . ' WHERE the_key = "' . $key . '" AND the_id = ' . $id;
3711
- }
3712
- else {
3713
- $sql = 'INSERT INTO ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' (the_key, the_id, the_value, expires) VALUES ("' . $key . '",' . $id . ',"' . $value . '",' . $expires . ')';
3714
- }
3715
-
3716
- unset( $value );
3717
-
3718
- if ( cerber_db_query( $sql ) ) {
3719
- return true;
3720
- }
3721
- else {
3722
- return false;
3723
- }
3724
- }
3725
-
3726
- /**
3727
- * Delete value from the storage
3728
- *
3729
- * @param string $key
3730
- * @param integer $id
3731
- *
3732
- * @return bool
3733
- */
3734
- function cerber_delete_set( $key, $id = null) {
3735
-
3736
- $key = preg_replace( '/[^a-z_\-\d]/i', '', $key );
3737
-
3738
- $and = '';
3739
- if ( $id !== null ) {
3740
- $and = ' AND the_id = ' . absint( $id );
3741
- }
3742
-
3743
- if ( cerber_db_query( 'DELETE FROM ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' WHERE the_key = "' . $key . '"' . $and ) ) {
3744
- return true;
3745
- }
3746
- else {
3747
- return false;
3748
- }
3749
- }
3750
-
3751
- /**
3752
- * Clean up all expired sets. Usually by cron.
3753
- * @param bool $all if true, deletes all sets that has expiration
3754
- *
3755
- * @return bool
3756
- */
3757
- function cerber_delete_expired_set( $all = false ) {
3758
- if ( ! $all ) {
3759
- $where = 'AND expires < ' . time();
3760
- }
3761
- else {
3762
- $where = '';
3763
- }
3764
- if ( cerber_db_query( 'DELETE FROM ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' WHERE expires > 0 ' . $where ) ) {
3765
- return true;
3766
- }
3767
- else {
3768
- return false;
3769
- }
3770
- }
3771
-
3772
  function cerber_step_desc( $step = null ) {
3773
  $steps = array(
3774
  __( 'Preparing for the scan', 'wp-cerber' ),
@@ -4989,7 +4821,7 @@ function cerber_is_cloud_request() {
4989
  }
4990
 
4991
  $key = lab_get_key();
4992
- if ( ! isset( $key[4] ) ) {
4993
  $key = lab_get_key( true );
4994
  }
4995
  if ( $key[4] != $_POST['cerber-cloud-key'] ) {
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
366
  function cerber_scanner( $control, $mode ) {
367
  global $cerber_db_errors, $cerber_scan_mode;
368
 
369
+ if ( crb_get_settings( 'scan_debug' ) ) {
370
  register_shutdown_function( function () {
371
  if ( http_response_code() != 200 ) {
372
  crb_scan_debug( 'SERVER ERROR! The scan is not completed.' );
380
  $errors = array();
381
 
382
  if ( function_exists( 'wp_raise_memory_limit' ) ) {
383
+ if ( ! wp_raise_memory_limit( 'admin' ) ) {
384
+ $m = 'ERROR: Unable to raise memory limit';
385
+ crb_scan_debug( $m );
386
+ $errors[] = $m;
387
+ }
388
  }
 
 
 
389
 
390
  if ( ! $mode ) {
391
  $mode = 'quick';
2230
  }
2231
  if ( $token[0] == T_CONSTANT_ENCAPSED_STRING ) {
2232
  if ( $val = cerber_is_base64_encoded( trim( $token[1], '\'"' ) ) ) {
 
2233
  if ( cerber_inspect_value( $val ) ) {
2234
  $xdata[] = array( 1, 'base64_encoded_php', $token[2], $token[0], $token[1] );
 
2235
  $severity[] = CERBER_MALWR_DETECTED;
2236
  }
2237
  /*
2379
 
2380
  }
2381
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2382
  /**
2383
  * Unsafe code tokens
2384
  *
3098
  function cerber_is_dropin( $file_name ) {
3099
  $dropins = _get_dropins();
3100
  if ( isset( $dropins[ basename( $file_name ) ] ) ) {
3101
+ if ( cerber_get_content_dir() == dirname( $file_name ) ) {
3102
  return true;
3103
  }
3104
  }
3601
 
3602
  }
3603
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3604
  function cerber_step_desc( $step = null ) {
3605
  $steps = array(
3606
  __( 'Preparing for the scan', 'wp-cerber' ),
4821
  }
4822
 
4823
  $key = lab_get_key();
4824
+ if ( empty( $key[4] ) ) {
4825
  $key = lab_get_key( true );
4826
  }
4827
  if ( $key[4] != $_POST['cerber-cloud-key'] ) {
cerber-tools.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL
6
 
@@ -257,7 +258,7 @@ function cerber_show_diag(){
257
  </div>
258
  <?php
259
 
260
- echo '<div class="diag-section"><h3>Cron</h3>';
261
  cerber_cron_diag();
262
  echo '</div>';
263
 
@@ -348,6 +349,9 @@ function cerber_show_wp_diag(){
348
 
349
  $ret = array();
350
 
 
 
 
351
  $ret[] = cerber_make_plain_table( array(
352
  array( 'Server ', $_SERVER['SERVER_SOFTWARE'] ),
353
  array( 'PHP version ', phpversion() ),
@@ -356,7 +360,7 @@ function cerber_show_wp_diag(){
356
  array( 'Options DB table', $wpdb->prefix . 'options' ),
357
  array( 'Server platform', PHP_OS ),
358
  array( 'Memory limit', @ini_get( 'memory_limit' ) ),
359
- array( 'Default PHP timezone', date_default_timezone_get() )
360
  ) );
361
 
362
  $folders = array(
@@ -563,22 +567,70 @@ function cerber_environment_diag() {
563
  }
564
 
565
  function cerber_cron_diag() {
566
- $c1 = ( date( 'G' ) - intval( get_site_transient( 'crb_hourly_1' ) ) );
567
- $c2 = ( date( 'G' ) - intval( get_site_transient( 'crb_hourly_2' ) ) );
568
- $c3 = ( date( 'j' ) - intval( get_site_transient( 'crb_daily_1' ) ) );
569
- $err = array();
570
- if ( $c1 > 1 || $c2 > 1 ) {
571
- $err[] = 'Scheduled hourly cron tasks are not executed properly.';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
572
  }
573
- if ( $c3 > 1 ) {
574
- $err[] = 'Scheduled daily cron task is not executed properly.';
 
 
575
  }
576
- if ( $err ) {
577
- echo '<p style="color: red;">' . implode( '<br/>', $err ) . '</p>';
578
  }
579
- else {
580
- echo 'No issues detected.';
581
  }
 
 
 
 
 
 
582
  }
583
 
584
  function cerber_show_diag_log() {
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL
7
 
258
  </div>
259
  <?php
260
 
261
+ echo '<div class="diag-section"><h3>Maintenance task</h3>';
262
  cerber_cron_diag();
263
  echo '</div>';
264
 
349
 
350
  $ret = array();
351
 
352
+ $tz = date_default_timezone_get();
353
+ $tz = ( $tz !== 'UTC' ) ? '<span style="color: red;">' . $tz . '!</span>' : $tz;
354
+
355
  $ret[] = cerber_make_plain_table( array(
356
  array( 'Server ', $_SERVER['SERVER_SOFTWARE'] ),
357
  array( 'PHP version ', phpversion() ),
360
  array( 'Options DB table', $wpdb->prefix . 'options' ),
361
  array( 'Server platform', PHP_OS ),
362
  array( 'Memory limit', @ini_get( 'memory_limit' ) ),
363
+ array( 'Default PHP timezone', $tz ),
364
  ) );
365
 
366
  $folders = array(
567
  }
568
 
569
  function cerber_cron_diag() {
570
+
571
+ $planned = array();
572
+ $crb_crons = array(
573
+ 'cerber_hourly_1' => 'Hourly task #1',
574
+ 'cerber_hourly_2' => 'Hourly task #2',
575
+ 'cerber_daily' => 'Daily task'
576
+ );
577
+ foreach ( _get_cron_array() as $time => $item ) {
578
+ foreach ( $crb_crons as $key => $val ) {
579
+ if ( ! empty( $item[ $key ] ) ) {
580
+ $planned[ $key ] = $val . ' scheduled for ' . cerber_date( $time ) . ' (' . cerber_ago_time( $time ) . ')';
581
+ }
582
+ }
583
+ }
584
+
585
+ unset( $crb_crons['cerber_daily'] );
586
+ $crb_crons['cerber_daily_1'] = 'Daily task';
587
+
588
+ $errors = array();
589
+ $ok = array();
590
+ foreach ( $crb_crons as $key => $task ) {
591
+ $h = get_site_transient( $key );
592
+ if ( ! $h || ! is_array( $h ) ) {
593
+ $errors[] = $task . ' has never been executed';
594
+ continue;
595
+ }
596
+ if ( empty( $h[1] ) ) {
597
+ $errors[] = $task . ' has not finished correctly';
598
+ continue;
599
+ }
600
+ $end = $h[1];
601
+ /*
602
+ if ( $end < ( time() - 2 * 3600 ) ) {
603
+ $errors[] = $val . ' has been executed ' . cerber_ago_time( $end );
604
+ }
605
+ else {
606
+ $ok[] = $val . ' has been executed ' . cerber_ago_time( $end );
607
+ }
608
+ */
609
+ $dur = $end - $h[0];
610
+ if ( $dur > 60 ) {
611
+ $errors[] = $task . ' has been executed ' . cerber_ago_time( $end ) . ' and it took ' . $dur . ' seconds.';
612
+ }
613
+ else {
614
+ $ok[] = $task . ' has been executed ' . cerber_ago_time( $end ) . ' and it took ' . $dur . ' seconds.';
615
+ }
616
  }
617
+
618
+ if ( $errors ) {
619
+ //echo 'There are some errors';
620
+ echo '<p style="color: red;">' . implode( '<br/>', $errors ) . '</p>';
621
  }
622
+ if ( $ok ) {
623
+ echo '<p>' . implode( '<br/>', $ok ) . '</p>';
624
  }
625
+ if ( $planned ) {
626
+ echo '<p>' . implode( '<br/>', $planned ) . '</p>';
627
  }
628
+
629
+
630
+ if ( $errors && defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) {
631
+ echo '<p>Note: the internal cron launcher has been disabled on this site, you have to use external one.</p>';
632
+ }
633
+
634
  }
635
 
636
  function cerber_show_diag_log() {
changelog.txt CHANGED
@@ -1,3 +1,13 @@
 
 
 
 
 
 
 
 
 
 
1
  = 7.9 =
2
  * New: The plugin monitors suspicious requests that cause 4xx and 5xx HTTP errors and blocks IP addresses that aggressively generate such requests.
3
  * New: A set of WordPress navigation menu links. Login, logout, and register menu items can be automatically generated and shown in any WordPress menu or a widget.
1
+ = 7.9.3 =
2
+ * New: New settings for the Traffic Inspector firewall allow you to fine-tune its behavior. You can enable less or more restrictive firewall rules.
3
+ * Update: Troubleshooting of possible issues with scheduled maintenance tasks has been improved.
4
+ * Update: To make troubleshooting easier the plugin logs not only a lockout event but also logs and displays the reason for the lockout.
5
+ * Update: Compatibility with ManageWP and Gravity Forms has been improved.
6
+ * Update: The layout of the Activity and Live Traffic pages has been improved.
7
+ * Bug fixed: The malware scanner wrongly prevents PHP files with few specific names in one particular location from being deleted after a manual scan or during the automatic malware removal.
8
+ * Bug fixed: The number of email notifications might be incorrectly limited to one email per hour.
9
+ * [Read more](https://wpcerber.com/wp-cerber-security-7-9-3/)
10
+
11
  = 7.9 =
12
  * New: The plugin monitors suspicious requests that cause 4xx and 5xx HTTP errors and blocks IP addresses that aggressively generate such requests.
13
  * New: A set of WordPress navigation menu links. Login, logout, and register menu items can be automatically generated and shown in any WordPress menu or a widget.
common.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
@@ -42,7 +43,10 @@ define( 'MYSQL_FETCH_OBJECT_K', 6 );
42
  *
43
  */
44
  function cerber_get_wp_scripts(){
45
- return array( WP_LOGIN_SCRIPT, WP_REG_URI, WP_XMLRPC_SCRIPT, WP_TRACKBACK_SCRIPT, WP_PING_SCRIPT, WP_SIGNUP_SCRIPT);
 
 
 
46
  }
47
 
48
  /**
@@ -129,6 +133,18 @@ function cerber_get_login_url(){
129
  return $ret;
130
  }
131
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  function cerber_calculate_kpi($period = 1){
133
  global $wpdb;
134
 
@@ -533,6 +549,7 @@ function crb_array_column( $arr = array(), $column = '' ) {
533
  * @since 3.0
534
  */
535
  function cerber_is_rest_url(){
 
536
  static $ret = null;
537
 
538
  if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
@@ -547,6 +564,10 @@ function cerber_is_rest_url(){
547
  return $ret;
548
  }
549
 
 
 
 
 
550
  $ret = false;
551
  $uri = '/' . trim( $_SERVER['REQUEST_URI'], '/' ) . '/';
552
 
@@ -593,8 +614,7 @@ function cerber_is_wp_cron() {
593
  if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
594
  return true;
595
  }
596
- $uri = cerber_purify_uri();
597
- if ( substr( $uri, 0, 12 ) == '/wp-cron.php' ) {
598
  return true;
599
  }
600
 
@@ -701,7 +721,7 @@ function cerber_last_uri() {
701
  /**
702
  * Return the name of an executable script in the requested URI if it's present
703
  *
704
- * @return bool|string script name or false if executable script is not detected
705
  */
706
  function cerber_get_uri_script() {
707
  static $ret;
@@ -733,6 +753,10 @@ function cerber_get_uri_script() {
733
  function cerber_detect_exec_extension( $line, $extra = array() ) {
734
  $executable = array( 'php', 'phtm', 'phtml', 'phps', 'shtm', 'shtml', 'jsp', 'asp', 'aspx', 'exe', 'com', 'cgi', 'pl', 'py', 'pyc', 'pyo' );
735
 
 
 
 
 
736
  if ( $extra ) {
737
  $executable = array_merge( $executable, $extra );
738
  }
@@ -801,6 +825,7 @@ function cerber_get_site_root(){
801
  *
802
  * @return bool|mixed|string
803
  */
 
804
  function cerber_purify_uri() {
805
  static $ret;
806
 
@@ -818,7 +843,7 @@ function cerber_purify_uri() {
818
  $ret = preg_replace( '/\/+/', '/', $ret );
819
 
820
  return $ret;
821
- }
822
 
823
  /**
824
  * Remove extra slashes \ / from a script file name
@@ -856,21 +881,21 @@ function cerber_get_labels( $type = 'activity', $all = true ) {
856
  if ( $type == 'activity' ) {
857
 
858
  // User actions
859
- $labels[1]=__('User created','wp-cerber');
860
- $labels[2]=__('User registered','wp-cerber');
861
- $labels[5]=__('Logged in','wp-cerber');
862
- $labels[6]=__('Logged out','wp-cerber');
863
- $labels[7]=__('Login failed','wp-cerber');
864
 
865
  // Cerber actions - IP specific - lockouts
866
- $labels[10]=__('IP blocked','wp-cerber');
867
- $labels[11]=__('Subnet blocked','wp-cerber');
868
  // Cerber actions - common
869
- $labels[12]=__('Citadel activated!','wp-cerber');
870
- $labels[16]=__('Spam comment denied','wp-cerber');
871
- $labels[17]=__('Spam form submission denied','wp-cerber');
872
- $labels[18]=__('Form submission denied','wp-cerber');
873
- $labels[19]=__('Comment denied','wp-cerber');
874
 
875
  // Cerber status // TODO: should be separated as another list ---------
876
  //$labels[13]=__('Locked out','wp-cerber');
@@ -881,25 +906,25 @@ function cerber_get_labels( $type = 'activity', $all = true ) {
881
  // --------------------------------------------------------------
882
 
883
  // Other actions
884
- $labels[20]=__('Password changed','wp-cerber');
885
- $labels[21]=__('Password reset requested','wp-cerber');
886
 
887
- $labels[40]=__('reCAPTCHA verification failed','wp-cerber');
888
- $labels[41]=__('reCAPTCHA settings are incorrect','wp-cerber');
889
- $labels[42]=__('Request to the Google reCAPTCHA service failed','wp-cerber');
890
 
891
- $labels[50]=__('Attempt to access prohibited URL','wp-cerber');
892
- $labels[51]=__('Attempt to log in with non-existent username','wp-cerber');
893
- $labels[52]=__('Attempt to log in with prohibited username','wp-cerber');
894
  // @since 4.9 // TODO 53 & 54 should be a cerber action?
895
- $labels[53]=__('Attempt to log in denied','wp-cerber');
896
- $labels[54]=__('Attempt to register denied','wp-cerber');
897
- $labels[55]=__('Probing for vulnerable PHP code','wp-cerber');
898
- $labels[56]=__('Attempt to upload malicious file denied', 'wp-cerber' );
899
- $labels[57]=__('File upload denied', 'wp-cerber' );
900
 
901
- $labels[70]=__('Request to REST API denied','wp-cerber');
902
- $labels[71]=__('XML-RPC request denied','wp-cerber');
903
 
904
  $labels[100] = __( 'Malicious request denied', 'wp-cerber' );
905
 
@@ -913,6 +938,7 @@ function cerber_get_labels( $type = 'activity', $all = true ) {
913
  $labels[11] = __( 'Bot detected', 'wp-cerber' );
914
  $labels[12] = __( 'Citadel mode is active', 'wp-cerber' );
915
  $labels[13] = __( 'Locked out', 'wp-cerber' );
 
916
  $labels[14] = __( 'IP blacklisted', 'wp-cerber' );
917
  // @since 4.9
918
  $labels[15] = __( 'Malicious activity detected', 'wp-cerber' );
@@ -946,27 +972,34 @@ function crb_get_activity_set($slice = 'malicious') {
946
  }
947
 
948
 
949
- function cerber_get_reason( $id ) {
950
  $labels = array();
951
- $ret = __( 'Unknown', 'wp-cerber' );
952
- $labels[1] = __( 'Limit on login attempts is reached', 'wp-cerber' );
953
- $labels[2] = __( 'Attempt to access', 'wp-cerber' );
954
- $labels[3] = __( 'Attempt to log in with non-existent username', 'wp-cerber' );
955
- $labels[4] = __( 'Attempt to log in with prohibited username', 'wp-cerber' );
956
- $labels[5] = __( 'Limit on failed reCAPTCHA verifications is reached', 'wp-cerber' );
957
- $labels[6] = __( 'Bot activity is detected', 'wp-cerber' );
958
- $labels[7] = __( 'Multiple suspicious activities were detected', 'wp-cerber' );
959
- $labels[8] = __( 'Probing for vulnerable PHP code', 'wp-cerber' );
960
- $labels[9] = __( 'Malicious code detected', 'wp-cerber' );
961
- $labels[10] = __( 'Attempt to upload a file with malicious code', 'wp-cerber' );
962
-
963
- $labels[11] = __( 'Multiple suspicious requests', 'wp-cerber' );
964
-
965
- if ( isset( $labels[ $id ] ) ) {
966
- $ret = $labels[ $id ];
 
 
 
 
 
 
 
967
  }
968
 
969
- return $ret;
970
  }
971
 
972
  function cerber_db_error_log( $msg = null ) {
@@ -993,7 +1026,7 @@ function cerber_admin_notice( $msg ) {
993
  return;
994
  }
995
  $notice = get_site_option( 'cerber_admin_notice', null);
996
- if ( ! $notice ) {
997
  $notice = array();
998
  }
999
  if ( is_array( $msg ) ) {
@@ -1015,15 +1048,15 @@ function cerber_admin_message( $msg ) {
1015
  if ( ! $msg || $cerber_doing_upgrade ) {
1016
  return;
1017
  }
1018
- $notice = get_site_option( 'cerber_admin_message', null);
1019
- if ( ! $notice ) {
1020
  $notice = array();
1021
  }
1022
  if ( is_array( $msg ) ) {
1023
  $notice = array_merge( $notice, $msg );
1024
  }
1025
  else {
1026
- $notice [] = $msg;
1027
  }
1028
  update_site_option( 'cerber_admin_message', $notice );
1029
  }
@@ -1033,6 +1066,57 @@ function crb_clear_admin_msg(){
1033
  update_site_option('cerber_admin_message', null);
1034
  }
1035
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1036
  /**
1037
  * Return human readable "ago" time
1038
  *
@@ -1652,6 +1736,134 @@ function crb_get_mysql_var( $var ) {
1652
  return $cache[ $var ];
1653
  }
1654
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1655
  /**
1656
  * Remove comments from a given piece of code
1657
  *
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
43
  *
44
  */
45
  function cerber_get_wp_scripts(){
46
+ $list = array_map( function ( $e ) {
47
+ return '/' . $e;
48
+ }, array( WP_LOGIN_SCRIPT, WP_REG_URI, WP_XMLRPC_SCRIPT, WP_TRACKBACK_SCRIPT, WP_PING_SCRIPT, WP_SIGNUP_SCRIPT, WP_COMMENT_SCRIPT ) );
49
+ return $list;
50
  }
51
 
52
  /**
133
  return $ret;
134
  }
135
 
136
+ function cerber_get_home_url() {
137
+ static $url;
138
+
139
+ if ( isset( $url ) ) {
140
+ return $url;
141
+ }
142
+
143
+ $url = trim( get_home_url(), '/' );
144
+
145
+ return $url;
146
+ }
147
+
148
  function cerber_calculate_kpi($period = 1){
149
  global $wpdb;
150
 
549
  * @since 3.0
550
  */
551
  function cerber_is_rest_url(){
552
+ global $wp_rewrite;
553
  static $ret = null;
554
 
555
  if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
564
  return $ret;
565
  }
566
 
567
+ if ( ! $wp_rewrite ) { // see get_rest_url() in the multisite mode
568
+ return false;
569
+ }
570
+
571
  $ret = false;
572
  $uri = '/' . trim( $_SERVER['REQUEST_URI'], '/' ) . '/';
573
 
614
  if ( defined( 'DOING_CRON' ) && DOING_CRON ) {
615
  return true;
616
  }
617
+ if ( CRB_Request::is_script( '/wp-cron.php' ) ) {
 
618
  return true;
619
  }
620
 
721
  /**
722
  * Return the name of an executable script in the requested URI if it's present
723
  *
724
+ * @return bool|string The script name or false if executable script is not detected
725
  */
726
  function cerber_get_uri_script() {
727
  static $ret;
753
  function cerber_detect_exec_extension( $line, $extra = array() ) {
754
  $executable = array( 'php', 'phtm', 'phtml', 'phps', 'shtm', 'shtml', 'jsp', 'asp', 'aspx', 'exe', 'com', 'cgi', 'pl', 'py', 'pyc', 'pyo' );
755
 
756
+ if ( empty( $line ) ) {
757
+ return false;
758
+ }
759
+
760
  if ( $extra ) {
761
  $executable = array_merge( $executable, $extra );
762
  }
825
  *
826
  * @return bool|mixed|string
827
  */
828
+ /*
829
  function cerber_purify_uri() {
830
  static $ret;
831
 
843
  $ret = preg_replace( '/\/+/', '/', $ret );
844
 
845
  return $ret;
846
+ }*/
847
 
848
  /**
849
  * Remove extra slashes \ / from a script file name
881
  if ( $type == 'activity' ) {
882
 
883
  // User actions
884
+ $labels[1] = __( 'User created', 'wp-cerber' );
885
+ $labels[2] = __( 'User registered', 'wp-cerber' );
886
+ $labels[5] = __( 'Logged in', 'wp-cerber' );
887
+ $labels[6] = __( 'Logged out', 'wp-cerber' );
888
+ $labels[7] = __( 'Login failed', 'wp-cerber' );
889
 
890
  // Cerber actions - IP specific - lockouts
891
+ $labels[10] = __( 'IP blocked', 'wp-cerber' );
892
+ $labels[11] = __( 'Subnet blocked', 'wp-cerber' );
893
  // Cerber actions - common
894
+ $labels[12] = __( 'Citadel activated!', 'wp-cerber' );
895
+ $labels[16] = __( 'Spam comment denied', 'wp-cerber' );
896
+ $labels[17] = __( 'Spam form submission denied', 'wp-cerber' );
897
+ $labels[18] = __( 'Form submission denied', 'wp-cerber' );
898
+ $labels[19] = __( 'Comment denied', 'wp-cerber' );
899
 
900
  // Cerber status // TODO: should be separated as another list ---------
901
  //$labels[13]=__('Locked out','wp-cerber');
906
  // --------------------------------------------------------------
907
 
908
  // Other actions
909
+ $labels[20] = __( 'Password changed', 'wp-cerber' );
910
+ $labels[21] = __( 'Password reset requested', 'wp-cerber' );
911
 
912
+ $labels[40] = __( 'reCAPTCHA verification failed', 'wp-cerber' );
913
+ $labels[41] = __( 'reCAPTCHA settings are incorrect', 'wp-cerber' );
914
+ $labels[42] = __( 'Request to the Google reCAPTCHA service failed', 'wp-cerber' );
915
 
916
+ $labels[50] = __( 'Attempt to access prohibited URL', 'wp-cerber' );
917
+ $labels[51] = __( 'Attempt to log in with non-existent username', 'wp-cerber' );
918
+ $labels[52] = __( 'Attempt to log in with prohibited username', 'wp-cerber' );
919
  // @since 4.9 // TODO 53 & 54 should be a cerber action?
920
+ $labels[53] = __( 'Attempt to log in denied', 'wp-cerber' );
921
+ $labels[54] = __( 'Attempt to register denied', 'wp-cerber' );
922
+ $labels[55] = __( 'Probing for vulnerable PHP code', 'wp-cerber' );
923
+ $labels[56] = __( 'Attempt to upload malicious file denied', 'wp-cerber' );
924
+ $labels[57] = __( 'File upload denied', 'wp-cerber' );
925
 
926
+ $labels[70] = __( 'Request to REST API denied', 'wp-cerber' );
927
+ $labels[71] = __( 'XML-RPC request denied', 'wp-cerber' );
928
 
929
  $labels[100] = __( 'Malicious request denied', 'wp-cerber' );
930
 
938
  $labels[11] = __( 'Bot detected', 'wp-cerber' );
939
  $labels[12] = __( 'Citadel mode is active', 'wp-cerber' );
940
  $labels[13] = __( 'Locked out', 'wp-cerber' );
941
+ $labels[13] = __( 'IP address is locked out', 'wp-cerber' );
942
  $labels[14] = __( 'IP blacklisted', 'wp-cerber' );
943
  // @since 4.9
944
  $labels[15] = __( 'Malicious activity detected', 'wp-cerber' );
972
  }
973
 
974
 
975
+ function cerber_get_reason( $id = null ) {
976
  $labels = array();
977
+ $labels[701] = __( 'Limit on login attempts is reached', 'wp-cerber' );
978
+ $labels[702] = __( 'Attempt to access', 'wp-cerber' );
979
+ $labels[703] = __( 'Attempt to log in with non-existent username', 'wp-cerber' );
980
+ $labels[704] = __( 'Attempt to log in with prohibited username', 'wp-cerber' );
981
+ $labels[705] = __( 'Limit on failed reCAPTCHA verifications is reached', 'wp-cerber' );
982
+ $labels[706] = __( 'Bot activity is detected', 'wp-cerber' );
983
+ $labels[707] = __( 'Multiple suspicious activities were detected', 'wp-cerber' );
984
+ $labels[708] = __( 'Probing for vulnerable PHP code', 'wp-cerber' );
985
+ $labels[709] = __( 'Malicious code detected', 'wp-cerber' );
986
+ $labels[710] = __( 'Attempt to upload a file with malicious code', 'wp-cerber' );
987
+
988
+ $labels[711] = __( 'Multiple suspicious requests', 'wp-cerber' );
989
+
990
+ if ( $id ) {
991
+ if ( isset( $labels[ $id ] ) ) {
992
+ return $labels[ $id ];
993
+ }
994
+ else {
995
+ return __( 'Unknown', 'wp-cerber' );
996
+ }
997
+ }
998
+ else {
999
+ $labels[702] = __( 'Attempt to access prohibited URL', 'wp-cerber' );
1000
  }
1001
 
1002
+ return $labels;
1003
  }
1004
 
1005
  function cerber_db_error_log( $msg = null ) {
1026
  return;
1027
  }
1028
  $notice = get_site_option( 'cerber_admin_notice', null);
1029
+ if ( ! $notice || ! is_array( $notice ) ) {
1030
  $notice = array();
1031
  }
1032
  if ( is_array( $msg ) ) {
1048
  if ( ! $msg || $cerber_doing_upgrade ) {
1049
  return;
1050
  }
1051
+ $notice = get_site_option( 'cerber_admin_message', null );
1052
+ if ( ! $notice || ! is_array( $notice ) ) {
1053
  $notice = array();
1054
  }
1055
  if ( is_array( $msg ) ) {
1056
  $notice = array_merge( $notice, $msg );
1057
  }
1058
  else {
1059
+ $notice[] = $msg;
1060
  }
1061
  update_site_option( 'cerber_admin_message', $notice );
1062
  }
1066
  update_site_option('cerber_admin_message', null);
1067
  }
1068
 
1069
+ /*
1070
+ Check if currently displayed page is a Cerber admin dashboard page with optional checking a set of GET params
1071
+ */
1072
+ function cerber_is_admin_page( $force = false, $params = array() ) {
1073
+
1074
+ if ( ! is_admin() ) {
1075
+ return false;
1076
+ }
1077
+
1078
+ $ret = false;
1079
+
1080
+ if ( isset( $_GET['page'] ) && false !== strpos( $_GET['page'], 'cerber-' ) ) {
1081
+ $ret = true;
1082
+ if ( $params ) {
1083
+ foreach ( $params as $param => $value ) {
1084
+ if ( ! isset( $_GET[ $param ] ) ) {
1085
+ $ret = false;
1086
+ break;
1087
+ }
1088
+ if ( ! is_array( $value ) ) {
1089
+ if ( $_GET[ $param ] != $value ) {
1090
+ $ret = false;
1091
+ break;
1092
+ }
1093
+ }
1094
+ elseif ( ! in_array( $_GET[ $param ], $value ) ) {
1095
+ $ret = false;
1096
+ break;
1097
+ }
1098
+ }
1099
+ }
1100
+ }
1101
+ if ( $ret || ! $force ) {
1102
+ return $ret;
1103
+ }
1104
+
1105
+ if ( ! $screen = get_current_screen() ) {
1106
+ return false;
1107
+ }
1108
+ if ( $screen->base == 'plugins' ) {
1109
+ return true;
1110
+ }
1111
+
1112
+ /*
1113
+ if ($screen->parent_base == 'options-general') return true;
1114
+ if ($screen->parent_base == 'settings') return true;
1115
+ */
1116
+
1117
+ return false;
1118
+ }
1119
+
1120
  /**
1121
  * Return human readable "ago" time
1122
  *
1736
  return $cache[ $var ];
1737
  }
1738
 
1739
+ /**
1740
+ * Retrieve a value from the key-value storage
1741
+ *
1742
+ * @param string $key
1743
+ * @param integer $id
1744
+ * @param bool $unserialize
1745
+ *
1746
+ * @return bool|array
1747
+ */
1748
+ function cerber_get_set( $key, $id = null, $unserialize = true ) {
1749
+ $key = preg_replace( '/[^a-z_\-\d]/i', '', $key );
1750
+
1751
+ $and = '';
1752
+ if ( $id !== null ) {
1753
+ $and = ' AND the_id = ' . absint( $id );
1754
+ }
1755
+
1756
+ $ret = false;
1757
+
1758
+ if ( $row = cerber_db_get_row( 'SELECT * FROM ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' WHERE the_key = "' . $key . '" ' . $and ) ) {
1759
+ if ( $row['expires'] > 0 && $row['expires'] < time() ) {
1760
+ cerber_delete_set( $key, $id );
1761
+
1762
+ return false;
1763
+ }
1764
+ if ( $unserialize ) {
1765
+ if ( ! empty( $row['the_value'] ) ) {
1766
+ $ret = unserialize( $row['the_value'] );
1767
+ }
1768
+ else {
1769
+ $ret = array();
1770
+ }
1771
+ }
1772
+ else {
1773
+ $ret = $row['the_value'];
1774
+ }
1775
+ }
1776
+
1777
+ return $ret;
1778
+ }
1779
+
1780
+ /**
1781
+ * Update/insert value to the key-value storage
1782
+ *
1783
+ * @param string $key A unique key for the data set
1784
+ * @param $value
1785
+ * @param integer $id An additional numerical key
1786
+ * @param bool $serialize
1787
+ * @param integer $expires Unix timestamp (UTC) when this element will be deleted
1788
+ *
1789
+ * @return bool
1790
+ */
1791
+ function cerber_update_set( $key, $value, $id = null, $serialize = true, $expires = null ) {
1792
+
1793
+ $key = preg_replace( '/[^a-z_\-\d]/i', '', $key );
1794
+
1795
+ $id = ( $id !== null ) ? absint( $id ) : 0;
1796
+
1797
+ if ( $serialize ) {
1798
+ $value = serialize( $value );
1799
+ }
1800
+ $value = cerber_real_escape( $value );
1801
+
1802
+ $expires = ( $expires !== null ) ? absint( $expires ) : 0;
1803
+
1804
+ if ( false !== cerber_get_set( $key, $id, false ) ) {
1805
+ $sql = 'UPDATE ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' SET the_value = "' . $value . '", expires = ' . $expires . ' WHERE the_key = "' . $key . '" AND the_id = ' . $id;
1806
+ }
1807
+ else {
1808
+ $sql = 'INSERT INTO ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' (the_key, the_id, the_value, expires) VALUES ("' . $key . '",' . $id . ',"' . $value . '",' . $expires . ')';
1809
+ }
1810
+
1811
+ unset( $value );
1812
+
1813
+ if ( cerber_db_query( $sql ) ) {
1814
+ return true;
1815
+ }
1816
+ else {
1817
+ return false;
1818
+ }
1819
+ }
1820
+
1821
+ /**
1822
+ * Delete value from the storage
1823
+ *
1824
+ * @param string $key
1825
+ * @param integer $id
1826
+ *
1827
+ * @return bool
1828
+ */
1829
+ function cerber_delete_set( $key, $id = null) {
1830
+
1831
+ $key = preg_replace( '/[^a-z_\-\d]/i', '', $key );
1832
+
1833
+ $and = '';
1834
+ if ( $id !== null ) {
1835
+ $and = ' AND the_id = ' . absint( $id );
1836
+ }
1837
+
1838
+ if ( cerber_db_query( 'DELETE FROM ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' WHERE the_key = "' . $key . '"' . $and ) ) {
1839
+ return true;
1840
+ }
1841
+ else {
1842
+ return false;
1843
+ }
1844
+ }
1845
+
1846
+ /**
1847
+ * Clean up all expired sets. Usually by cron.
1848
+ * @param bool $all if true, deletes all sets that has expiration
1849
+ *
1850
+ * @return bool
1851
+ */
1852
+ function cerber_delete_expired_set( $all = false ) {
1853
+ if ( ! $all ) {
1854
+ $where = 'AND expires < ' . time();
1855
+ }
1856
+ else {
1857
+ $where = '';
1858
+ }
1859
+ if ( cerber_db_query( 'DELETE FROM ' . cerber_get_db_prefix() . CERBER_SETS_TABLE . ' WHERE expires > 0 ' . $where ) ) {
1860
+ return true;
1861
+ }
1862
+ else {
1863
+ return false;
1864
+ }
1865
+ }
1866
+
1867
  /**
1868
  * Remove comments from a given piece of code
1869
  *
dashboard.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
@@ -107,9 +108,9 @@ function cerber_show_lockouts($args = array(), $echo = true){
107
  foreach ($rows as $row) {
108
  $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
109
 
110
- $ip_info = cerber_get_ip_info($row->ip,true);
111
- if ( isset( $ip_info['hostname'] ) ) {
112
- $hostname = $ip_info['hostname'];
113
  }
114
  else {
115
  $ip_id = cerber_get_id_ip( $row->ip );
@@ -348,14 +349,14 @@ function cerber_admin_ajax() {
348
  case 'hostname':
349
  foreach ( $ip_list as $ip_id => $ip ) {
350
  $ip_info = cerber_get_ip_info( $ip );
351
- $response['data'][ $ip_id ] = $ip_info['hostname'];
352
  }
353
  break;
354
  case 'country':
355
  if ($country_list = lab_get_country($ip_list, false)) {
356
  foreach ( $country_list as $ip_id => $country ) {
357
  if ( $country ) {
358
- $response['data'][ $ip_id ] = cerber_get_flag_html( $country ) . cerber_country_name( $country );
359
  }
360
  else {
361
  $response['data'][ $ip_id ] = __( 'Unknown', 'wp-cerber' );
@@ -384,26 +385,29 @@ function cerber_admin_ajax() {
384
  * @since 2.2
385
  *
386
  */
387
- function cerber_get_ip_info($ip, $cache_only = false){
388
 
389
- //$ip_id = str_replace('.','-',$ip);
390
- //$ip_id = str_replace(':','_',$ip_id); // IPv6
391
 
392
- $ip_id = cerber_get_id_ip($ip);
393
-
394
- $ip_info = @unserialize(get_transient($ip_id)); // lazy way
395
- if ($cache_only) return $ip_info;
396
 
397
- if (empty($ip_info['hostname'])) {
398
- $ip_info = array();
399
  $hostname = @gethostbyaddr( $ip );
400
- if ( $hostname ) {
401
- $ip_info['hostname'] = $hostname;
402
- } else {
403
- $ip_info['hostname'] = __( 'unknown', 'wp-cerber' );
 
 
404
  }
405
- set_transient( $ip_id, serialize( array( 'hostname' => $hostname ) ), 24 * 3600 );
 
406
  }
 
407
  return $ip_info;
408
  }
409
 
@@ -567,6 +571,7 @@ function cerber_export_activity() {
567
  __( 'IP address', 'wp-cerber' ),
568
  __( 'Date', 'wp-cerber' ),
569
  __( 'Event', 'wp-cerber' ),
 
570
  __( 'Local User', 'wp-cerber' ),
571
  __( 'User login', 'wp-cerber' ),
572
  __( 'User ID', 'wp-cerber' ),
@@ -574,13 +579,13 @@ function cerber_export_activity() {
574
  'Unix Timestamp',
575
  'Session ID',
576
  'URL',
577
- 'Additional information',
578
  );
579
 
580
  cerber_send_csv_header( 'wp-cerber-activity', $total, $heading, $info );
581
 
582
  $labels = cerber_get_labels( 'activity' );
583
- $status = cerber_get_labels( 'status' );
 
584
 
585
  foreach ( $rows as $row ) {
586
  if ( ! empty( $row->details ) ) {
@@ -593,6 +598,7 @@ function cerber_export_activity() {
593
  $values[] = $row->ip;
594
  $values[] = cerber_date( $row->stamp );
595
  $values[] = $labels[ $row->activity ];
 
596
  $values[] = $row->display_name;
597
  $values[] = $row->ulogin;
598
  $values[] = $row->user_id;
@@ -600,7 +606,6 @@ function cerber_export_activity() {
600
  $values[] = $row->stamp;
601
  $values[] = $row->session_id;
602
  $values[] = $details[4];
603
- $values[] = $status[ $details[0] ];
604
 
605
  cerber_send_csv_line( $values );
606
  }
@@ -649,11 +654,11 @@ function cerber_show_activity($args = array(), $echo = true){
649
  global $crb_ajax_loader, $wp_roles;
650
 
651
  $labels = cerber_get_labels( 'activity' );
652
- $status_labels = cerber_get_labels( 'status' );
653
 
654
- $base_url = cerber_admin_link('activity');
655
  $export_link = '';
656
- $ret = '';
657
 
658
  list( $query, $per_page, $falist, $filter_ip, $filter_login, $user_id, $search ) = cerber_activity_query( $args );
659
 
@@ -694,7 +699,7 @@ function cerber_show_activity($args = array(), $echo = true){
694
  //elseif ($row->activity == 50 && $details[4]) $activity .= ' '.$details[4];
695
 
696
  if ( isset( $details[4] ) && ( $row->activity < 10 || $row->activity > 12 ) ) {
697
- $activity .= '<p class="act-url">URL: ' . $details[4] . '</p>';
698
  }
699
 
700
  }
@@ -717,7 +722,7 @@ function cerber_show_activity($args = array(), $echo = true){
717
  $r = '';
718
  }
719
 
720
- $name = '<a href="' . $base_url . '&filter_user=' . $row->user_id . '"><b>' . $u->display_name . '</b></a><p>' . $r . '</p>';
721
 
722
  if ( 1 == 1 ) {
723
  $avatar = get_avatar( $row->user_id, 32 );
@@ -734,16 +739,18 @@ function cerber_show_activity($args = array(), $echo = true){
734
  $name = '';
735
  }
736
 
737
- $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
738
- $username = '<a href="'.$base_url.'&filter_login='.urlencode($row->user_login).'">'.$row->user_login.'</a>';
739
 
740
- $ip_info = cerber_get_ip_info($row->ip,true);
741
- if (isset($ip_info['hostname'])) $hostname = $ip_info['hostname'];
 
 
742
  else {
743
  $hostname = '<img data-ip-id="' . $ip_id . '" class="crb-no-hostname" src="' . $crb_ajax_loader . '" />' . "\n";
744
  }
745
 
746
- $tip='';
747
 
748
  $acl = cerber_acl_check($row->ip);
749
  if ($acl == 'W') $tip = __('White IP Access List','wp-cerber');
@@ -759,7 +766,7 @@ function cerber_show_activity($args = array(), $echo = true){
759
  $date = cerber_ago_time( $row->stamp );
760
  }
761
  else {
762
- $date = '<span title="'.$row->stamp.' / '.$row->session_id.' / '.$row->activity .'">'.cerber_date( $row->stamp ).'<span/>';
763
  }
764
 
765
  if ( $geo ) {
@@ -1141,55 +1148,6 @@ function cerber_user_extra_view( $user_id, $context = 'activity' ) {
1141
 
1142
  }
1143
 
1144
- /*
1145
- Check if currently displayed page is a Cerber admin dashboard page with optional checking a set of GET params
1146
- */
1147
- function cerber_is_admin_page( $force = false, $params = array() ) {
1148
-
1149
- if ( ! is_admin() ) {
1150
- return false;
1151
- }
1152
-
1153
- $ret = false;
1154
-
1155
- if ( isset( $_GET['page'] ) && false !== strpos( $_GET['page'], 'cerber-' ) ) {
1156
- $ret = true;
1157
- if ( $params ) {
1158
- foreach ( $params as $param => $value ) {
1159
- if ( ! isset( $_GET[ $param ] ) ) {
1160
- $ret = false;
1161
- break;
1162
- }
1163
- if ( ! is_array( $value ) ) {
1164
- if ( $_GET[ $param ] != $value ) {
1165
- $ret = false;
1166
- break;
1167
- }
1168
- }
1169
- elseif ( ! in_array( $_GET[ $param ], $value ) ) {
1170
- $ret = false;
1171
- break;
1172
- }
1173
- }
1174
- }
1175
- }
1176
- if ( $ret || !$force) {
1177
- return $ret;
1178
- }
1179
-
1180
- if ( ! $screen = get_current_screen() ) {
1181
- return false;
1182
- }
1183
- if ( $screen->base == 'plugins' ) {
1184
- return true;
1185
- }
1186
- /*
1187
- if ($screen->parent_base == 'options-general') return true;
1188
- if ($screen->parent_base == 'settings') return true;
1189
- */
1190
- return false;
1191
- }
1192
-
1193
  function cerber_get_admin_page(){
1194
  $ret = '';
1195
  if (!empty($_GET['page'])){
@@ -1833,16 +1791,16 @@ function cerber_show_dashboard() {
1833
 
1834
  //echo '<div style="padding-right: 10px;">';
1835
 
1836
- $kpi_list = cerber_calculate_kpi(1);
1837
 
1838
  $kpi_show = '';
1839
- foreach ($kpi_list as $kpi){
1840
- $kpi_show .= '<td>'.$kpi[1].'</td><td><span style="z-index: 10;">'.$kpi[0].'</span></td>';
1841
- }
1842
 
1843
- $kpi_show = '<table id = "crb-kpi" class="cerber-margin"><tr>'.$kpi_show.'</tr></table>';
1844
 
1845
- // TODO: add link "send daily report to my email"
1846
  echo '<div>' . $kpi_show . '<p style="text-align: right; margin: 0;">' . __( 'in the last 24 hours', 'wp-cerber' ) . '</p></div>';
1847
 
1848
  //$total = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE );
@@ -1851,8 +1809,8 @@ function cerber_show_dashboard() {
1851
  $links = array();
1852
  $links[] = '<a class="crb-button-tiny" href="' . cerber_admin_link( 'activity' ) . '">' . __( 'View all', 'wp-cerber' ) . '</a>';
1853
 
1854
- $labels = cerber_get_labels('activity');
1855
- $set = array( 5 );
1856
  foreach ( $set as $item ) {
1857
  $links[] = '<a class="crb-button-tiny" href="' . cerber_admin_link( 'activity' ) . '&filter_activity=' . $item . '">' . $labels[ $item ] . '</a>';
1858
  }
@@ -1862,12 +1820,12 @@ function cerber_show_dashboard() {
1862
 
1863
 
1864
  //$nav_links = '<span style="display: inline-block; margin-left: 1em;">' . implode(' &nbsp;|&nbsp; ',$links) . '</span>';
1865
- $nav_links = implode(' ', $links);
1866
 
1867
  echo '<table class="cerber-margin"><tr><td><h2 style="margin-bottom:0.5em; margin-right: 1em;">' . __( 'Activity', 'wp-cerber' ) . '</h2></td><td>' . $nav_links . '</td></tr></table>';
1868
 
1869
  cerber_show_activity( array(
1870
- 'filter_activity' => crb_get_activity_set('dashboard'),
1871
  'per_page' => 10,
1872
  'no_navi' => true,
1873
  'no_export' => true,
@@ -1875,19 +1833,14 @@ function cerber_show_dashboard() {
1875
  'date' => 'ago'
1876
  ) );
1877
 
1878
-
1879
- //$total = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_BLOCKS_TABLE );
1880
- //if ($total > $num) $l2 = '<p>Last ' . $num . ' lockouts of '.$total.' are displayed</p>';
1881
-
1882
  $view = '<a class="crb-button-tiny" href="' . cerber_admin_link( 'lockouts' ) . '">' . __( 'View all', 'wp-cerber' ) . '</a>';
1883
- echo '<table class="cerber-margin" style="margin-top:2em;"><tr><td><h2 style="margin-bottom:0.5em; margin-right: 1em;">' . __( 'Recently locked out IP addresses', 'wp-cerber' ) . '</h3></td><td> ' . $view . '</td></tr></table>';
1884
 
1885
  cerber_show_lockouts( array(
1886
  'per_page' => 10,
1887
  'no_navi' => true
1888
  ) );
1889
 
1890
- //echo '</div>';
1891
  }
1892
 
1893
 
@@ -2350,9 +2303,6 @@ function cerber_admin_head() {
2350
  }
2351
 
2352
  /* New */
2353
- .actv11 {
2354
- /*font-weight: bold;*/
2355
- }
2356
  #crb-activity td {
2357
  padding-top: 0.5em;
2358
  padding-bottom: 0.5em;
@@ -2360,19 +2310,30 @@ function cerber_admin_head() {
2360
  #crb-activity td.acinfo div {
2361
  padding: 0.1em 0 0.1em 0.7em;
2362
  }
2363
- .crb10, .crb11, .crb12, .crb16, .crb17, .crb18, .crb19, .crb41, .crb42, .crb51, .crb52, .crb53, .crb54, .crb55, .crb56, .crb70, .crb71 {
2364
  /*border-left: 4px solid #FF5733;*/
2365
  /*font-weight: bold;*/
2366
- border-left: 6px solid #FF5733;
2367
  padding-bottom: 2px;
2368
  }
2369
  .crb10, .crb11 {
 
 
 
 
 
 
 
 
 
2370
  display: inline-block;
2371
  background-color: #FF5733;
 
 
2372
  }
2373
  .crb5 {
2374
  /*border-left: 4px solid #FF5733;*/
2375
- border-left: 6px solid #51AE43;
2376
  padding-bottom: 2px;
2377
  }
2378
  .act-url{
@@ -2937,7 +2898,7 @@ function crb_country_html($code = null, $ip = null){
2937
 
2938
  if ( $code ) {
2939
  //$country = cerber_get_flag_html( $code ) . '<a href="'.$base_url.'&filter_country='.$code.'">'.cerber_country_name( $code ).'</a>';
2940
- $ret = cerber_get_flag_html( $code ) . cerber_country_name( $code );
2941
  }
2942
  else {
2943
  $ip_id = cerber_get_id_ip($ip);
@@ -3069,7 +3030,7 @@ function cerber_show_traffic( $args = array(), $echo = true ) {
3069
  global $wpdb, $crb_ajax_loader, $wp_roles, $wp_cerber_remote;
3070
 
3071
  $labels = cerber_get_labels( 'activity' );
3072
- $status_labels = cerber_get_labels( 'status' );
3073
 
3074
  $base_url = cerber_admin_link( 'traffic' );
3075
  $activity_url = cerber_admin_link( 'activity' );
@@ -3161,18 +3122,18 @@ function cerber_show_traffic( $args = array(), $echo = true ) {
3161
 
3162
  $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
3163
 
3164
- if (!empty($row->hostname)){
3165
  $hostname = $row->hostname;
3166
- }
3167
- else {
3168
- $ip_info = cerber_get_ip_info( $row->ip, true );
3169
- if ( isset( $ip_info['hostname'] ) ) {
3170
- $hostname = $ip_info['hostname'];
3171
- }
3172
- else {
3173
- $hostname = '<img data-ip-id="' . $ip_id . '" class="crb-no-hostname" src="' . $crb_ajax_loader . '" />' . "\n";
3174
- }
3175
- }
3176
 
3177
  $tip='';
3178
 
@@ -3189,7 +3150,7 @@ function cerber_show_traffic( $args = array(), $echo = true ) {
3189
  $date = cerber_ago_time( $row->stamp );
3190
  }
3191
  else {
3192
- $date = '<span title="'.$row->stamp.' / '.$row->session_id.'">'.cerber_date( $row->stamp ).'<span/>';
3193
  }
3194
 
3195
  if ( $geo ) {
@@ -3340,7 +3301,7 @@ function cerber_show_traffic( $args = array(), $echo = true ) {
3340
  $request_details .= '<p style="font-weight: bold;">'.$d[0].'</p>'.$d[1];
3341
  }
3342
 
3343
- $request = '<b>' . htmlentities( urldecode( $row->uri ) ) . '</b>' . '<p style="margin-top:1em;"><span class="crb-' . $row->request_method . '">' . $row->request_method . '</span> ' . $f . $wp_type . ' <span class="crb-' . $row->http_code . '"> HTTP ' . $row->http_code . ' ' . get_status_header_desc( $row->http_code ) . '</span> '.$php_err.' <span>' . $processing . '</span> <a href="javascript:void(0);" class="crb-traffic-more" style="display: none;">Details</a> ' . $activity . ' </p>' . $wp_obj;
3344
 
3345
  // Decorating this table can't be done via simple CSS
3346
  if ( ! empty( $even ) ) {
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
108
  foreach ($rows as $row) {
109
  $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
110
 
111
+ $ip_info = cerber_get_ip_info( $row->ip, true );
112
+ if ( isset( $ip_info['hostname_html'] ) ) {
113
+ $hostname = $ip_info['hostname_html'];
114
  }
115
  else {
116
  $ip_id = cerber_get_id_ip( $row->ip );
349
  case 'hostname':
350
  foreach ( $ip_list as $ip_id => $ip ) {
351
  $ip_info = cerber_get_ip_info( $ip );
352
+ $response['data'][ $ip_id ] = $ip_info['hostname_html'];
353
  }
354
  break;
355
  case 'country':
356
  if ($country_list = lab_get_country($ip_list, false)) {
357
  foreach ( $country_list as $ip_id => $country ) {
358
  if ( $country ) {
359
+ $response['data'][ $ip_id ] = cerber_get_flag_html( $country, cerber_country_name( $country ) );
360
  }
361
  else {
362
  $response['data'][ $ip_id ] = __( 'Unknown', 'wp-cerber' );
385
  * @since 2.2
386
  *
387
  */
388
+ function cerber_get_ip_info( $ip, $cache_only = false ) {
389
 
390
+ $ip_id = cerber_get_id_ip( $ip );
 
391
 
392
+ $ip_info = @unserialize( get_transient( $ip_id ) ); // lazy way
393
+ if ( $cache_only ) {
394
+ return $ip_info;
395
+ }
396
 
397
+ if ( empty( $ip_info['hostname_html'] ) ) {
398
+ $ip_info = array();
399
  $hostname = @gethostbyaddr( $ip );
400
+ if ( ! $hostname ) {
401
+ $hostname = __( 'unknown', 'wp-cerber' );
402
+ }
403
+ $ip_info['hostname'] = $hostname;
404
+ if ( ! filter_var( $hostname, FILTER_VALIDATE_IP ) ) {
405
+ $hostname = str_replace( '.', '.<wbr>', $hostname );
406
  }
407
+ $ip_info['hostname_html'] = $hostname;
408
+ set_transient( $ip_id, serialize( $ip_info ), 24 * 3600 );
409
  }
410
+
411
  return $ip_info;
412
  }
413
 
571
  __( 'IP address', 'wp-cerber' ),
572
  __( 'Date', 'wp-cerber' ),
573
  __( 'Event', 'wp-cerber' ),
574
+ __( 'Additional Details', 'wp-cerber' ),
575
  __( 'Local User', 'wp-cerber' ),
576
  __( 'User login', 'wp-cerber' ),
577
  __( 'User ID', 'wp-cerber' ),
579
  'Unix Timestamp',
580
  'Session ID',
581
  'URL',
 
582
  );
583
 
584
  cerber_send_csv_header( 'wp-cerber-activity', $total, $heading, $info );
585
 
586
  $labels = cerber_get_labels( 'activity' );
587
+ $status = cerber_get_labels( 'status' ) + cerber_get_reason();
588
+
589
 
590
  foreach ( $rows as $row ) {
591
  if ( ! empty( $row->details ) ) {
598
  $values[] = $row->ip;
599
  $values[] = cerber_date( $row->stamp );
600
  $values[] = $labels[ $row->activity ];
601
+ $values[] = $status[ $details[0] ];
602
  $values[] = $row->display_name;
603
  $values[] = $row->ulogin;
604
  $values[] = $row->user_id;
606
  $values[] = $row->stamp;
607
  $values[] = $row->session_id;
608
  $values[] = $details[4];
 
609
 
610
  cerber_send_csv_line( $values );
611
  }
654
  global $crb_ajax_loader, $wp_roles;
655
 
656
  $labels = cerber_get_labels( 'activity' );
657
+ $status_labels = cerber_get_labels( 'status' ) + cerber_get_reason();
658
 
659
+ $base_url = cerber_admin_link( 'activity' );
660
  $export_link = '';
661
+ $ret = '';
662
 
663
  list( $query, $per_page, $falist, $filter_ip, $filter_login, $user_id, $search ) = cerber_activity_query( $args );
664
 
699
  //elseif ($row->activity == 50 && $details[4]) $activity .= ' '.$details[4];
700
 
701
  if ( isset( $details[4] ) && ( $row->activity < 10 || $row->activity > 12 ) ) {
702
+ $activity .= '<p class="act-url">URL: ' . str_replace( array('-','/'), array('<wbr>-','<wbr>/'), $details[4] ) . '</p>';
703
  }
704
 
705
  }
722
  $r = '';
723
  }
724
 
725
+ $name = '<a href="' . $base_url . '&amp;filter_user=' . $row->user_id . '"><b>' . $u->display_name . '</b></a><p>' . $r . '</p>';
726
 
727
  if ( 1 == 1 ) {
728
  $avatar = get_avatar( $row->user_id, 32 );
739
  $name = '';
740
  }
741
 
742
+ $ip = '<a href="' . $base_url . '&amp;filter_ip=' . $row->ip . '">' . $row->ip . '</a>';
743
+ $username = '<a href="' . $base_url . '&amp;filter_login=' . urlencode( $row->user_login ) . '">' . $row->user_login . '</a>';
744
 
745
+ $ip_info = cerber_get_ip_info( $row->ip, true );
746
+ if ( isset( $ip_info['hostname_html'] ) ) {
747
+ $hostname = $ip_info['hostname_html'];
748
+ }
749
  else {
750
  $hostname = '<img data-ip-id="' . $ip_id . '" class="crb-no-hostname" src="' . $crb_ajax_loader . '" />' . "\n";
751
  }
752
 
753
+ $tip = '';
754
 
755
  $acl = cerber_acl_check($row->ip);
756
  if ($acl == 'W') $tip = __('White IP Access List','wp-cerber');
766
  $date = cerber_ago_time( $row->stamp );
767
  }
768
  else {
769
+ $date = '<span title="'.$row->stamp.' / '.$row->session_id.' / '.$row->activity .'">'.cerber_date( $row->stamp ).'</span>';
770
  }
771
 
772
  if ( $geo ) {
1148
 
1149
  }
1150
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1151
  function cerber_get_admin_page(){
1152
  $ret = '';
1153
  if (!empty($_GET['page'])){
1791
 
1792
  //echo '<div style="padding-right: 10px;">';
1793
 
1794
+ $kpi_list = cerber_calculate_kpi( 1 );
1795
 
1796
  $kpi_show = '';
1797
+ foreach ( $kpi_list as $kpi ) {
1798
+ $kpi_show .= '<td>' . $kpi[1] . '</td><td><span style="z-index: 10;">' . $kpi[0] . '</span></td>';
1799
+ }
1800
 
1801
+ $kpi_show = '<table id = "crb-kpi" class="cerber-margin"><tr>' . $kpi_show . '</tr></table>';
1802
 
1803
+ // TODO: add link "send daily report to my email"
1804
  echo '<div>' . $kpi_show . '<p style="text-align: right; margin: 0;">' . __( 'in the last 24 hours', 'wp-cerber' ) . '</p></div>';
1805
 
1806
  //$total = $wpdb->get_var( 'SELECT count(ip) FROM ' . CERBER_LOG_TABLE );
1809
  $links = array();
1810
  $links[] = '<a class="crb-button-tiny" href="' . cerber_admin_link( 'activity' ) . '">' . __( 'View all', 'wp-cerber' ) . '</a>';
1811
 
1812
+ $labels = cerber_get_labels( 'activity' );
1813
+ $set = array( 5 );
1814
  foreach ( $set as $item ) {
1815
  $links[] = '<a class="crb-button-tiny" href="' . cerber_admin_link( 'activity' ) . '&filter_activity=' . $item . '">' . $labels[ $item ] . '</a>';
1816
  }
1820
 
1821
 
1822
  //$nav_links = '<span style="display: inline-block; margin-left: 1em;">' . implode(' &nbsp;|&nbsp; ',$links) . '</span>';
1823
+ $nav_links = implode( ' ', $links );
1824
 
1825
  echo '<table class="cerber-margin"><tr><td><h2 style="margin-bottom:0.5em; margin-right: 1em;">' . __( 'Activity', 'wp-cerber' ) . '</h2></td><td>' . $nav_links . '</td></tr></table>';
1826
 
1827
  cerber_show_activity( array(
1828
+ 'filter_activity' => crb_get_activity_set( 'dashboard' ),
1829
  'per_page' => 10,
1830
  'no_navi' => true,
1831
  'no_export' => true,
1833
  'date' => 'ago'
1834
  ) );
1835
 
 
 
 
 
1836
  $view = '<a class="crb-button-tiny" href="' . cerber_admin_link( 'lockouts' ) . '">' . __( 'View all', 'wp-cerber' ) . '</a>';
1837
+ echo '<table class="cerber-margin" style="margin-top:2em;"><tr><td><h2 style="margin-bottom:0.5em; margin-right: 1em;">' . __( 'Recently locked out IP addresses', 'wp-cerber' ) . '</h2></td><td> ' . $view . '</td></tr></table>';
1838
 
1839
  cerber_show_lockouts( array(
1840
  'per_page' => 10,
1841
  'no_navi' => true
1842
  ) );
1843
 
 
1844
  }
1845
 
1846
 
2303
  }
2304
 
2305
  /* New */
 
 
 
2306
  #crb-activity td {
2307
  padding-top: 0.5em;
2308
  padding-bottom: 0.5em;
2310
  #crb-activity td.acinfo div {
2311
  padding: 0.1em 0 0.1em 0.7em;
2312
  }
2313
+ .crb12, .crb16, .crb17, .crb18, .crb19, .crb41, .crb42, .crb50, .crb51, .crb52, .crb53, .crb54, .crb55, .crb56, .crb70, .crb71, .crb100 {
2314
  /*border-left: 4px solid #FF5733;*/
2315
  /*font-weight: bold;*/
2316
+ border-left: 0.4em solid #FF5733;
2317
  padding-bottom: 2px;
2318
  }
2319
  .crb10, .crb11 {
2320
+ padding-top: 0 !important;
2321
+ padding-bottom: 0 !important;
2322
+ }
2323
+ .crb10 span, .crb11 span {
2324
+ margin-left: -0.7em;
2325
+ padding-left: 1.1em; /* 0.7 + 0.4 */
2326
+ padding-right: 1em;
2327
+ }
2328
+ .crb10 span:first-child, .crb11 span:first-child {
2329
  display: inline-block;
2330
  background-color: #FF5733;
2331
+ margin-right: 1.5em;
2332
+ line-height: 2;
2333
  }
2334
  .crb5 {
2335
  /*border-left: 4px solid #FF5733;*/
2336
+ border-left: 0.4em solid #51AE43;
2337
  padding-bottom: 2px;
2338
  }
2339
  .act-url{
2898
 
2899
  if ( $code ) {
2900
  //$country = cerber_get_flag_html( $code ) . '<a href="'.$base_url.'&filter_country='.$code.'">'.cerber_country_name( $code ).'</a>';
2901
+ $ret = cerber_get_flag_html( $code, cerber_country_name( $code ) );
2902
  }
2903
  else {
2904
  $ip_id = cerber_get_id_ip($ip);
3030
  global $wpdb, $crb_ajax_loader, $wp_roles, $wp_cerber_remote;
3031
 
3032
  $labels = cerber_get_labels( 'activity' );
3033
+ $status_labels = cerber_get_labels( 'status' ) + cerber_get_reason();
3034
 
3035
  $base_url = cerber_admin_link( 'traffic' );
3036
  $activity_url = cerber_admin_link( 'activity' );
3122
 
3123
  $ip = '<a href="'.$base_url.'&filter_ip='.$row->ip.'">'.$row->ip.'</a>';
3124
 
3125
+ if ( ! empty( $row->hostname ) ) {
3126
  $hostname = $row->hostname;
3127
+ }
3128
+ else {
3129
+ $ip_info = cerber_get_ip_info( $row->ip, true );
3130
+ if ( isset( $ip_info['hostname_html'] ) ) {
3131
+ $hostname = $ip_info['hostname_html'];
3132
+ }
3133
+ else {
3134
+ $hostname = '<img data-ip-id="' . $ip_id . '" class="crb-no-hostname" src="' . $crb_ajax_loader . '" />' . "\n";
3135
+ }
3136
+ }
3137
 
3138
  $tip='';
3139
 
3150
  $date = cerber_ago_time( $row->stamp );
3151
  }
3152
  else {
3153
+ $date = '<span title="'.$row->stamp.' / '.$row->session_id.'">'.cerber_date( $row->stamp ).'</span>';
3154
  }
3155
 
3156
  if ( $geo ) {
3301
  $request_details .= '<p style="font-weight: bold;">'.$d[0].'</p>'.$d[1];
3302
  }
3303
 
3304
+ $request = '<b>' . str_replace( array('-','/','%','=','?'), array('<wbr>-','<wbr>/','<wbr>%','<wbr>=','<wbr>?'), htmlentities( urldecode( $row->uri ) ) ) . '</b>' . '<p style="margin-top:1em;"><span class="crb-' . $row->request_method . '">' . $row->request_method . '</span> ' . $f . $wp_type . ' <span class="crb-' . $row->http_code . '"> HTTP ' . $row->http_code . ' ' . get_status_header_desc( $row->http_code ) . '</span> ' . $php_err . ' <span>' . $processing . '</span> <a href="javascript:void(0);" class="crb-traffic-more" style="display: none;">Details</a> ' . $activity . ' </p>' . $wp_obj;
3305
 
3306
  // Decorating this table can't be done via simple CSS
3307
  if ( ! empty( $even ) ) {
jetflow.php CHANGED
@@ -4,7 +4,8 @@
4
  Integration with the jetFlow.io automation and customization plugin, http://jetflow.io
5
  Actions and triggers definitions.
6
 
7
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
8
 
9
  Licenced under the GNU GPL.
10
 
4
  Integration with the jetFlow.io automation and customization plugin, http://jetflow.io
5
  Actions and triggers definitions.
6
 
7
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
8
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
9
 
10
  Licenced under the GNU GPL.
11
 
languages/wp-cerber.pot CHANGED
@@ -5,7 +5,7 @@ msgstr ""
5
  "Project-Id-Version: WP Cerber\n"
6
  "Report-Msgid-Bugs-To: \n"
7
  "POT-Creation-Date: Tue Sep 08 2015 21:38:11 GMT+0300\n"
8
- "POT-Revision-Date: Thu Nov 15 2018 15:41:27 GMT+0300 (Moscow Standard Time)\n"
9
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
@@ -24,667 +24,672 @@ msgstr ""
24
  "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
25
  "X-Generator: Loco - https://localise.biz/"
26
 
27
- #: ../dashboard.php:54
28
  msgid "Cerber Dashboard"
29
  msgstr ""
30
 
31
- #: ../dashboard.php:54 ../dashboard.php:1391 ../dashboard.php:2213 ../settings.
32
- #: php:633
33
  msgid "Dashboard"
34
  msgstr ""
35
 
36
- #: ../dashboard.php:56
37
  msgid "Cerber Traffic Inspector"
38
  msgstr ""
39
 
40
- #: ../dashboard.php:56 ../dashboard.php:1361 ../dashboard.php:2964
41
  msgid "Traffic Inspector"
42
  msgstr ""
43
 
44
- #: ../dashboard.php:60
45
  msgid "Cerber Security Rules"
46
  msgstr ""
47
 
48
- #: ../dashboard.php:60 ../dashboard.php:2626
49
  msgid "Security Rules"
50
  msgstr ""
51
 
52
- #: ../dashboard.php:64 ../cerber-scanner.php:89
53
  msgid "Site Integrity"
54
  msgstr ""
55
 
56
- #: ../dashboard.php:68
57
  msgid "Cerber antispam settings"
58
  msgstr ""
59
 
60
- #: ../dashboard.php:68 ../cerber-load.php:4286 ../settings.php:211
61
  msgid "Antispam"
62
  msgstr ""
63
 
64
- #: ../dashboard.php:69
65
  msgid "Cerber tools"
66
  msgstr ""
67
 
68
- #: ../dashboard.php:69 ../cerber-tools.php:50
69
  msgid "Tools"
70
  msgstr ""
71
 
72
- #: ../dashboard.php:127 ../dashboard.php:207
73
  msgid "Remove"
74
  msgstr ""
75
 
76
- #: ../dashboard.php:134 ../dashboard.php:774 ../dashboard.php:3367 ../cerber-load.
77
- #: php:3999
78
  msgid "IP"
79
  msgstr ""
80
 
81
- #: ../dashboard.php:135 ../dashboard.php:775
82
  msgid "Hostname"
83
  msgstr ""
84
 
85
- #: ../dashboard.php:136 ../dashboard.php:776
86
  msgid "Country"
87
  msgstr ""
88
 
89
- #: ../dashboard.php:137
90
  msgid "Expires"
91
  msgstr ""
92
 
93
- #: ../dashboard.php:138 ../cerber-load.php:3446
94
  msgid "Reason"
95
  msgstr ""
96
 
97
- #: ../dashboard.php:139 ../cerber-scanner.php:5581 ../cerber-scanner.php:5712
98
  msgid "Action"
99
  msgstr ""
100
 
101
- #: ../dashboard.php:153
102
  #, php-format
103
  msgid "Showing last %d records from %d"
104
  msgstr ""
105
 
106
- #: ../dashboard.php:155
107
  msgid "Hint"
108
  msgstr ""
109
 
110
- #: ../dashboard.php:155
111
  msgid "To view activity, click on the IP"
112
  msgstr ""
113
 
114
- #: ../dashboard.php:159
115
  msgid "No lockouts at the moment. The sky is clear."
116
  msgstr ""
117
 
118
- #: ../dashboard.php:179 ../dashboard.php:749 ../dashboard.php:976 ../dashboard.
119
- #: php:1356 ../dashboard.php:3179 ../cerber-load.php:4273 ../settings.php:603
120
  msgid "White IP Access List"
121
  msgstr ""
122
 
123
- #: ../dashboard.php:179
124
  msgid "These IPs will never be locked out"
125
  msgstr ""
126
 
127
- #: ../dashboard.php:181 ../dashboard.php:750 ../dashboard.php:979 ../dashboard.
128
- #: php:1357 ../dashboard.php:3180
129
  msgid "Black IP Access List"
130
  msgstr ""
131
 
132
- #: ../dashboard.php:181
133
  msgid "Nobody can log in or register from these IPs"
134
  msgstr ""
135
 
136
- #: ../dashboard.php:188
137
  msgid "Your IP"
138
  msgstr ""
139
 
140
- #: ../dashboard.php:206 ../dashboard.php:989 ../dashboard.php:1020 ../dashboard.
141
- #: php:1132
142
  msgid "Check for activities"
143
  msgstr ""
144
 
145
- #: ../dashboard.php:213
146
  msgid "List is empty"
147
  msgstr ""
148
 
149
- #: ../dashboard.php:217
150
  msgid "IP address, IPv4 address range or subnet"
151
  msgstr ""
152
 
153
- #: ../dashboard.php:218
154
  msgid "Add IP to the list"
155
  msgstr ""
156
 
157
- #: ../dashboard.php:219
158
  msgid "Optional comment for this entry"
159
  msgstr ""
160
 
161
- #: ../dashboard.php:244 ../dashboard.php:256
162
  msgid "Incorrect IP address or IP range"
163
  msgstr ""
164
 
165
- #: ../dashboard.php:250
166
  #, php-format
167
  msgid "Address %s was added to White IP Access List"
168
  msgstr ""
169
 
170
- #: ../dashboard.php:260
171
  msgid "You cannot add your IP address or network"
172
  msgstr ""
173
 
174
- #: ../dashboard.php:264
175
  #, php-format
176
  msgid "Address %s was added to Black IP Access List"
177
  msgstr ""
178
 
179
- #: ../dashboard.php:361 ../dashboard.php:3109 ../whois.php:223 ../whois.php:254 ..
180
- #: /common.php:951 ../common.php:1326
181
  msgid "Unknown"
182
  msgstr ""
183
 
184
- #: ../dashboard.php:403
185
  msgid "unknown"
186
  msgstr ""
187
 
188
- #: ../dashboard.php:428
189
  msgid "Email has been sent to"
190
  msgstr ""
191
 
192
- #: ../dashboard.php:431
193
  msgid "Unable to send email to"
194
  msgstr ""
195
 
196
- #: ../dashboard.php:437
197
  #, php-format
198
  msgid "Lockout for %s was removed"
199
  msgstr ""
200
 
201
- #: ../dashboard.php:456 ../dashboard.php:2044
202
  msgid "Settings saved"
203
  msgstr ""
204
 
205
- #: ../dashboard.php:567 ../dashboard.php:3015
206
  msgid "IP address"
207
  msgstr ""
208
 
209
- #: ../dashboard.php:568 ../dashboard.php:777 ../dashboard.php:3016 ../dashboard.
210
- #: php:3365
211
  msgid "Date"
212
  msgstr ""
213
 
214
- #: ../dashboard.php:569 ../dashboard.php:778
215
  msgid "Event"
216
  msgstr ""
217
 
218
- #: ../dashboard.php:570 ../dashboard.php:779 ../dashboard.php:3370
 
 
 
 
219
  msgid "Local User"
220
  msgstr ""
221
 
222
- #: ../dashboard.php:571
223
  msgid "User login"
224
  msgstr ""
225
 
226
- #: ../dashboard.php:572 ../dashboard.php:3021
227
  msgid "User ID"
228
  msgstr ""
229
 
230
- #: ../dashboard.php:573 ../dashboard.php:780 ../cerber-load.php:4007
231
  msgid "Username used"
232
  msgstr ""
233
 
234
- #: ../dashboard.php:754 ../dashboard.php:982 ../dashboard.php:3184 ../common.php:
235
- #: 915
236
  msgid "Locked out"
237
  msgstr ""
238
 
239
- #: ../dashboard.php:798 ../dashboard.php:3424
240
  msgid "Export"
241
  msgstr ""
242
 
243
- #: ../dashboard.php:802
244
  msgid "No activity has been logged."
245
  msgstr ""
246
 
247
- #: ../dashboard.php:809
248
  msgid "All events"
249
  msgstr ""
250
 
251
- #: ../dashboard.php:820
252
  msgid "Search for IP or username"
253
  msgstr ""
254
 
255
- #: ../dashboard.php:820
256
  msgid "Filter"
257
  msgstr ""
258
 
259
- #: ../dashboard.php:1016
260
  msgid "Abuse email:"
261
  msgstr ""
262
 
263
- #: ../dashboard.php:1020
264
  msgid "Network:"
265
  msgstr ""
266
 
267
- #: ../dashboard.php:1034
268
  msgid "Add network to the Black List"
269
  msgstr ""
270
 
271
- #: ../dashboard.php:1039
272
  msgid "Add IP to the Black List"
273
  msgstr ""
274
 
275
- #: ../dashboard.php:1095
276
  msgid "Activated"
277
  msgstr ""
278
 
279
- #: ../dashboard.php:1116
280
  msgid "Last seen"
281
  msgstr ""
282
 
283
- #: ../dashboard.php:1126 ../dashboard.php:1221
284
  msgid "Registered"
285
  msgstr ""
286
 
287
- #: ../dashboard.php:1218
288
  msgid "Comments"
289
  msgstr ""
290
 
291
- #: ../dashboard.php:1219
292
  msgid "Last login"
293
  msgstr ""
294
 
295
- #: ../dashboard.php:1220
296
  msgid "Failed login attempts"
297
  msgstr ""
298
 
299
- #: ../dashboard.php:1252 ../dashboard.php:1339 ../common.php:1052
300
  msgid "Never"
301
  msgstr ""
302
 
303
- #: ../dashboard.php:1291
304
  msgid "You"
305
  msgstr ""
306
 
307
- #: ../dashboard.php:1309
308
  msgid "Cerber Quick View"
309
  msgstr ""
310
 
311
- #: ../dashboard.php:1343 ../dashboard.php:1365
312
  msgid "active"
313
  msgstr ""
314
 
315
- #: ../dashboard.php:1343
316
  msgid "deactivate"
317
  msgstr ""
318
 
319
- #: ../dashboard.php:1345
320
  msgid "not active"
321
  msgstr ""
322
 
323
- #: ../dashboard.php:1346 ../dashboard.php:1360
324
  msgid "disabled"
325
  msgstr ""
326
 
327
- #: ../dashboard.php:1351
328
  msgid "failed attempts"
329
  msgstr ""
330
 
331
- #: ../dashboard.php:1351 ../dashboard.php:1352
332
  msgid "in 24 hours"
333
  msgstr ""
334
 
335
- #: ../dashboard.php:1351 ../dashboard.php:1352
336
  msgid "view all"
337
  msgstr ""
338
 
339
- #: ../dashboard.php:1352
340
  msgid "lockouts"
341
  msgstr ""
342
 
343
- #: ../dashboard.php:1354
344
  msgid "Lockouts at the moment"
345
  msgstr ""
346
 
347
- #: ../dashboard.php:1355
348
  msgid "Last lockout"
349
  msgstr ""
350
 
351
- #: ../dashboard.php:1356 ../dashboard.php:1357 ../dashboard.php:2191
352
  msgid "entry"
353
  msgid_plural "entries"
354
  msgstr[0] ""
355
  msgstr[1] ""
356
 
357
- #: ../dashboard.php:1358 ../settings.php:103
358
  msgid "Citadel mode"
359
  msgstr ""
360
 
361
- #: ../dashboard.php:1360
362
  msgid "enabled"
363
  msgstr ""
364
 
365
- #: ../dashboard.php:1365
366
  msgid "no connection"
367
  msgstr ""
368
 
369
- #: ../dashboard.php:1375
370
  msgctxt "Example: Last malware scan: 23 Jan 2018"
371
  msgid "Last malware scan"
372
  msgstr ""
373
 
374
- #: ../dashboard.php:1378 ../dashboard.php:1380 ../cerber-scanner.php:1465
 
375
  msgid "Disabled"
376
  msgstr ""
377
 
378
- #: ../dashboard.php:1379 ../cerber-scanner.php:914
379
  msgid "Quick Scan"
380
  msgstr ""
381
 
382
- #: ../dashboard.php:1381 ../cerber-scanner.php:914
383
  msgid "Full Scan"
384
  msgstr ""
385
 
386
- #: ../dashboard.php:1392 ../dashboard.php:1867 ../cerber-load.php:3990 ..
387
- #: /settings.php:108 ../settings.php:634
388
  msgid "Activity"
389
  msgstr ""
390
 
391
- #: ../dashboard.php:1393
392
  msgid "Traffic"
393
  msgstr ""
394
 
395
- #: ../dashboard.php:1394
396
  msgid "Integrity"
397
  msgstr ""
398
 
399
- #: ../dashboard.php:1670 ../settings.php:83
400
  msgid "My site is behind a reverse proxy"
401
  msgstr ""
402
 
403
- #: ../dashboard.php:1846
404
  msgid "in the last 24 hours"
405
  msgstr ""
406
 
407
- #: ../dashboard.php:1852 ../dashboard.php:1882
408
  msgid "View all"
409
  msgstr ""
410
 
411
- #: ../dashboard.php:1860 ../common.php:860
412
  msgid "User registered"
413
  msgstr ""
414
 
415
- #: ../dashboard.php:1861
416
  msgid "All suspicious activity"
417
  msgstr ""
418
 
419
- #: ../dashboard.php:1883
420
  msgid "Recently locked out IP addresses"
421
  msgstr ""
422
 
423
- #: ../dashboard.php:1908
424
  msgid "Confused about some settings?"
425
  msgstr ""
426
 
427
- #: ../dashboard.php:1909
428
  msgid "You can easily load default recommended settings using button below"
429
  msgstr ""
430
 
431
- #: ../dashboard.php:1911
432
  msgid "Load default settings"
433
  msgstr ""
434
 
435
- #: ../dashboard.php:1913 ../cerber-tools.php:597 ../cerber-scanner.php:5557 ..
436
- #: /cerber-scanner.php:5699
437
  msgid "Are you sure?"
438
  msgstr ""
439
 
440
- #: ../dashboard.php:1919
441
  msgid "doesn't affect Custom login URL and Access Lists"
442
  msgstr ""
443
 
444
- #: ../dashboard.php:1920 ../cerber-load.php:3478 ../cerber-load.php:4275
445
  msgid "Getting Started Guide"
446
  msgstr ""
447
 
448
- #: ../dashboard.php:2027
449
  msgid "Attention! Citadel mode is now active. Nobody is able to log in."
450
  msgstr ""
451
 
452
- #: ../dashboard.php:2028
453
  msgid "Deactivate"
454
  msgstr ""
455
 
456
- #: ../dashboard.php:2029 ../dashboard.php:2442
457
  msgid "View Activity"
458
  msgstr ""
459
 
460
- #: ../dashboard.php:2111
461
  msgid "Subscribe"
462
  msgstr ""
463
 
464
- #: ../dashboard.php:2112 ../cerber-tools.php:281
465
  msgid "Unsubscribe"
466
  msgstr ""
467
 
468
- #: ../dashboard.php:2140
469
  msgid "You've subscribed"
470
  msgstr ""
471
 
472
- #: ../dashboard.php:2143
473
  msgid "You've unsubscribed"
474
  msgstr ""
475
 
476
- #: ../dashboard.php:2214
477
  msgid "Main settings"
478
  msgstr ""
479
 
480
- #: ../dashboard.php:2318
481
  msgid "Are you sure you want to delete selected files?"
482
  msgstr ""
483
 
484
- #: ../dashboard.php:2319
485
  msgid "These files have been moved to the quarantine"
486
  msgstr ""
487
 
488
- #: ../dashboard.php:2322
489
  msgid "Do you want to add selected files to the ignore list?"
490
  msgstr ""
491
 
492
- #: ../dashboard.php:2323
493
  msgid "These files have been added to the ignore list"
494
  msgstr ""
495
 
496
- #: ../dashboard.php:2325
497
  msgid "Some errors occurred"
498
  msgstr ""
499
 
500
- #: ../dashboard.php:2326
501
  msgid "All files have been processed"
502
  msgstr ""
503
 
504
- #: ../dashboard.php:2486
505
  msgid "These features are available in a professional version of the plugin."
506
  msgstr ""
507
 
508
- #: ../dashboard.php:2487
509
  msgid "Know more about all advantages at"
510
  msgstr ""
511
 
512
- #: ../dashboard.php:2618
513
  msgid "Countries"
514
  msgstr ""
515
 
516
- #: ../dashboard.php:2687
517
  #, php-format
518
  msgid "Permitted for one country"
519
  msgid_plural "Permitted for %d countries"
520
  msgstr[0] ""
521
  msgstr[1] ""
522
 
523
- #: ../dashboard.php:2690
524
  #, php-format
525
  msgid "Not permitted for one country"
526
  msgid_plural "Not permitted for %d countries"
527
  msgstr[0] ""
528
  msgstr[1] ""
529
 
530
- #: ../dashboard.php:2698
531
  msgid "No rule"
532
  msgstr ""
533
 
534
- #: ../dashboard.php:2754
535
  msgid "Start typing here to find a country"
536
  msgstr ""
537
 
538
- #: ../dashboard.php:2837
539
  msgid "Click on a country name to add it to the list of selected countries"
540
  msgstr ""
541
 
542
- #: ../dashboard.php:2841
543
  #, php-format
544
  msgctxt "to is a marker of infinitive, e.g. \"to use it\""
545
  msgid "Selected countries are permitted to %s, other countries are not permitted to"
546
  msgstr ""
547
 
548
- #: ../dashboard.php:2844
549
  #, php-format
550
  msgctxt "to is a marker of infinitive, e.g. \"to use it\""
551
  msgid "Selected countries are not permitted to %s, other countries are permitted to"
552
  msgstr ""
553
 
554
- #: ../dashboard.php:2861
555
  msgid "Submit forms"
556
  msgstr ""
557
 
558
- #: ../dashboard.php:2862
559
  msgid "Post comments"
560
  msgstr ""
561
 
562
- #: ../dashboard.php:2863
563
  msgid "Log in to the website"
564
  msgstr ""
565
 
566
- #: ../dashboard.php:2864
567
  msgid "Register on the website"
568
  msgstr ""
569
 
570
- #: ../dashboard.php:2865
571
  msgid "Use XML-RPC"
572
  msgstr ""
573
 
574
- #: ../dashboard.php:2866
575
  msgid "Use REST API"
576
  msgstr ""
577
 
578
- #: ../dashboard.php:2910
579
  msgid "Security rules have been updated"
580
  msgstr ""
581
 
582
- #: ../dashboard.php:2955
583
  msgid "Live Traffic"
584
  msgstr ""
585
 
586
- #: ../dashboard.php:2956 ../cerber-tools.php:90 ../cerber-tools.php:99 ../cerber-
587
  #: scanner.php:76
588
  msgid "Settings"
589
  msgstr ""
590
 
591
- #: ../dashboard.php:3022
592
  msgid "Page generation time"
593
  msgstr ""
594
 
595
- #: ../dashboard.php:3366
596
  msgid "Request"
597
  msgstr ""
598
 
599
- #: ../dashboard.php:3368
600
  msgid "Host Info"
601
  msgstr ""
602
 
603
- #: ../dashboard.php:3369
604
  msgid "User Agent"
605
  msgstr ""
606
 
607
- #: ../dashboard.php:3386
608
  msgid "No requests have been logged."
609
  msgstr ""
610
 
611
- #: ../dashboard.php:3394
612
  msgid "All requests"
613
  msgstr ""
614
 
615
- #: ../dashboard.php:3396
616
  msgid "Suspicious activity"
617
  msgstr ""
618
 
619
- #: ../dashboard.php:3397
620
  msgid "Errors"
621
  msgstr ""
622
 
623
- #: ../dashboard.php:3398 ../settings.php:179
624
  msgid "Logged in users"
625
  msgstr ""
626
 
627
- #: ../dashboard.php:3399
628
  msgid "Not logged in visitors"
629
  msgstr ""
630
 
631
- #: ../dashboard.php:3402
632
  msgid "Form submissions"
633
  msgstr ""
634
 
635
- #: ../dashboard.php:3404
636
  msgid "Page Not Found"
637
  msgstr ""
638
 
639
- #: ../dashboard.php:3413
640
  msgid "Longer than"
641
  msgstr ""
642
 
643
- #: ../dashboard.php:3429
644
  msgid "Refresh"
645
  msgstr ""
646
 
647
- #: ../dashboard.php:3694
648
  msgid "Any"
649
  msgstr ""
650
 
651
- #: ../dashboard.php:3737
652
  msgid "Advanced search"
653
  msgstr ""
654
 
655
- #: ../dashboard.php:3796
656
  msgid "Antispam engine"
657
  msgstr ""
658
 
659
- #: ../dashboard.php:3805
660
  msgid "Antispam and bot detection settings"
661
  msgstr ""
662
 
663
- #: ../dashboard.php:3863
664
  msgid "Help"
665
  msgstr ""
666
 
667
- #: ../dashboard.php:3885
668
  msgid "Log In"
669
  msgstr ""
670
 
671
- #: ../dashboard.php:3886
672
  msgid "Log Out"
673
  msgstr ""
674
 
675
- #: ../dashboard.php:3887
676
  msgid "Register"
677
  msgstr ""
678
 
679
- #: ../dashboard.php:3890
680
  msgid "WooCommerce Log In"
681
  msgstr ""
682
 
683
- #: ../dashboard.php:3891
684
  msgid "WooCommerce Log Out"
685
  msgstr ""
686
 
687
- #: ../dashboard.php:3930 ../dashboard.php:3931
688
  msgid "Add to menu"
689
  msgstr ""
690
 
@@ -709,288 +714,292 @@ msgstr ""
709
  msgid "Gregory"
710
  msgstr ""
711
 
712
- #: ../common.php:116
713
  msgid "Check for requests"
714
  msgstr ""
715
 
716
- #: ../common.php:150
717
  msgid "Malicious activities mitigated"
718
  msgstr ""
719
 
720
- #: ../common.php:153
721
  msgid "Spam comments denied"
722
  msgstr ""
723
 
724
- #: ../common.php:154
725
  msgid "Spam form submissions denied"
726
  msgstr ""
727
 
728
- #: ../common.php:155
729
  msgid "Malicious IP addresses detected"
730
  msgstr ""
731
 
732
- #: ../common.php:156
733
  msgid "Lockouts occurred"
734
  msgstr ""
735
 
736
- #: ../common.php:210 ../common.php:276 ../common.php:281 ../common.php:287 ..
737
- #: /common.php:292 ../cerber-load.php:692 ../cerber-load.php:704 ../cerber-load.
738
- #: php:711 ../cerber-load.php:986 ../cerber-load.php:1208 ../cerber-load.php:1214
739
- #: ../cerber-load.php:1219 ../cerber-load.php:1224 ../cerber-load.php:1230 ..
740
- #: /cerber-load.php:1237 ../cerber-load.php:1339 ../cerber-load.php:1476 ..
741
- #: /settings.php:1040 ../settings.php:1123
742
  msgid "ERROR:"
743
  msgstr ""
744
 
745
- #: ../common.php:859
746
  msgid "User created"
747
  msgstr ""
748
 
749
- #: ../common.php:861
750
  msgid "Logged in"
751
  msgstr ""
752
 
753
- #: ../common.php:862
754
  msgid "Logged out"
755
  msgstr ""
756
 
757
- #: ../common.php:863
758
  msgid "Login failed"
759
  msgstr ""
760
 
761
- #: ../common.php:866
762
  msgid "IP blocked"
763
  msgstr ""
764
 
765
- #: ../common.php:867
766
  msgid "Subnet blocked"
767
  msgstr ""
768
 
769
- #: ../common.php:869
770
  msgid "Citadel activated!"
771
  msgstr ""
772
 
773
- #: ../common.php:870
774
  msgid "Spam comment denied"
775
  msgstr ""
776
 
777
- #: ../common.php:871
778
  msgid "Spam form submission denied"
779
  msgstr ""
780
 
781
- #: ../common.php:872
782
  msgid "Form submission denied"
783
  msgstr ""
784
 
785
- #: ../common.php:873
786
  msgid "Comment denied"
787
  msgstr ""
788
 
789
- #: ../common.php:884
790
  msgid "Password changed"
791
  msgstr ""
792
 
793
- #: ../common.php:885
794
  msgid "Password reset requested"
795
  msgstr ""
796
 
797
- #: ../common.php:887
798
  msgid "reCAPTCHA verification failed"
799
  msgstr ""
800
 
801
- #: ../common.php:888
802
  msgid "reCAPTCHA settings are incorrect"
803
  msgstr ""
804
 
805
- #: ../common.php:889
806
  msgid "Request to the Google reCAPTCHA service failed"
807
  msgstr ""
808
 
809
- #: ../common.php:891
810
  msgid "Attempt to access prohibited URL"
811
  msgstr ""
812
 
813
- #: ../common.php:892 ../common.php:954
814
  msgid "Attempt to log in with non-existent username"
815
  msgstr ""
816
 
817
- #: ../common.php:893 ../common.php:955
818
  msgid "Attempt to log in with prohibited username"
819
  msgstr ""
820
 
821
- #: ../common.php:895
822
  msgid "Attempt to log in denied"
823
  msgstr ""
824
 
825
- #: ../common.php:896
826
  msgid "Attempt to register denied"
827
  msgstr ""
828
 
829
- #: ../common.php:897 ../common.php:959
830
  msgid "Probing for vulnerable PHP code"
831
  msgstr ""
832
 
833
- #: ../common.php:898
834
  msgid "Attempt to upload malicious file denied"
835
  msgstr ""
836
 
837
- #: ../common.php:899
838
  msgid "File upload denied"
839
  msgstr ""
840
 
841
- #: ../common.php:901
842
  msgid "Request to REST API denied"
843
  msgstr ""
844
 
845
- #: ../common.php:902
846
  msgid "XML-RPC request denied"
847
  msgstr ""
848
 
849
- #: ../common.php:904
850
  msgid "Malicious request denied"
851
  msgstr ""
852
 
853
- #: ../common.php:908
854
  msgid "User activated"
855
  msgstr ""
856
 
857
- #: ../common.php:913
858
  msgid "Bot detected"
859
  msgstr ""
860
 
861
- #: ../common.php:914
862
  msgid "Citadel mode is active"
863
  msgstr ""
864
 
865
- #: ../common.php:916
 
 
 
 
866
  msgid "IP blacklisted"
867
  msgstr ""
868
 
869
- #: ../common.php:918
870
  msgid "Malicious activity detected"
871
  msgstr ""
872
 
873
- #: ../common.php:919
874
  msgid "Blocked by country rule"
875
  msgstr ""
876
 
877
- #: ../common.php:920
878
  msgid "Limit reached"
879
  msgstr ""
880
 
881
- #: ../common.php:921
882
  msgid "Multiple suspicious activities"
883
  msgstr ""
884
 
885
- #: ../common.php:922
886
  msgid "Denied"
887
  msgstr ""
888
 
889
- #: ../common.php:923
890
  msgid "Suspicious number of fields"
891
  msgstr ""
892
 
893
- #: ../common.php:924
894
  msgid "Suspicious number of nested values"
895
  msgstr ""
896
 
897
- #: ../common.php:925 ../common.php:960
898
  msgid "Malicious code detected"
899
  msgstr ""
900
 
901
- #: ../common.php:926
902
  msgid "Suspicious SQL code detected"
903
  msgstr ""
904
 
905
- #: ../common.php:927
906
  msgid "Suspicious JavaScript code detected"
907
  msgstr ""
908
 
909
- #: ../common.php:952
910
  msgid "Limit on login attempts is reached"
911
  msgstr ""
912
 
913
- #: ../common.php:953
914
  msgid "Attempt to access"
915
  msgstr ""
916
 
917
- #: ../common.php:956
918
  msgid "Limit on failed reCAPTCHA verifications is reached"
919
  msgstr ""
920
 
921
- #: ../common.php:957
922
  msgid "Bot activity is detected"
923
  msgstr ""
924
 
925
- #: ../common.php:958
926
  msgid "Multiple suspicious activities were detected"
927
  msgstr ""
928
 
929
- #: ../common.php:961
930
  msgid "Attempt to upload a file with malicious code"
931
  msgstr ""
932
 
933
- #: ../common.php:963
934
  msgid "Multiple suspicious requests"
935
  msgstr ""
936
 
937
- #: ../common.php:1047
938
  #, php-format
939
  msgid "%s ago"
940
  msgstr ""
941
 
942
- #: ../common.php:1047
943
  #, php-format
944
  msgctxt "preposition of a period of time like: in 6 hours"
945
  msgid "in %s"
946
  msgstr ""
947
 
948
- #: ../common.php:1133
949
  msgid "Bytes"
950
  msgstr ""
951
 
952
- #: ../common.php:1231 ../settings.php:236
953
  msgid "New version is available"
954
  msgstr ""
955
 
956
- #: ../common.php:1238
957
  #, php-format
958
  msgid "Update to version %s of WP Cerber"
959
  msgstr ""
960
 
961
- #: ../common.php:1257
962
  msgid "Not specified"
963
  msgstr ""
964
 
965
- #: ../common.php:1955
966
  msgid "Unable to create the directory"
967
  msgstr ""
968
 
969
- #: ../common.php:1960
970
  msgid "Destination folder access denied"
971
  msgstr ""
972
 
973
- #: ../common.php:1963
974
  msgid "File not found"
975
  msgstr ""
976
 
977
- #: ../common.php:1966
978
  msgid "Unable to copy the file"
979
  msgstr ""
980
 
981
- #: ../common.php:1972
982
  msgid "Unable to delete the file"
983
  msgstr ""
984
 
985
- #: ../cerber-news.php:138
986
  msgid "Awesome!"
987
  msgstr ""
988
 
989
- #: ../cerber-lab.php:761
990
  msgid "Want to make WP Cerber even more powerful?"
991
  msgstr ""
992
 
993
- #: ../cerber-lab.php:762
994
  msgid ""
995
  "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
996
  "This helps the plugin team to develop new algorithms for WP Cerber that will "
@@ -998,1209 +1007,1225 @@ msgid ""
998
  "everyday. You can disable the sending in the plugin settings at any time."
999
  msgstr ""
1000
 
1001
- #: ../cerber-lab.php:763
1002
  msgid "OK, nail them all"
1003
  msgstr ""
1004
 
1005
- #: ../cerber-lab.php:764
1006
  msgid "NO, maybe later"
1007
  msgstr ""
1008
 
1009
- #: ../cerber-lab.php:765 ../settings.php:607 ../settings.php:610
1010
  msgid "Know more"
1011
  msgstr ""
1012
 
1013
- #: ../cerber-load.php:383
1014
  msgid "You are not allowed to log in. Ask your administrator for assistance."
1015
  msgstr ""
1016
 
1017
- #: ../cerber-load.php:390
1018
  #, php-format
1019
  msgid ""
1020
  "You have exceeded the number of allowed login attempts. Please try again in "
1021
  "%d minutes."
1022
  msgstr ""
1023
 
1024
- #: ../cerber-load.php:409
1025
  #, php-format
1026
  msgid "You have only one attempt remaining."
1027
  msgid_plural "You have %d attempts remaining."
1028
  msgstr[0] ""
1029
  msgstr[1] ""
1030
 
1031
- #: ../cerber-load.php:721
1032
  msgid ""
1033
  "Human verification failed. Please click the square box in the reCAPTCHA "
1034
  "block below."
1035
  msgstr ""
1036
 
1037
- #: ../cerber-load.php:851
1038
  msgid ""
1039
  "> > > Translator of WP Cerber? To get the PRO license for free, drop your "
1040
  "contacts here: https://wpcerber.com/contact/"
1041
  msgstr ""
1042
 
1043
- #: ../cerber-load.php:998
1044
  #, php-format
1045
  msgid ""
1046
  "<strong>ERROR</strong>: The password you entered for the username %s is "
1047
  "incorrect."
1048
  msgstr ""
1049
 
1050
- #: ../cerber-load.php:1209 ../cerber-load.php:1215 ../cerber-load.php:1231 ..
1051
- #: /cerber-load.php:1238
1052
  msgid "You are not allowed to register."
1053
  msgstr ""
1054
 
1055
- #: ../cerber-load.php:1225
1056
  msgid "Username is not allowed. Please choose another one."
1057
  msgstr ""
1058
 
1059
- #: ../cerber-load.php:1476
1060
  msgid "Sorry, human verification failed."
1061
  msgstr ""
1062
 
1063
- #: ../cerber-load.php:3277
1064
  msgid "We're sorry, you are not allowed to proceed"
1065
  msgstr ""
1066
 
1067
- #: ../cerber-load.php:3387
1068
  msgid "WP Cerber notify"
1069
  msgstr ""
1070
 
1071
- #: ../cerber-load.php:3411
1072
  msgid "Citadel mode is activated"
1073
  msgstr ""
1074
 
1075
- #: ../cerber-load.php:3413
1076
  #, php-format
1077
  msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
1078
  msgstr ""
1079
 
1080
- #: ../cerber-load.php:3414
1081
  #, php-format
1082
  msgid "Last failed attempt was at %s from IP %s with user login: %s."
1083
  msgstr ""
1084
 
1085
- #: ../cerber-load.php:3415 ../cerber-load.php:4031
1086
  msgid "View activity in dashboard"
1087
  msgstr ""
1088
 
1089
- #: ../cerber-load.php:3439
1090
  msgid "unspecified"
1091
  msgstr ""
1092
 
1093
- #: ../cerber-load.php:3442
1094
  msgid "Number of lockouts is increasing"
1095
  msgstr ""
1096
 
1097
- #: ../cerber-load.php:3444
1098
  msgid "Number of active lockouts"
1099
  msgstr ""
1100
 
1101
- #: ../cerber-load.php:3445
1102
  #, php-format
1103
  msgid "Last lockout was added: %s for IP %s"
1104
  msgstr ""
1105
 
1106
- #: ../cerber-load.php:3447
1107
  msgid "View activity for this IP"
1108
  msgstr ""
1109
 
1110
- #: ../cerber-load.php:3448
1111
  msgid "View lockouts in dashboard"
1112
  msgstr ""
1113
 
1114
- #: ../cerber-load.php:3451 ../cerber-load.php:3453
1115
  msgid "A new version of WP Cerber is available to install"
1116
  msgstr ""
1117
 
1118
- #: ../cerber-load.php:3452
1119
  msgid "Hi!"
1120
  msgstr ""
1121
 
1122
- #: ../cerber-load.php:3455 ../cerber-load.php:3466
1123
  msgid "Website"
1124
  msgstr ""
1125
 
1126
- #: ../cerber-load.php:3458 ../cerber-load.php:3459
1127
  msgid "The WP Cerber security plugin has been deactivated"
1128
  msgstr ""
1129
 
1130
- #: ../cerber-load.php:3461
1131
  msgid "Not logged in"
1132
  msgstr ""
1133
 
1134
- #: ../cerber-load.php:3467
1135
  msgid "By user"
1136
  msgstr ""
1137
 
1138
- #: ../cerber-load.php:3468
1139
  msgid "From IP address"
1140
  msgstr ""
1141
 
1142
- #: ../cerber-load.php:3471
1143
  msgid "From country"
1144
  msgstr ""
1145
 
1146
- #: ../cerber-load.php:3475
1147
  msgid "The WP Cerber security plugin is now active"
1148
  msgstr ""
1149
 
1150
- #: ../cerber-load.php:3476 ../cerber-load.php:4272
1151
  msgid "WP Cerber is now active and has started protecting your site"
1152
  msgstr ""
1153
 
1154
- #: ../cerber-load.php:3483
1155
  msgid "New Custom login URL"
1156
  msgstr ""
1157
 
1158
- #: ../cerber-load.php:3487 ../cerber-load.php:3488
1159
  msgid "A new activity has been recorded"
1160
  msgstr ""
1161
 
1162
- #: ../cerber-load.php:3493
1163
  msgid "Weekly report"
1164
  msgstr ""
1165
 
1166
- #: ../cerber-load.php:3496 ../cerber-load.php:3506
1167
  msgid "To change reporting settings visit"
1168
  msgstr ""
1169
 
1170
- #: ../cerber-load.php:3503
1171
  msgid "Scanner Report"
1172
  msgstr ""
1173
 
1174
- #: ../cerber-load.php:3529
1175
  msgid "Your login page:"
1176
  msgstr ""
1177
 
1178
- #: ../cerber-load.php:3533
1179
  msgid "Your license is valid until"
1180
  msgstr ""
1181
 
1182
- #: ../cerber-load.php:3536
1183
  msgid "This message was sent by"
1184
  msgstr ""
1185
 
1186
- #: ../cerber-load.php:3557
1187
  #, php-format
1188
  msgid "Your last sign-in was %s from %s"
1189
  msgstr ""
1190
 
1191
- #: ../cerber-load.php:3627
1192
  msgid "Weekly Report"
1193
  msgstr ""
1194
 
1195
- #: ../cerber-load.php:3639
1196
  msgid "Activity details"
1197
  msgstr ""
1198
 
1199
- #: ../cerber-load.php:3653
1200
  msgid "Attempts to log in with non-existent username"
1201
  msgstr ""
1202
 
1203
- #: ../cerber-load.php:4003
1204
  msgid "User"
1205
  msgstr ""
1206
 
1207
- #: ../cerber-load.php:4011
1208
  msgid "Search string"
1209
  msgstr ""
1210
 
1211
- #: ../cerber-load.php:4032
1212
  msgid "To unsubscribe click here"
1213
  msgstr ""
1214
 
1215
- #: ../cerber-load.php:4238
1216
  #, php-format
1217
  msgid "The WP Cerber requires PHP %s or higher. You are running"
1218
  msgstr ""
1219
 
1220
- #: ../cerber-load.php:4242
1221
  #, php-format
1222
  msgid "The WP Cerber requires WordPress %s or higher. You are running"
1223
  msgstr ""
1224
 
1225
- #: ../cerber-load.php:4251
1226
  msgid "Can't activate WP Cerber due to a database error."
1227
  msgstr ""
1228
 
1229
- #: ../cerber-load.php:4273
1230
  msgid "Your IP address is added to the"
1231
  msgstr ""
1232
 
1233
- #: ../cerber-load.php:4283 ../settings.php:636
1234
  msgid "Main Settings"
1235
  msgstr ""
1236
 
1237
- #: ../cerber-load.php:4284 ../cerber-scanner.php:75
1238
  msgid "Security Scanner"
1239
  msgstr ""
1240
 
1241
- #: ../cerber-load.php:4285 ../settings.php:637 ../cerber-tools.php:91 ../cerber-
1242
- #: tools.php:100 ../cerber-tools.php:187
1243
  msgid "Access Lists"
1244
  msgstr ""
1245
 
1246
- #: ../cerber-load.php:4287 ../settings.php:638
1247
  msgid "Hardening"
1248
  msgstr ""
1249
 
1250
- #: ../cerber-load.php:4288 ../settings.php:82 ../settings.php:106 ../settings.php:
1251
- #: 640
1252
  msgid "Notifications"
1253
  msgstr ""
1254
 
1255
- #: ../cerber-load.php:4289
1256
  msgid "Import settings"
1257
  msgstr ""
1258
 
1259
- #: ../settings.php:74
1260
  msgid "Plugin initialization"
1261
  msgstr ""
1262
 
1263
- #: ../settings.php:75
1264
  msgid "Load security engine"
1265
  msgstr ""
1266
 
1267
- #: ../settings.php:75
1268
  msgid "Legacy mode"
1269
  msgstr ""
1270
 
1271
- #: ../settings.php:75
1272
  msgid "Standard mode"
1273
  msgstr ""
1274
 
1275
- #: ../settings.php:77
1276
  msgid "Limit login attempts"
1277
  msgstr ""
1278
 
1279
- #: ../settings.php:78
1280
  msgid "Attempts"
1281
  msgstr ""
1282
 
1283
- #: ../settings.php:79
1284
  msgid "Lockout duration"
1285
  msgstr ""
1286
 
1287
- #: ../settings.php:79 ../settings.php:105
1288
  msgid "minutes"
1289
  msgstr ""
1290
 
1291
- #: ../settings.php:80
1292
  msgid "Aggressive lockout"
1293
  msgstr ""
1294
 
1295
- #: ../settings.php:81 ../settings.php:293
1296
  msgid "Use White IP Access List"
1297
  msgstr ""
1298
 
1299
- #: ../settings.php:81
1300
  msgid "Apply limit login rules to IP addresses in the White IP Access List"
1301
  msgstr ""
1302
 
1303
- #: ../settings.php:83
1304
  msgid "Site connection"
1305
  msgstr ""
1306
 
1307
- #: ../settings.php:85
1308
  msgid "Proactive security rules"
1309
  msgstr ""
1310
 
1311
- #: ../settings.php:86
1312
  msgid "Block subnet"
1313
  msgstr ""
1314
 
1315
- #: ../settings.php:86
1316
  msgid "Always block entire subnet Class C of intruders IP"
1317
  msgstr ""
1318
 
1319
- #: ../settings.php:87
1320
  msgid "Non-existent users"
1321
  msgstr ""
1322
 
1323
- #: ../settings.php:87
1324
  msgid "Immediately block IP when attempting to login with a non-existent username"
1325
  msgstr ""
1326
 
1327
- #: ../settings.php:88
1328
  msgid "Disable dashboard redirection"
1329
  msgstr ""
1330
 
1331
- #: ../settings.php:88
1332
  msgid ""
1333
  "Disable automatic redirection to the login page when /wp-admin/ is requested "
1334
  "by an unauthorized request"
1335
  msgstr ""
1336
 
1337
- #: ../settings.php:89
1338
  msgid "Request wp-login.php"
1339
  msgstr ""
1340
 
1341
- #: ../settings.php:89
1342
  msgid "Immediately block IP after any request to wp-login.php"
1343
  msgstr ""
1344
 
1345
- #: ../settings.php:90
1346
  msgid "Display 404 page"
1347
  msgstr ""
1348
 
1349
- #: ../settings.php:90
1350
  msgid "Use 404 template from the active theme"
1351
  msgstr ""
1352
 
1353
- #: ../settings.php:90
1354
  msgid "Display simple 404 page"
1355
  msgstr ""
1356
 
1357
- #: ../settings.php:92
1358
  msgid "Custom login page"
1359
  msgstr ""
1360
 
1361
- #: ../settings.php:93
1362
  msgid "Custom login URL"
1363
  msgstr ""
1364
 
1365
- #: ../settings.php:98
1366
  msgid "Custom login URL may contain only letters, numbers, dashes and underscores"
1367
  msgstr ""
1368
 
1369
- #: ../settings.php:99
1370
  msgid "must not overlap with the existing pages or posts slug"
1371
  msgstr ""
1372
 
1373
- #: ../settings.php:101
1374
  msgid "Disable wp-login.php"
1375
  msgstr ""
1376
 
1377
- #: ../settings.php:101
1378
  msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
1379
  msgstr ""
1380
 
1381
- #: ../settings.php:104
1382
  msgid "Threshold"
1383
  msgstr ""
1384
 
1385
- #: ../settings.php:105 ../cerber-scanner.php:3868
1386
  msgid "Duration"
1387
  msgstr ""
1388
 
1389
- #: ../settings.php:106
1390
  msgid "Send notification to admin email"
1391
  msgstr ""
1392
 
1393
- #: ../settings.php:106 ../settings.php:776 ../settings.php:898
1394
  msgid "Click to send test"
1395
  msgstr ""
1396
 
1397
- #: ../settings.php:109 ../settings.php:374
1398
  msgid "Keep records for"
1399
  msgstr ""
1400
 
1401
- #: ../settings.php:109 ../settings.php:191 ../settings.php:378 ../settings.php:449
1402
  msgid "days"
1403
  msgstr ""
1404
 
1405
- #: ../settings.php:110
1406
  msgid "Cerber Lab connection"
1407
  msgstr ""
1408
 
1409
- #: ../settings.php:110
1410
  msgid "Send malicious IP addresses to the Cerber Lab"
1411
  msgstr ""
1412
 
1413
- #: ../settings.php:111
1414
  msgid "Cerber Lab protocol"
1415
  msgstr ""
1416
 
1417
- #: ../settings.php:112
1418
  msgid "Use file"
1419
  msgstr ""
1420
 
1421
- #: ../settings.php:112
1422
  msgid "Write failed login attempts to the file"
1423
  msgstr ""
1424
 
1425
- #: ../settings.php:114
1426
  msgid "Preferences"
1427
  msgstr ""
1428
 
1429
- #: ../settings.php:115
1430
  msgid "Drill down IP"
1431
  msgstr ""
1432
 
1433
- #: ../settings.php:115
1434
  msgid "Retrieve extra WHOIS information for IP"
1435
  msgstr ""
1436
 
1437
- #: ../settings.php:116
1438
  msgid "Date format"
1439
  msgstr ""
1440
 
1441
- #: ../settings.php:116
1442
  #, php-format
1443
  msgid "if empty, the default format %s will be used"
1444
  msgstr ""
1445
 
1446
- #: ../settings.php:117
1447
  msgid "Use English for admin interface"
1448
  msgstr ""
1449
 
1450
- #: ../settings.php:123
1451
  msgid "Hardening WordPress"
1452
  msgstr ""
1453
 
1454
- #: ../settings.php:124
1455
  msgid "Stop user enumeration"
1456
  msgstr ""
1457
 
1458
- #: ../settings.php:124
1459
  msgid "Block access to user pages like /?author=n and user data via REST API"
1460
  msgstr ""
1461
 
1462
- #: ../settings.php:125
1463
  msgid "Protect admin scripts"
1464
  msgstr ""
1465
 
1466
- #: ../settings.php:125
1467
  msgid "Block unauthorized access to load-scripts.php and load-styles.php"
1468
  msgstr ""
1469
 
1470
- #: ../settings.php:128
1471
  msgid "Disable PHP in uploads"
1472
  msgstr ""
1473
 
1474
- #: ../settings.php:128
1475
  msgid "Disable execution of PHP scripts in the WordPress media folder"
1476
  msgstr ""
1477
 
1478
- #: ../settings.php:130
1479
  msgid "Disable PHP error displaying"
1480
  msgstr ""
1481
 
1482
- #: ../settings.php:132
1483
  msgid "Disable XML-RPC"
1484
  msgstr ""
1485
 
1486
- #: ../settings.php:132
1487
  msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
1488
  msgstr ""
1489
 
1490
- #: ../settings.php:133
1491
  msgid "Disable feeds"
1492
  msgstr ""
1493
 
1494
- #: ../settings.php:133
1495
  msgid "Block access to the RSS, Atom and RDF feeds"
1496
  msgstr ""
1497
 
1498
- #: ../settings.php:134
1499
  msgid "Disable REST API"
1500
  msgstr ""
1501
 
1502
- #: ../settings.php:134
1503
  msgid "Block access to the WordPress REST API except the following"
1504
  msgstr ""
1505
 
1506
- #: ../settings.php:135
1507
  msgid "Allow REST API for logged in users"
1508
  msgstr ""
1509
 
1510
- #: ../settings.php:142
1511
  msgid ""
1512
  "Specify REST API namespaces to be allowed if REST API is disabled. One "
1513
  "string per line."
1514
  msgstr ""
1515
 
1516
- #: ../settings.php:152
1517
  msgid "User related settings"
1518
  msgstr ""
1519
 
1520
- #: ../settings.php:154
1521
  msgid "Registration limit"
1522
  msgstr ""
1523
 
1524
- #: ../settings.php:156
1525
  msgid "Prohibited usernames"
1526
  msgstr ""
1527
 
1528
- #: ../settings.php:162
1529
  msgid ""
1530
  "Usernames from this list are not allowed to log in or register. Any IP "
1531
  "address, have tried to use any of these usernames, will be immediately "
1532
  "blocked. Use comma to separate logins."
1533
  msgstr ""
1534
 
1535
- #: ../settings.php:162
1536
  msgid "To specify a REGEX pattern wrap a pattern in two forward slashes."
1537
  msgstr ""
1538
 
1539
- #: ../settings.php:164
1540
  msgid "User session expire"
1541
  msgstr ""
1542
 
1543
- #: ../settings.php:164
1544
  msgid "in minutes (leave empty to use default WP value)"
1545
  msgstr ""
1546
 
1547
- #: ../settings.php:165
1548
  msgid "Sort users in dashboard"
1549
  msgstr ""
1550
 
1551
- #: ../settings.php:165
1552
  msgid "by date of registration"
1553
  msgstr ""
1554
 
1555
- #: ../settings.php:172
1556
  msgid "Cerber antispam engine"
1557
  msgstr ""
1558
 
1559
- #: ../settings.php:173
1560
  msgid "Comment form"
1561
  msgstr ""
1562
 
1563
- #: ../settings.php:173
1564
  msgid "Protect comment form with bot detection engine"
1565
  msgstr ""
1566
 
1567
- #: ../settings.php:174 ../settings.php:202
1568
  msgid "Registration form"
1569
  msgstr ""
1570
 
1571
- #: ../settings.php:174
1572
  msgid "Protect registration form with bot detection engine"
1573
  msgstr ""
1574
 
1575
- #: ../settings.php:175
1576
  msgid "Other forms"
1577
  msgstr ""
1578
 
1579
- #: ../settings.php:175
1580
  msgid "Protect all forms on the website with bot detection engine"
1581
  msgstr ""
1582
 
1583
- #: ../settings.php:177
1584
  msgid "Adjust antispam engine"
1585
  msgstr ""
1586
 
1587
- #: ../settings.php:178
1588
  msgid "Safe mode"
1589
  msgstr ""
1590
 
1591
- #: ../settings.php:178
1592
  msgid "Use less restrictive policies (allow AJAX)"
1593
  msgstr ""
1594
 
1595
- #: ../settings.php:179
1596
  msgid "Disable bot detection engine for logged in users"
1597
  msgstr ""
1598
 
1599
- #: ../settings.php:180
1600
  msgid "Query whitelist"
1601
  msgstr ""
1602
 
1603
- #: ../settings.php:186
1604
  msgid ""
1605
  "Enter a part of query string or query path to exclude a request from "
1606
  "inspection by the engine. One item per line."
1607
  msgstr ""
1608
 
1609
- #: ../settings.php:186 ../settings.php:304
1610
  msgid "To specify a REGEX pattern, enclose a whole line in two braces."
1611
  msgstr ""
1612
 
1613
- #: ../settings.php:189
1614
  msgid "Comment processing"
1615
  msgstr ""
1616
 
1617
- #: ../settings.php:190
1618
  msgid "If a spam comment detected"
1619
  msgstr ""
1620
 
1621
- #: ../settings.php:190
1622
  msgid "Deny it completely"
1623
  msgstr ""
1624
 
1625
- #: ../settings.php:190
1626
  msgid "Mark it as spam"
1627
  msgstr ""
1628
 
1629
- #: ../settings.php:191
1630
  msgid "Trash spam comments"
1631
  msgstr ""
1632
 
1633
- #: ../settings.php:191
1634
  msgid "Move spam comments to trash after"
1635
  msgstr ""
1636
 
1637
- #: ../settings.php:197
1638
  msgid "reCAPTCHA settings"
1639
  msgstr ""
1640
 
1641
- #: ../settings.php:198
1642
  msgid "Site key"
1643
  msgstr ""
1644
 
1645
- #: ../settings.php:199
1646
  msgid "Secret key"
1647
  msgstr ""
1648
 
1649
- #: ../settings.php:200
1650
  msgid "Invisible reCAPTCHA"
1651
  msgstr ""
1652
 
1653
- #: ../settings.php:200
1654
  msgid "Enable invisible reCAPTCHA"
1655
  msgstr ""
1656
 
1657
- #: ../settings.php:200
1658
  msgid ""
1659
  "(do not enable it unless you get and enter the Site and Secret keys for the "
1660
  "invisible version)"
1661
  msgstr ""
1662
 
1663
- #: ../settings.php:202
1664
  msgid "Enable reCAPTCHA for WordPress registration form"
1665
  msgstr ""
1666
 
1667
- #: ../settings.php:203
1668
  msgid "Enable reCAPTCHA for WooCommerce registration form"
1669
  msgstr ""
1670
 
1671
- #: ../settings.php:205
1672
  msgid "Lost password form"
1673
  msgstr ""
1674
 
1675
- #: ../settings.php:205
1676
  msgid "Enable reCAPTCHA for WordPress lost password form"
1677
  msgstr ""
1678
 
1679
- #: ../settings.php:206
1680
  msgid "Enable reCAPTCHA for WooCommerce lost password form"
1681
  msgstr ""
1682
 
1683
- #: ../settings.php:208
1684
  msgid "Login form"
1685
  msgstr ""
1686
 
1687
- #: ../settings.php:208
1688
  msgid "Enable reCAPTCHA for WordPress login form"
1689
  msgstr ""
1690
 
1691
- #: ../settings.php:209
1692
  msgid "Enable reCAPTCHA for WooCommerce login form"
1693
  msgstr ""
1694
 
1695
- #: ../settings.php:211
1696
  msgid "Enable reCAPTCHA for WordPress comment form"
1697
  msgstr ""
1698
 
1699
- #: ../settings.php:212
1700
  msgid "Disable reCAPTCHA for logged in users"
1701
  msgstr ""
1702
 
1703
- #: ../settings.php:214
1704
  msgid "Limit attempts"
1705
  msgstr ""
1706
 
1707
- #: ../settings.php:214
1708
  #, php-format
1709
  msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1710
  msgstr ""
1711
 
1712
- #: ../settings.php:220
1713
  msgid "Email notifications"
1714
  msgstr ""
1715
 
1716
- #: ../settings.php:223 ../settings.php:264 ../settings.php:511
1717
  msgid "Email Address"
1718
  msgstr ""
1719
 
1720
- #: ../settings.php:227 ../settings.php:269 ../settings.php:337 ../settings.php:515
1721
  msgid "Use comma to specify multiple values"
1722
  msgstr ""
1723
 
1724
- #: ../settings.php:232
1725
  #, php-format
1726
  msgid "if empty, the admin email %s will be used"
1727
  msgstr ""
1728
 
1729
- #: ../settings.php:235
1730
  msgid "Notification limit"
1731
  msgstr ""
1732
 
1733
- #: ../settings.php:235
1734
  msgid "notification letters allowed per hour (0 means unlimited)"
1735
  msgstr ""
1736
 
1737
- #: ../settings.php:241
1738
  msgid "Push notifications"
1739
  msgstr ""
1740
 
1741
- #: ../settings.php:249
1742
  msgid "All connected devices"
1743
  msgstr ""
1744
 
1745
- #: ../settings.php:252
1746
  msgid "No devices found"
1747
  msgstr ""
1748
 
1749
- #: ../settings.php:256
1750
  msgid "Not available"
1751
  msgstr ""
1752
 
1753
- #: ../settings.php:261
1754
  msgid "Weekly reports"
1755
  msgstr ""
1756
 
1757
- #: ../settings.php:262
1758
  msgid "Enable reporting"
1759
  msgstr ""
1760
 
1761
- #: ../settings.php:274 ../settings.php:520
1762
  msgid "if empty, email from notification settings will be used"
1763
  msgstr ""
1764
 
1765
- #: ../settings.php:282
1766
  msgid "Traffic Inspection"
1767
  msgstr ""
1768
 
1769
- #: ../settings.php:283
1770
  msgid "Enable traffic inspection"
1771
  msgstr ""
1772
 
1773
- #: ../settings.php:288
1774
- msgid "Enable error shielding"
 
 
 
 
1775
  msgstr ""
1776
 
1777
- #: ../settings.php:298
1778
  msgid "Request whitelist"
1779
  msgstr ""
1780
 
1781
- #: ../settings.php:304
1782
  msgid ""
1783
  "Enter a request URI to exclude the request from inspection. One item per "
1784
  "line."
1785
  msgstr ""
1786
 
1787
- #: ../settings.php:307
 
 
 
 
 
 
 
 
 
 
 
 
1788
  msgid "Logging"
1789
  msgstr ""
1790
 
1791
- #: ../settings.php:308
1792
  msgid "Logging mode"
1793
  msgstr ""
1794
 
1795
- #: ../settings.php:314
1796
  msgid "Logging disabled"
1797
  msgstr ""
1798
 
1799
- #: ../settings.php:315
1800
  msgid "Smart"
1801
  msgstr ""
1802
 
1803
- #: ../settings.php:316
1804
  msgid "All traffic"
1805
  msgstr ""
1806
 
1807
- #: ../settings.php:320
1808
  msgid "Ignore crawlers"
1809
  msgstr ""
1810
 
1811
- #: ../settings.php:325
1812
  msgid "Save request fields"
1813
  msgstr ""
1814
 
1815
- #: ../settings.php:330
1816
  msgid "Mask these form fields"
1817
  msgstr ""
1818
 
1819
- #: ../settings.php:342
1820
  msgid "Save request headers"
1821
  msgstr ""
1822
 
1823
- #: ../settings.php:348
1824
  msgid "Save $_SERVER"
1825
  msgstr ""
1826
 
1827
- #: ../settings.php:354
1828
  msgid "Save request cookies"
1829
  msgstr ""
1830
 
1831
- #: ../settings.php:360
1832
  msgid "Save software errors"
1833
  msgstr ""
1834
 
1835
- #: ../settings.php:366
1836
  msgid "Page generation time threshold"
1837
  msgstr ""
1838
 
1839
- #: ../settings.php:371
1840
  msgid "milliseconds"
1841
  msgstr ""
1842
 
1843
- #: ../settings.php:387
1844
  msgid "Scanner settings"
1845
  msgstr ""
1846
 
1847
- #: ../settings.php:388
1848
  msgid "Custom signatures"
1849
  msgstr ""
1850
 
1851
- #: ../settings.php:394
1852
  msgid ""
1853
  "Specify custom PHP code signatures. One item per line. To specify a REGEX "
1854
  "pattern, enclose a whole line in two braces."
1855
  msgstr ""
1856
 
1857
- #: ../settings.php:396
1858
  msgid "Unwanted file extensions"
1859
  msgstr ""
1860
 
1861
- #: ../settings.php:402
1862
  msgid ""
1863
  "Specify file extensions to search for. Full scan only. Use comma to separate "
1864
  "items."
1865
  msgstr ""
1866
 
1867
- #: ../settings.php:404
1868
  msgid "Directories to exclude"
1869
  msgstr ""
1870
 
1871
- #: ../settings.php:410
1872
  msgid ""
1873
  "Specify directories to exclude from scanning. Use absolute paths. One item "
1874
  "per line."
1875
  msgstr ""
1876
 
1877
- #: ../settings.php:412
1878
  msgid "Monitor new files"
1879
  msgstr ""
1880
 
1881
- #: ../settings.php:419
1882
  msgid "Monitor modified files"
1883
  msgstr ""
1884
 
1885
- #: ../settings.php:425
1886
  msgid "Scan temporary directory"
1887
  msgstr ""
1888
 
1889
- #: ../settings.php:432
1890
  msgid "Scan session directory"
1891
  msgstr ""
1892
 
1893
- #: ../settings.php:438
1894
  msgid "Enable diagnostic log"
1895
  msgstr ""
1896
 
1897
- #: ../settings.php:444
1898
  msgid "Delete quarantined files after"
1899
  msgstr ""
1900
 
1901
- #: ../settings.php:458
1902
  msgid "Automated recurring scan schedule"
1903
  msgstr ""
1904
 
1905
- #: ../settings.php:459
1906
  msgid "Launch Quick Scan"
1907
  msgstr ""
1908
 
1909
- #: ../settings.php:466
1910
  msgid "Launch Full Scan"
1911
  msgstr ""
1912
 
1913
- #: ../settings.php:474
1914
  msgid "Scan results reporting"
1915
  msgstr ""
1916
 
1917
- #: ../settings.php:476 ../settings.php:536
1918
  msgid "Low severity"
1919
  msgstr ""
1920
 
1921
- #: ../settings.php:476 ../settings.php:536
1922
  msgid "Medium severity"
1923
  msgstr ""
1924
 
1925
- #: ../settings.php:476 ../settings.php:536
1926
  msgid "High severity"
1927
  msgstr ""
1928
 
1929
- #: ../settings.php:477
1930
  msgid "Report an issue if any of the following is true"
1931
  msgstr ""
1932
 
1933
- #: ../settings.php:485
1934
  msgid "Send email report"
1935
  msgstr ""
1936
 
1937
- #: ../settings.php:491
1938
  msgid "After every scan"
1939
  msgstr ""
1940
 
1941
- #: ../settings.php:492
1942
  msgid "If any changes in scan results occurred"
1943
  msgstr ""
1944
 
1945
- #: ../settings.php:493
1946
  msgid "If new issues found"
1947
  msgstr ""
1948
 
1949
- #: ../settings.php:497
1950
  msgid "Include file sizes"
1951
  msgstr ""
1952
 
1953
- #: ../settings.php:504
1954
  msgid "Include scan errors"
1955
  msgstr ""
1956
 
1957
- #: ../settings.php:528
1958
  msgid "Automatic cleanup of malware and suspicious files"
1959
  msgstr ""
1960
 
1961
- #: ../settings.php:530 ../cerber-scanner.php:3900
1962
  msgid "Unattended files"
1963
  msgstr ""
1964
 
1965
- #: ../settings.php:537
1966
  msgid "Files in the uploads folder"
1967
  msgstr ""
1968
 
1969
- #: ../settings.php:544
1970
  msgid "Files with unwanted extensions"
1971
  msgstr ""
1972
 
1973
- #: ../settings.php:551
1974
  msgid "Exclusions"
1975
  msgstr ""
1976
 
1977
- #: ../settings.php:552
1978
  msgid "Files in the temporary directory"
1979
  msgstr ""
1980
 
1981
- #: ../settings.php:558
1982
  msgid "Files in the sessions directory"
1983
  msgstr ""
1984
 
1985
- #: ../settings.php:564
1986
  msgid "Files in these directories"
1987
  msgstr ""
1988
 
1989
- #: ../settings.php:570
1990
  msgid "Use absolute paths. One item per line."
1991
  msgstr ""
1992
 
1993
- #: ../settings.php:572
1994
  msgid "Files with these extensions"
1995
  msgstr ""
1996
 
1997
- #: ../settings.php:578
1998
  msgid "Use comma to separate items."
1999
  msgstr ""
2000
 
2001
- #: ../settings.php:589
2002
  msgid "Make your protection smarter!"
2003
  msgstr ""
2004
 
2005
- #: ../settings.php:593
2006
  msgid ""
2007
  "Please enable Permalinks to use this feature. Set Permalink Settings to "
2008
  "something other than Default."
2009
  msgstr ""
2010
 
2011
- #: ../settings.php:596
2012
  msgid "Be careful about enabling these options."
2013
  msgstr ""
2014
 
2015
- #: ../settings.php:596
2016
  msgid "If you forget your Custom login URL, you will be unable to log in."
2017
  msgstr ""
2018
 
2019
- #: ../settings.php:600
2020
  msgid ""
2021
  "In the Citadel mode nobody is able to log in except IPs from the White IP "
2022
  "Access List. Active user sessions will not be affected."
2023
  msgstr ""
2024
 
2025
- #: ../settings.php:603
2026
  msgid "These settings do not affect hosts from the "
2027
  msgstr ""
2028
 
2029
- #: ../settings.php:606
2030
  msgid ""
2031
  "Before you can start using reCAPTCHA, you have to obtain Site key and Secret "
2032
  "key on the Google website"
2033
  msgstr ""
2034
 
2035
- #: ../settings.php:635
2036
  msgid "Lockouts"
2037
  msgstr ""
2038
 
2039
- #: ../settings.php:639
2040
  msgid "Users"
2041
  msgstr ""
2042
 
2043
- #: ../settings.php:757 ../settings.php:879
2044
  #, php-format
2045
  msgid "%s allowed retries in %s minutes"
2046
  msgstr ""
2047
 
2048
- #: ../settings.php:762 ../settings.php:884
2049
  #, php-format
2050
  msgid "%s allowed registrations in %s minutes from one IP"
2051
  msgstr ""
2052
 
2053
- #: ../settings.php:767 ../settings.php:889
2054
  #, php-format
2055
  msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
2056
  msgstr ""
2057
 
2058
- #: ../settings.php:774 ../settings.php:896
2059
  msgid "Notify admin if the number of active lockouts above"
2060
  msgstr ""
2061
 
2062
- #: ../settings.php:779 ../settings.php:901
2063
  #, php-format
2064
  msgid "Enable after %s failed login attempts in last %s minutes"
2065
  msgstr ""
2066
 
2067
- #: ../settings.php:998
2068
  msgid "Sunday"
2069
  msgstr ""
2070
 
2071
- #: ../settings.php:999
2072
  msgid "Monday"
2073
  msgstr ""
2074
 
2075
- #: ../settings.php:1000
2076
  msgid "Tuesday"
2077
  msgstr ""
2078
 
2079
- #: ../settings.php:1001
2080
  msgid "Wednesday"
2081
  msgstr ""
2082
 
2083
- #: ../settings.php:1002
2084
  msgid "Thursday"
2085
  msgstr ""
2086
 
2087
- #: ../settings.php:1003
2088
  msgid "Friday"
2089
  msgstr ""
2090
 
2091
- #: ../settings.php:1004
2092
  msgid "Saturday"
2093
  msgstr ""
2094
 
2095
- #: ../settings.php:1014
2096
  msgctxt "preposition of time like: at 11:00"
2097
  msgid "at"
2098
  msgstr ""
2099
 
2100
- #: ../settings.php:1030
2101
  msgid "Click to send now"
2102
  msgstr ""
2103
 
2104
- #: ../settings.php:1041
2105
  msgid "Plugin initialization mode has not been changed"
2106
  msgstr ""
2107
 
2108
- #: ../settings.php:1061 ../settings.php:1062
2109
  msgid "Attention! You have changed the login URL! The new login URL is"
2110
  msgstr ""
2111
 
2112
- #: ../settings.php:1063 ../settings.php:1064
2113
  msgid ""
2114
  "If you use a caching plugin, you have to add your new login URL to the list "
2115
  "of pages not to cache."
2116
  msgstr ""
2117
 
2118
- #: ../settings.php:1147 ../settings.php:1159 ../settings.php:1282
2119
  msgid "<strong>ERROR</strong>: please enter a valid email address."
2120
  msgstr ""
2121
 
2122
- #: ../settings.php:1288
2123
  msgid "The schedule has been updated"
2124
  msgstr ""
2125
 
2126
- #: ../settings.php:1291
2127
  msgid "Unable to update the schedule"
2128
  msgstr ""
2129
 
2130
- #: ../cerber-tools.php:39
2131
  msgid "Export & Import"
2132
  msgstr ""
2133
 
2134
- #: ../cerber-tools.php:40
2135
  msgid "Diagnostic"
2136
  msgstr ""
2137
 
2138
- #: ../cerber-tools.php:41
2139
  msgid "License"
2140
  msgstr ""
2141
 
2142
- #: ../cerber-tools.php:42
2143
  msgid "Log"
2144
  msgstr ""
2145
 
2146
- #: ../cerber-tools.php:87
2147
  msgid "Export settings to the file"
2148
  msgstr ""
2149
 
2150
- #: ../cerber-tools.php:88
2151
  msgid ""
2152
  "When you click the button below you will get a configuration file, which you "
2153
  "can upload on another site."
2154
  msgstr ""
2155
 
2156
- #: ../cerber-tools.php:89
2157
  msgid "What do you want to export?"
2158
  msgstr ""
2159
 
2160
- #: ../cerber-tools.php:92
2161
  msgid "Download file"
2162
  msgstr ""
2163
 
2164
- #: ../cerber-tools.php:94
2165
  msgid "Import settings from the file"
2166
  msgstr ""
2167
 
2168
- #: ../cerber-tools.php:95
2169
  msgid ""
2170
  "When you click the button below, file will be uploaded and all existing "
2171
  "settings will be overridden."
2172
  msgstr ""
2173
 
2174
- #: ../cerber-tools.php:96
2175
  msgid "Select file to import."
2176
  msgstr ""
2177
 
2178
- #: ../cerber-tools.php:96 ../cerber-scanner.php:4068
2179
  #, php-format
2180
  msgid "Maximum upload file size: %s."
2181
  msgstr ""
2182
 
2183
- #: ../cerber-tools.php:99
2184
  msgid "What do you want to import?"
2185
  msgstr ""
2186
 
2187
- #: ../cerber-tools.php:101 ../cerber-scanner.php:4071
2188
  msgid "Upload file"
2189
  msgstr ""
2190
 
2191
- #: ../cerber-tools.php:150
2192
  msgid "No file was uploaded or file is corrupted"
2193
  msgstr ""
2194
 
2195
- #: ../cerber-tools.php:187
2196
  msgid "Error while updating"
2197
  msgstr ""
2198
 
2199
- #: ../cerber-tools.php:193
2200
  msgid "Settings has imported successfully from"
2201
  msgstr ""
2202
 
2203
- #: ../cerber-tools.php:200
2204
  msgid "Error while parsing file"
2205
  msgstr ""
2206
 
@@ -2259,112 +2284,112 @@ msgstr ""
2259
  msgid "Ignore"
2260
  msgstr ""
2261
 
2262
- #: ../cerber-scanner.php:1415
2263
  msgid "Verified"
2264
  msgstr ""
2265
 
2266
- #: ../cerber-scanner.php:1421
2267
  msgid "Vulnerability found"
2268
  msgstr ""
2269
 
2270
- #: ../cerber-scanner.php:1422
2271
  msgid "Integrity data not found"
2272
  msgstr ""
2273
 
2274
- #: ../cerber-scanner.php:1423
2275
  msgid "Unable to check the integrity of the plugin due to a network error"
2276
  msgstr ""
2277
 
2278
- #: ../cerber-scanner.php:1424
2279
  msgid "Unable to check the integrity of WordPress files due to a network error"
2280
  msgstr ""
2281
 
2282
- #: ../cerber-scanner.php:1425
2283
  msgid "Unable to check the integrity of the theme due to a network error"
2284
  msgstr ""
2285
 
2286
- #: ../cerber-scanner.php:1426
2287
  msgid "Unable to check the integrity due to a DB error"
2288
  msgstr ""
2289
 
2290
- #: ../cerber-scanner.php:1428
2291
  msgid "Local file doesn't exist"
2292
  msgstr ""
2293
 
2294
- #: ../cerber-scanner.php:1430
2295
  msgid "Unable to process file"
2296
  msgstr ""
2297
 
2298
- #: ../cerber-scanner.php:1431 ../cerber-scanner.php:4959
2299
  msgid "Unable to open file"
2300
  msgstr ""
2301
 
2302
- #: ../cerber-scanner.php:1433
2303
  msgid "Checksum mismatch"
2304
  msgstr ""
2305
 
2306
- #: ../cerber-scanner.php:1436
2307
  msgid "Suspicious code found"
2308
  msgstr ""
2309
 
2310
- #: ../cerber-scanner.php:1437
2311
  msgid "Malicious code found"
2312
  msgstr ""
2313
 
2314
- #: ../cerber-scanner.php:1438
2315
  msgid "Unattended suspicious file"
2316
  msgstr ""
2317
 
2318
- #: ../cerber-scanner.php:1439
2319
  msgid "Executable code found"
2320
  msgstr ""
2321
 
2322
- #: ../cerber-scanner.php:1442 ../cerber-scanner.php:2716
2323
  msgid "Suspicious directives found"
2324
  msgstr ""
2325
 
2326
- #: ../cerber-scanner.php:1443
2327
  msgid "Unwanted file extension"
2328
  msgstr ""
2329
 
2330
- #: ../cerber-scanner.php:1445
2331
  msgid "Content has been modified"
2332
  msgstr ""
2333
 
2334
- #: ../cerber-scanner.php:1446
2335
  msgid "New file"
2336
  msgstr ""
2337
 
2338
- #: ../cerber-scanner.php:1466
2339
  msgid "Every hour"
2340
  msgstr ""
2341
 
2342
- #: ../cerber-scanner.php:1467
2343
  msgid "Every 3 hours"
2344
  msgstr ""
2345
 
2346
- #: ../cerber-scanner.php:1468
2347
  msgid "Every 6 hours"
2348
  msgstr ""
2349
 
2350
- #: ../cerber-scanner.php:2536
2351
  msgid "Custom signature found"
2352
  msgstr ""
2353
 
2354
- #: ../cerber-scanner.php:2711
2355
  msgid ""
2356
  "This file contains executable code and may contain obfuscated malware. If "
2357
  "this file is a part of a theme or a plugin, it must be located in the theme "
2358
  "or the plugin folder. No exception, no excuses."
2359
  msgstr ""
2360
 
2361
- #: ../cerber-scanner.php:2712
2362
  msgid ""
2363
  "The scanner recognizes this file as \"ownerless\" or \"not bundled\" because it "
2364
  "does not belong to any known part of the website and should not be here."
2365
  msgstr ""
2366
 
2367
- #: ../cerber-scanner.php:2713
2368
  #, php-format
2369
  msgid ""
2370
  "It may remain after upgrading to a newer version of %s. It also may be a "
@@ -2372,15 +2397,15 @@ msgid ""
2372
  "made (bespoke) plugin or theme."
2373
  msgstr ""
2374
 
2375
- #: ../cerber-scanner.php:2714
2376
  msgid "Suspicious code instruction found"
2377
  msgstr ""
2378
 
2379
- #: ../cerber-scanner.php:2715
2380
  msgid "Suspicious code signatures found"
2381
  msgstr ""
2382
 
2383
- #: ../cerber-scanner.php:2717
2384
  msgid ""
2385
  "The contents of the file have been changed and do not match what exists in "
2386
  "the official WordPress repository or a reference file you have uploaded "
@@ -2388,235 +2413,235 @@ msgid ""
2388
  "has been tampered with."
2389
  msgstr ""
2390
 
2391
- #: ../cerber-scanner.php:2718
2392
  #, php-format
2393
  msgid ""
2394
  "To solve this issue you have to reinstall %s or update it to the latest "
2395
  "version."
2396
  msgstr ""
2397
 
2398
- #: ../cerber-scanner.php:2719
2399
  msgid "Please upload a reference ZIP archive"
2400
  msgstr ""
2401
 
2402
- #: ../cerber-scanner.php:2720
2403
  msgid "Resolve issue"
2404
  msgstr ""
2405
 
2406
- #: ../cerber-scanner.php:3774
2407
  msgid "Preparing for the scan"
2408
  msgstr ""
2409
 
2410
- #: ../cerber-scanner.php:3775
2411
  msgid "Scanning folders for files"
2412
  msgstr ""
2413
 
2414
- #: ../cerber-scanner.php:3776
2415
  msgid "Scanning the upload folder for files"
2416
  msgstr ""
2417
 
2418
- #: ../cerber-scanner.php:3777
2419
  msgid "Scanning the temp folder for files"
2420
  msgstr ""
2421
 
2422
- #: ../cerber-scanner.php:3778
2423
  msgid "Scanning the session folder for files"
2424
  msgstr ""
2425
 
2426
- #: ../cerber-scanner.php:3779
2427
  msgid "Parsing the list of files"
2428
  msgstr ""
2429
 
2430
- #: ../cerber-scanner.php:3780
2431
  msgid "Checking for new and modified files"
2432
  msgstr ""
2433
 
2434
- #: ../cerber-scanner.php:3781
2435
  msgid "Verifying the integrity of WordPress"
2436
  msgstr ""
2437
 
2438
- #: ../cerber-scanner.php:3782
2439
  msgid "Verifying the integrity of the plugins"
2440
  msgstr ""
2441
 
2442
- #: ../cerber-scanner.php:3783
2443
  msgid "Verifying the integrity of the themes"
2444
  msgstr ""
2445
 
2446
- #: ../cerber-scanner.php:3784
2447
  msgid "Searching for malicious code"
2448
  msgstr ""
2449
 
2450
- #: ../cerber-scanner.php:3785
2451
  msgid "Finalizing the scan"
2452
  msgstr ""
2453
 
2454
- #: ../cerber-scanner.php:3860
2455
  msgid "Started"
2456
  msgstr ""
2457
 
2458
- #: ../cerber-scanner.php:3864
2459
  msgid "Finished"
2460
  msgstr ""
2461
 
2462
- #: ../cerber-scanner.php:3872
2463
  msgid "Performance"
2464
  msgstr ""
2465
 
2466
- #: ../cerber-scanner.php:3884
2467
  msgid "Vulnerabilities"
2468
  msgstr ""
2469
 
2470
- #: ../cerber-scanner.php:3888
2471
  msgid "New files"
2472
  msgstr ""
2473
 
2474
- #: ../cerber-scanner.php:3892
2475
  msgid "Changed files"
2476
  msgstr ""
2477
 
2478
- #: ../cerber-scanner.php:3896
2479
  msgid "Unwanted extensions"
2480
  msgstr ""
2481
 
2482
- #: ../cerber-scanner.php:3909 ../cerber-scanner.php:5576
2483
  msgid "Scanned"
2484
  msgstr ""
2485
 
2486
- #: ../cerber-scanner.php:3909 ../cerber-scanner.php:3979
2487
  msgid "Files to scan"
2488
  msgstr ""
2489
 
2490
- #: ../cerber-scanner.php:3916 ../cerber-scanner.php:3987
2491
  msgid "Critical issues"
2492
  msgstr ""
2493
 
2494
- #: ../cerber-scanner.php:3916 ../cerber-scanner.php:3991 ../cerber-scanner.php:5149
2495
  msgid "Issues total"
2496
  msgstr ""
2497
 
2498
- #: ../cerber-scanner.php:4065
2499
  msgid "We have not found any integrity data to verify"
2500
  msgstr ""
2501
 
2502
- #: ../cerber-scanner.php:4067
2503
  msgid ""
2504
  "You have to upload a ZIP archive from which you've installed it. This "
2505
  "enables the security scanner to verify the integrity of the code and detect "
2506
  "malware."
2507
  msgstr ""
2508
 
2509
- #: ../cerber-scanner.php:4354
2510
  msgid "The directory is not writable"
2511
  msgstr ""
2512
 
2513
- #: ../cerber-scanner.php:4372
2514
  msgid "Unable to create WP CERBER directory"
2515
  msgstr ""
2516
 
2517
- #: ../cerber-scanner.php:4578
2518
  msgid ""
2519
  "File access error. Possibly scan results are outdated. Please run Quick or "
2520
  "Full Scan."
2521
  msgstr ""
2522
 
2523
- #: ../cerber-scanner.php:5105
2524
  msgid "Full Scan Report"
2525
  msgstr ""
2526
 
2527
- #: ../cerber-scanner.php:5105
2528
  msgid "Quick Scan Report"
2529
  msgstr ""
2530
 
2531
- #: ../cerber-scanner.php:5118
2532
  msgid "Files scanned"
2533
  msgstr ""
2534
 
2535
- #: ../cerber-scanner.php:5199
2536
  msgid "Deleted"
2537
  msgstr ""
2538
 
2539
- #: ../cerber-scanner.php:5246
2540
  msgid "Automatically moved to quarantine"
2541
  msgstr ""
2542
 
2543
- #: ../cerber-scanner.php:5258
2544
  msgid "To view full report visit"
2545
  msgstr ""
2546
 
2547
- #: ../cerber-scanner.php:5486
2548
  msgid "There are no files in the quarantine at the moment."
2549
  msgstr ""
2550
 
2551
- #: ../cerber-scanner.php:5547
2552
  msgid "No files match the specified filter."
2553
  msgstr ""
2554
 
2555
- #: ../cerber-scanner.php:5547
2556
  msgid "Click here to see the full list of files"
2557
  msgstr ""
2558
 
2559
- #: ../cerber-scanner.php:5564
2560
  msgid "Delete permanently"
2561
  msgstr ""
2562
 
2563
- #: ../cerber-scanner.php:5569
2564
  msgid "Restore"
2565
  msgstr ""
2566
 
2567
- #: ../cerber-scanner.php:5577
2568
  msgid "Moved to quarantine"
2569
  msgstr ""
2570
 
2571
- #: ../cerber-scanner.php:5578
2572
  msgid "Automatic deletion"
2573
  msgstr ""
2574
 
2575
- #: ../cerber-scanner.php:5579
2576
  msgid "Size"
2577
  msgstr ""
2578
 
2579
- #: ../cerber-scanner.php:5580 ../cerber-scanner.php:5711
2580
  msgid "File"
2581
  msgstr ""
2582
 
2583
- #: ../cerber-scanner.php:5594
2584
  msgid "All scans"
2585
  msgstr ""
2586
 
2587
- #: ../cerber-scanner.php:5648
2588
  msgid "The file has been deleted permanently."
2589
  msgstr ""
2590
 
2591
- #: ../cerber-scanner.php:5657
2592
  msgid "The file has been restored to its original location."
2593
  msgstr ""
2594
 
2595
- #: ../cerber-scanner.php:5679
2596
  msgid "Apply"
2597
  msgstr ""
2598
 
2599
- #: ../cerber-scanner.php:5680 ../cerber-scanner.php:5705
2600
  msgid "Remove from the list"
2601
  msgstr ""
2602
 
2603
- #: ../cerber-scanner.php:5681
2604
  msgid "User Insights"
2605
  msgstr ""
2606
 
2607
- #: ../cerber-scanner.php:5682
2608
  msgid "Traffic Insights"
2609
  msgstr ""
2610
 
2611
- #: ../cerber-scanner.php:5683
2612
  msgid "Activity Insights"
2613
  msgstr ""
2614
 
2615
- #: ../cerber-scanner.php:5685
2616
  msgid "The list is empty."
2617
  msgstr ""
2618
 
2619
- #: ../cerber-scanner.php:5710
2620
  msgid "Added"
2621
  msgstr ""
2622
 
5
  "Project-Id-Version: WP Cerber\n"
6
  "Report-Msgid-Bugs-To: \n"
7
  "POT-Creation-Date: Tue Sep 08 2015 21:38:11 GMT+0300\n"
8
+ "POT-Revision-Date: Thu Dec 06 2018 22:13:20 GMT+0300 (Moscow Standard Time)\n"
9
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
10
  "Last-Translator: \n"
11
  "Language-Team: \n"
24
  "esc_html_x:1,2c;comments_number_link:2,3;t:1;st:1;trans:1;transChoice:1,2\n"
25
  "X-Generator: Loco - https://localise.biz/"
26
 
27
+ #: ../dashboard.php:55
28
  msgid "Cerber Dashboard"
29
  msgstr ""
30
 
31
+ #: ../dashboard.php:55 ../dashboard.php:1349 ../dashboard.php:2166 ../settings.
32
+ #: php:654
33
  msgid "Dashboard"
34
  msgstr ""
35
 
36
+ #: ../dashboard.php:57
37
  msgid "Cerber Traffic Inspector"
38
  msgstr ""
39
 
40
+ #: ../dashboard.php:57 ../dashboard.php:1319 ../dashboard.php:2925
41
  msgid "Traffic Inspector"
42
  msgstr ""
43
 
44
+ #: ../dashboard.php:61
45
  msgid "Cerber Security Rules"
46
  msgstr ""
47
 
48
+ #: ../dashboard.php:61 ../dashboard.php:2587
49
  msgid "Security Rules"
50
  msgstr ""
51
 
52
+ #: ../dashboard.php:65 ../cerber-scanner.php:89
53
  msgid "Site Integrity"
54
  msgstr ""
55
 
56
+ #: ../dashboard.php:69
57
  msgid "Cerber antispam settings"
58
  msgstr ""
59
 
60
+ #: ../dashboard.php:69 ../cerber-load.php:4294 ../settings.php:212
61
  msgid "Antispam"
62
  msgstr ""
63
 
64
+ #: ../dashboard.php:70
65
  msgid "Cerber tools"
66
  msgstr ""
67
 
68
+ #: ../dashboard.php:70 ../cerber-tools.php:51
69
  msgid "Tools"
70
  msgstr ""
71
 
72
+ #: ../dashboard.php:128 ../dashboard.php:208
73
  msgid "Remove"
74
  msgstr ""
75
 
76
+ #: ../dashboard.php:135 ../dashboard.php:781 ../dashboard.php:3328 ../cerber-load.
77
+ #: php:4007
78
  msgid "IP"
79
  msgstr ""
80
 
81
+ #: ../dashboard.php:136 ../dashboard.php:782
82
  msgid "Hostname"
83
  msgstr ""
84
 
85
+ #: ../dashboard.php:137 ../dashboard.php:783
86
  msgid "Country"
87
  msgstr ""
88
 
89
+ #: ../dashboard.php:138
90
  msgid "Expires"
91
  msgstr ""
92
 
93
+ #: ../dashboard.php:139 ../cerber-load.php:3465
94
  msgid "Reason"
95
  msgstr ""
96
 
97
+ #: ../dashboard.php:140 ../cerber-scanner.php:5413 ../cerber-scanner.php:5544
98
  msgid "Action"
99
  msgstr ""
100
 
101
+ #: ../dashboard.php:154
102
  #, php-format
103
  msgid "Showing last %d records from %d"
104
  msgstr ""
105
 
106
+ #: ../dashboard.php:156
107
  msgid "Hint"
108
  msgstr ""
109
 
110
+ #: ../dashboard.php:156
111
  msgid "To view activity, click on the IP"
112
  msgstr ""
113
 
114
+ #: ../dashboard.php:160
115
  msgid "No lockouts at the moment. The sky is clear."
116
  msgstr ""
117
 
118
+ #: ../dashboard.php:180 ../dashboard.php:756 ../dashboard.php:983 ../dashboard.
119
+ #: php:1314 ../dashboard.php:3140 ../cerber-load.php:4281 ../settings.php:624
120
  msgid "White IP Access List"
121
  msgstr ""
122
 
123
+ #: ../dashboard.php:180
124
  msgid "These IPs will never be locked out"
125
  msgstr ""
126
 
127
+ #: ../dashboard.php:182 ../dashboard.php:757 ../dashboard.php:986 ../dashboard.
128
+ #: php:1315 ../dashboard.php:3141
129
  msgid "Black IP Access List"
130
  msgstr ""
131
 
132
+ #: ../dashboard.php:182
133
  msgid "Nobody can log in or register from these IPs"
134
  msgstr ""
135
 
136
+ #: ../dashboard.php:189
137
  msgid "Your IP"
138
  msgstr ""
139
 
140
+ #: ../dashboard.php:207 ../dashboard.php:996 ../dashboard.php:1027 ../dashboard.
141
+ #: php:1139
142
  msgid "Check for activities"
143
  msgstr ""
144
 
145
+ #: ../dashboard.php:214
146
  msgid "List is empty"
147
  msgstr ""
148
 
149
+ #: ../dashboard.php:218
150
  msgid "IP address, IPv4 address range or subnet"
151
  msgstr ""
152
 
153
+ #: ../dashboard.php:219
154
  msgid "Add IP to the list"
155
  msgstr ""
156
 
157
+ #: ../dashboard.php:220
158
  msgid "Optional comment for this entry"
159
  msgstr ""
160
 
161
+ #: ../dashboard.php:245 ../dashboard.php:257
162
  msgid "Incorrect IP address or IP range"
163
  msgstr ""
164
 
165
+ #: ../dashboard.php:251
166
  #, php-format
167
  msgid "Address %s was added to White IP Access List"
168
  msgstr ""
169
 
170
+ #: ../dashboard.php:261
171
  msgid "You cannot add your IP address or network"
172
  msgstr ""
173
 
174
+ #: ../dashboard.php:265
175
  #, php-format
176
  msgid "Address %s was added to Black IP Access List"
177
  msgstr ""
178
 
179
+ #: ../dashboard.php:362 ../dashboard.php:3070 ../whois.php:225 ../whois.php:256 ..
180
+ #: /common.php:995 ../common.php:1410
181
  msgid "Unknown"
182
  msgstr ""
183
 
184
+ #: ../dashboard.php:401
185
  msgid "unknown"
186
  msgstr ""
187
 
188
+ #: ../dashboard.php:432
189
  msgid "Email has been sent to"
190
  msgstr ""
191
 
192
+ #: ../dashboard.php:435
193
  msgid "Unable to send email to"
194
  msgstr ""
195
 
196
+ #: ../dashboard.php:441
197
  #, php-format
198
  msgid "Lockout for %s was removed"
199
  msgstr ""
200
 
201
+ #: ../dashboard.php:460 ../dashboard.php:1997
202
  msgid "Settings saved"
203
  msgstr ""
204
 
205
+ #: ../dashboard.php:571 ../dashboard.php:2976
206
  msgid "IP address"
207
  msgstr ""
208
 
209
+ #: ../dashboard.php:572 ../dashboard.php:784 ../dashboard.php:2977 ../dashboard.
210
+ #: php:3326
211
  msgid "Date"
212
  msgstr ""
213
 
214
+ #: ../dashboard.php:573 ../dashboard.php:785
215
  msgid "Event"
216
  msgstr ""
217
 
218
+ #: ../dashboard.php:574
219
+ msgid "Additional Details"
220
+ msgstr ""
221
+
222
+ #: ../dashboard.php:575 ../dashboard.php:786 ../dashboard.php:3331
223
  msgid "Local User"
224
  msgstr ""
225
 
226
+ #: ../dashboard.php:576
227
  msgid "User login"
228
  msgstr ""
229
 
230
+ #: ../dashboard.php:577 ../dashboard.php:2982
231
  msgid "User ID"
232
  msgstr ""
233
 
234
+ #: ../dashboard.php:578 ../dashboard.php:787 ../cerber-load.php:4015
235
  msgid "Username used"
236
  msgstr ""
237
 
238
+ #: ../dashboard.php:761 ../dashboard.php:989 ../dashboard.php:3145 ../common.php:
239
+ #: 940
240
  msgid "Locked out"
241
  msgstr ""
242
 
243
+ #: ../dashboard.php:805 ../dashboard.php:3385
244
  msgid "Export"
245
  msgstr ""
246
 
247
+ #: ../dashboard.php:809
248
  msgid "No activity has been logged."
249
  msgstr ""
250
 
251
+ #: ../dashboard.php:816
252
  msgid "All events"
253
  msgstr ""
254
 
255
+ #: ../dashboard.php:827
256
  msgid "Search for IP or username"
257
  msgstr ""
258
 
259
+ #: ../dashboard.php:827
260
  msgid "Filter"
261
  msgstr ""
262
 
263
+ #: ../dashboard.php:1023
264
  msgid "Abuse email:"
265
  msgstr ""
266
 
267
+ #: ../dashboard.php:1027
268
  msgid "Network:"
269
  msgstr ""
270
 
271
+ #: ../dashboard.php:1041
272
  msgid "Add network to the Black List"
273
  msgstr ""
274
 
275
+ #: ../dashboard.php:1046
276
  msgid "Add IP to the Black List"
277
  msgstr ""
278
 
279
+ #: ../dashboard.php:1102
280
  msgid "Activated"
281
  msgstr ""
282
 
283
+ #: ../dashboard.php:1123
284
  msgid "Last seen"
285
  msgstr ""
286
 
287
+ #: ../dashboard.php:1133 ../dashboard.php:1179
288
  msgid "Registered"
289
  msgstr ""
290
 
291
+ #: ../dashboard.php:1176
292
  msgid "Comments"
293
  msgstr ""
294
 
295
+ #: ../dashboard.php:1177
296
  msgid "Last login"
297
  msgstr ""
298
 
299
+ #: ../dashboard.php:1178
300
  msgid "Failed login attempts"
301
  msgstr ""
302
 
303
+ #: ../dashboard.php:1210 ../dashboard.php:1297 ../common.php:1136
304
  msgid "Never"
305
  msgstr ""
306
 
307
+ #: ../dashboard.php:1249
308
  msgid "You"
309
  msgstr ""
310
 
311
+ #: ../dashboard.php:1267
312
  msgid "Cerber Quick View"
313
  msgstr ""
314
 
315
+ #: ../dashboard.php:1301 ../dashboard.php:1323
316
  msgid "active"
317
  msgstr ""
318
 
319
+ #: ../dashboard.php:1301
320
  msgid "deactivate"
321
  msgstr ""
322
 
323
+ #: ../dashboard.php:1303
324
  msgid "not active"
325
  msgstr ""
326
 
327
+ #: ../dashboard.php:1304 ../dashboard.php:1318
328
  msgid "disabled"
329
  msgstr ""
330
 
331
+ #: ../dashboard.php:1309
332
  msgid "failed attempts"
333
  msgstr ""
334
 
335
+ #: ../dashboard.php:1309 ../dashboard.php:1310
336
  msgid "in 24 hours"
337
  msgstr ""
338
 
339
+ #: ../dashboard.php:1309 ../dashboard.php:1310
340
  msgid "view all"
341
  msgstr ""
342
 
343
+ #: ../dashboard.php:1310
344
  msgid "lockouts"
345
  msgstr ""
346
 
347
+ #: ../dashboard.php:1312
348
  msgid "Lockouts at the moment"
349
  msgstr ""
350
 
351
+ #: ../dashboard.php:1313
352
  msgid "Last lockout"
353
  msgstr ""
354
 
355
+ #: ../dashboard.php:1314 ../dashboard.php:1315 ../dashboard.php:2144
356
  msgid "entry"
357
  msgid_plural "entries"
358
  msgstr[0] ""
359
  msgstr[1] ""
360
 
361
+ #: ../dashboard.php:1316 ../settings.php:104
362
  msgid "Citadel mode"
363
  msgstr ""
364
 
365
+ #: ../dashboard.php:1318
366
  msgid "enabled"
367
  msgstr ""
368
 
369
+ #: ../dashboard.php:1323
370
  msgid "no connection"
371
  msgstr ""
372
 
373
+ #: ../dashboard.php:1333
374
  msgctxt "Example: Last malware scan: 23 Jan 2018"
375
  msgid "Last malware scan"
376
  msgstr ""
377
 
378
+ #: ../dashboard.php:1336 ../dashboard.php:1338 ../settings.php:290 ../settings.
379
+ #: php:316 ../cerber-scanner.php:1466
380
  msgid "Disabled"
381
  msgstr ""
382
 
383
+ #: ../dashboard.php:1337 ../cerber-scanner.php:915
384
  msgid "Quick Scan"
385
  msgstr ""
386
 
387
+ #: ../dashboard.php:1339 ../cerber-scanner.php:915
388
  msgid "Full Scan"
389
  msgstr ""
390
 
391
+ #: ../dashboard.php:1350 ../dashboard.php:1825 ../cerber-load.php:3998 ..
392
+ #: /settings.php:109 ../settings.php:655
393
  msgid "Activity"
394
  msgstr ""
395
 
396
+ #: ../dashboard.php:1351
397
  msgid "Traffic"
398
  msgstr ""
399
 
400
+ #: ../dashboard.php:1352
401
  msgid "Integrity"
402
  msgstr ""
403
 
404
+ #: ../dashboard.php:1628 ../settings.php:84
405
  msgid "My site is behind a reverse proxy"
406
  msgstr ""
407
 
408
+ #: ../dashboard.php:1804
409
  msgid "in the last 24 hours"
410
  msgstr ""
411
 
412
+ #: ../dashboard.php:1810 ../dashboard.php:1836
413
  msgid "View all"
414
  msgstr ""
415
 
416
+ #: ../dashboard.php:1818 ../common.php:885
417
  msgid "User registered"
418
  msgstr ""
419
 
420
+ #: ../dashboard.php:1819
421
  msgid "All suspicious activity"
422
  msgstr ""
423
 
424
+ #: ../dashboard.php:1837
425
  msgid "Recently locked out IP addresses"
426
  msgstr ""
427
 
428
+ #: ../dashboard.php:1861
429
  msgid "Confused about some settings?"
430
  msgstr ""
431
 
432
+ #: ../dashboard.php:1862
433
  msgid "You can easily load default recommended settings using button below"
434
  msgstr ""
435
 
436
+ #: ../dashboard.php:1864
437
  msgid "Load default settings"
438
  msgstr ""
439
 
440
+ #: ../dashboard.php:1866 ../cerber-tools.php:649 ../cerber-scanner.php:5389 ..
441
+ #: /cerber-scanner.php:5531
442
  msgid "Are you sure?"
443
  msgstr ""
444
 
445
+ #: ../dashboard.php:1872
446
  msgid "doesn't affect Custom login URL and Access Lists"
447
  msgstr ""
448
 
449
+ #: ../dashboard.php:1873 ../cerber-load.php:3497 ../cerber-load.php:4283
450
  msgid "Getting Started Guide"
451
  msgstr ""
452
 
453
+ #: ../dashboard.php:1980
454
  msgid "Attention! Citadel mode is now active. Nobody is able to log in."
455
  msgstr ""
456
 
457
+ #: ../dashboard.php:1981
458
  msgid "Deactivate"
459
  msgstr ""
460
 
461
+ #: ../dashboard.php:1982 ../dashboard.php:2403
462
  msgid "View Activity"
463
  msgstr ""
464
 
465
+ #: ../dashboard.php:2064
466
  msgid "Subscribe"
467
  msgstr ""
468
 
469
+ #: ../dashboard.php:2065 ../cerber-tools.php:282
470
  msgid "Unsubscribe"
471
  msgstr ""
472
 
473
+ #: ../dashboard.php:2093
474
  msgid "You've subscribed"
475
  msgstr ""
476
 
477
+ #: ../dashboard.php:2096
478
  msgid "You've unsubscribed"
479
  msgstr ""
480
 
481
+ #: ../dashboard.php:2167
482
  msgid "Main settings"
483
  msgstr ""
484
 
485
+ #: ../dashboard.php:2271
486
  msgid "Are you sure you want to delete selected files?"
487
  msgstr ""
488
 
489
+ #: ../dashboard.php:2272
490
  msgid "These files have been moved to the quarantine"
491
  msgstr ""
492
 
493
+ #: ../dashboard.php:2275
494
  msgid "Do you want to add selected files to the ignore list?"
495
  msgstr ""
496
 
497
+ #: ../dashboard.php:2276
498
  msgid "These files have been added to the ignore list"
499
  msgstr ""
500
 
501
+ #: ../dashboard.php:2278
502
  msgid "Some errors occurred"
503
  msgstr ""
504
 
505
+ #: ../dashboard.php:2279
506
  msgid "All files have been processed"
507
  msgstr ""
508
 
509
+ #: ../dashboard.php:2447
510
  msgid "These features are available in a professional version of the plugin."
511
  msgstr ""
512
 
513
+ #: ../dashboard.php:2448
514
  msgid "Know more about all advantages at"
515
  msgstr ""
516
 
517
+ #: ../dashboard.php:2579
518
  msgid "Countries"
519
  msgstr ""
520
 
521
+ #: ../dashboard.php:2648
522
  #, php-format
523
  msgid "Permitted for one country"
524
  msgid_plural "Permitted for %d countries"
525
  msgstr[0] ""
526
  msgstr[1] ""
527
 
528
+ #: ../dashboard.php:2651
529
  #, php-format
530
  msgid "Not permitted for one country"
531
  msgid_plural "Not permitted for %d countries"
532
  msgstr[0] ""
533
  msgstr[1] ""
534
 
535
+ #: ../dashboard.php:2659
536
  msgid "No rule"
537
  msgstr ""
538
 
539
+ #: ../dashboard.php:2715
540
  msgid "Start typing here to find a country"
541
  msgstr ""
542
 
543
+ #: ../dashboard.php:2798
544
  msgid "Click on a country name to add it to the list of selected countries"
545
  msgstr ""
546
 
547
+ #: ../dashboard.php:2802
548
  #, php-format
549
  msgctxt "to is a marker of infinitive, e.g. \"to use it\""
550
  msgid "Selected countries are permitted to %s, other countries are not permitted to"
551
  msgstr ""
552
 
553
+ #: ../dashboard.php:2805
554
  #, php-format
555
  msgctxt "to is a marker of infinitive, e.g. \"to use it\""
556
  msgid "Selected countries are not permitted to %s, other countries are permitted to"
557
  msgstr ""
558
 
559
+ #: ../dashboard.php:2822
560
  msgid "Submit forms"
561
  msgstr ""
562
 
563
+ #: ../dashboard.php:2823
564
  msgid "Post comments"
565
  msgstr ""
566
 
567
+ #: ../dashboard.php:2824
568
  msgid "Log in to the website"
569
  msgstr ""
570
 
571
+ #: ../dashboard.php:2825
572
  msgid "Register on the website"
573
  msgstr ""
574
 
575
+ #: ../dashboard.php:2826
576
  msgid "Use XML-RPC"
577
  msgstr ""
578
 
579
+ #: ../dashboard.php:2827
580
  msgid "Use REST API"
581
  msgstr ""
582
 
583
+ #: ../dashboard.php:2871
584
  msgid "Security rules have been updated"
585
  msgstr ""
586
 
587
+ #: ../dashboard.php:2916
588
  msgid "Live Traffic"
589
  msgstr ""
590
 
591
+ #: ../dashboard.php:2917 ../cerber-tools.php:91 ../cerber-tools.php:100 ../cerber-
592
  #: scanner.php:76
593
  msgid "Settings"
594
  msgstr ""
595
 
596
+ #: ../dashboard.php:2983
597
  msgid "Page generation time"
598
  msgstr ""
599
 
600
+ #: ../dashboard.php:3327
601
  msgid "Request"
602
  msgstr ""
603
 
604
+ #: ../dashboard.php:3329
605
  msgid "Host Info"
606
  msgstr ""
607
 
608
+ #: ../dashboard.php:3330
609
  msgid "User Agent"
610
  msgstr ""
611
 
612
+ #: ../dashboard.php:3347
613
  msgid "No requests have been logged."
614
  msgstr ""
615
 
616
+ #: ../dashboard.php:3355
617
  msgid "All requests"
618
  msgstr ""
619
 
620
+ #: ../dashboard.php:3357
621
  msgid "Suspicious activity"
622
  msgstr ""
623
 
624
+ #: ../dashboard.php:3358
625
  msgid "Errors"
626
  msgstr ""
627
 
628
+ #: ../dashboard.php:3359 ../settings.php:180
629
  msgid "Logged in users"
630
  msgstr ""
631
 
632
+ #: ../dashboard.php:3360
633
  msgid "Not logged in visitors"
634
  msgstr ""
635
 
636
+ #: ../dashboard.php:3363
637
  msgid "Form submissions"
638
  msgstr ""
639
 
640
+ #: ../dashboard.php:3365
641
  msgid "Page Not Found"
642
  msgstr ""
643
 
644
+ #: ../dashboard.php:3374
645
  msgid "Longer than"
646
  msgstr ""
647
 
648
+ #: ../dashboard.php:3390
649
  msgid "Refresh"
650
  msgstr ""
651
 
652
+ #: ../dashboard.php:3655
653
  msgid "Any"
654
  msgstr ""
655
 
656
+ #: ../dashboard.php:3698
657
  msgid "Advanced search"
658
  msgstr ""
659
 
660
+ #: ../dashboard.php:3757
661
  msgid "Antispam engine"
662
  msgstr ""
663
 
664
+ #: ../dashboard.php:3766
665
  msgid "Antispam and bot detection settings"
666
  msgstr ""
667
 
668
+ #: ../dashboard.php:3824
669
  msgid "Help"
670
  msgstr ""
671
 
672
+ #: ../dashboard.php:3846
673
  msgid "Log In"
674
  msgstr ""
675
 
676
+ #: ../dashboard.php:3847
677
  msgid "Log Out"
678
  msgstr ""
679
 
680
+ #: ../dashboard.php:3848
681
  msgid "Register"
682
  msgstr ""
683
 
684
+ #: ../dashboard.php:3851
685
  msgid "WooCommerce Log In"
686
  msgstr ""
687
 
688
+ #: ../dashboard.php:3852
689
  msgid "WooCommerce Log Out"
690
  msgstr ""
691
 
692
+ #: ../dashboard.php:3891 ../dashboard.php:3892
693
  msgid "Add to menu"
694
  msgstr ""
695
 
714
  msgid "Gregory"
715
  msgstr ""
716
 
717
+ #: ../common.php:120
718
  msgid "Check for requests"
719
  msgstr ""
720
 
721
+ #: ../common.php:166
722
  msgid "Malicious activities mitigated"
723
  msgstr ""
724
 
725
+ #: ../common.php:169
726
  msgid "Spam comments denied"
727
  msgstr ""
728
 
729
+ #: ../common.php:170
730
  msgid "Spam form submissions denied"
731
  msgstr ""
732
 
733
+ #: ../common.php:171
734
  msgid "Malicious IP addresses detected"
735
  msgstr ""
736
 
737
+ #: ../common.php:172
738
  msgid "Lockouts occurred"
739
  msgstr ""
740
 
741
+ #: ../common.php:226 ../common.php:292 ../common.php:297 ../common.php:303 ..
742
+ #: /common.php:308 ../cerber-load.php:694 ../cerber-load.php:706 ../cerber-load.
743
+ #: php:713 ../cerber-load.php:988 ../cerber-load.php:1215 ../cerber-load.php:1221
744
+ #: ../cerber-load.php:1226 ../cerber-load.php:1231 ../cerber-load.php:1237 ..
745
+ #: /cerber-load.php:1244 ../cerber-load.php:1346 ../cerber-load.php:1483 ..
746
+ #: /settings.php:1061 ../settings.php:1144
747
  msgid "ERROR:"
748
  msgstr ""
749
 
750
+ #: ../common.php:884
751
  msgid "User created"
752
  msgstr ""
753
 
754
+ #: ../common.php:886
755
  msgid "Logged in"
756
  msgstr ""
757
 
758
+ #: ../common.php:887
759
  msgid "Logged out"
760
  msgstr ""
761
 
762
+ #: ../common.php:888
763
  msgid "Login failed"
764
  msgstr ""
765
 
766
+ #: ../common.php:891
767
  msgid "IP blocked"
768
  msgstr ""
769
 
770
+ #: ../common.php:892
771
  msgid "Subnet blocked"
772
  msgstr ""
773
 
774
+ #: ../common.php:894
775
  msgid "Citadel activated!"
776
  msgstr ""
777
 
778
+ #: ../common.php:895
779
  msgid "Spam comment denied"
780
  msgstr ""
781
 
782
+ #: ../common.php:896
783
  msgid "Spam form submission denied"
784
  msgstr ""
785
 
786
+ #: ../common.php:897
787
  msgid "Form submission denied"
788
  msgstr ""
789
 
790
+ #: ../common.php:898
791
  msgid "Comment denied"
792
  msgstr ""
793
 
794
+ #: ../common.php:909
795
  msgid "Password changed"
796
  msgstr ""
797
 
798
+ #: ../common.php:910
799
  msgid "Password reset requested"
800
  msgstr ""
801
 
802
+ #: ../common.php:912
803
  msgid "reCAPTCHA verification failed"
804
  msgstr ""
805
 
806
+ #: ../common.php:913
807
  msgid "reCAPTCHA settings are incorrect"
808
  msgstr ""
809
 
810
+ #: ../common.php:914
811
  msgid "Request to the Google reCAPTCHA service failed"
812
  msgstr ""
813
 
814
+ #: ../common.php:916 ../common.php:999
815
  msgid "Attempt to access prohibited URL"
816
  msgstr ""
817
 
818
+ #: ../common.php:917 ../common.php:979
819
  msgid "Attempt to log in with non-existent username"
820
  msgstr ""
821
 
822
+ #: ../common.php:918 ../common.php:980
823
  msgid "Attempt to log in with prohibited username"
824
  msgstr ""
825
 
826
+ #: ../common.php:920
827
  msgid "Attempt to log in denied"
828
  msgstr ""
829
 
830
+ #: ../common.php:921
831
  msgid "Attempt to register denied"
832
  msgstr ""
833
 
834
+ #: ../common.php:922 ../common.php:984
835
  msgid "Probing for vulnerable PHP code"
836
  msgstr ""
837
 
838
+ #: ../common.php:923
839
  msgid "Attempt to upload malicious file denied"
840
  msgstr ""
841
 
842
+ #: ../common.php:924
843
  msgid "File upload denied"
844
  msgstr ""
845
 
846
+ #: ../common.php:926
847
  msgid "Request to REST API denied"
848
  msgstr ""
849
 
850
+ #: ../common.php:927
851
  msgid "XML-RPC request denied"
852
  msgstr ""
853
 
854
+ #: ../common.php:929
855
  msgid "Malicious request denied"
856
  msgstr ""
857
 
858
+ #: ../common.php:933
859
  msgid "User activated"
860
  msgstr ""
861
 
862
+ #: ../common.php:938
863
  msgid "Bot detected"
864
  msgstr ""
865
 
866
+ #: ../common.php:939
867
  msgid "Citadel mode is active"
868
  msgstr ""
869
 
870
+ #: ../common.php:941
871
+ msgid "IP address is locked out"
872
+ msgstr ""
873
+
874
+ #: ../common.php:942
875
  msgid "IP blacklisted"
876
  msgstr ""
877
 
878
+ #: ../common.php:944
879
  msgid "Malicious activity detected"
880
  msgstr ""
881
 
882
+ #: ../common.php:945
883
  msgid "Blocked by country rule"
884
  msgstr ""
885
 
886
+ #: ../common.php:946
887
  msgid "Limit reached"
888
  msgstr ""
889
 
890
+ #: ../common.php:947
891
  msgid "Multiple suspicious activities"
892
  msgstr ""
893
 
894
+ #: ../common.php:948
895
  msgid "Denied"
896
  msgstr ""
897
 
898
+ #: ../common.php:949
899
  msgid "Suspicious number of fields"
900
  msgstr ""
901
 
902
+ #: ../common.php:950
903
  msgid "Suspicious number of nested values"
904
  msgstr ""
905
 
906
+ #: ../common.php:951 ../common.php:985
907
  msgid "Malicious code detected"
908
  msgstr ""
909
 
910
+ #: ../common.php:952
911
  msgid "Suspicious SQL code detected"
912
  msgstr ""
913
 
914
+ #: ../common.php:953
915
  msgid "Suspicious JavaScript code detected"
916
  msgstr ""
917
 
918
+ #: ../common.php:977
919
  msgid "Limit on login attempts is reached"
920
  msgstr ""
921
 
922
+ #: ../common.php:978
923
  msgid "Attempt to access"
924
  msgstr ""
925
 
926
+ #: ../common.php:981
927
  msgid "Limit on failed reCAPTCHA verifications is reached"
928
  msgstr ""
929
 
930
+ #: ../common.php:982
931
  msgid "Bot activity is detected"
932
  msgstr ""
933
 
934
+ #: ../common.php:983
935
  msgid "Multiple suspicious activities were detected"
936
  msgstr ""
937
 
938
+ #: ../common.php:986
939
  msgid "Attempt to upload a file with malicious code"
940
  msgstr ""
941
 
942
+ #: ../common.php:988
943
  msgid "Multiple suspicious requests"
944
  msgstr ""
945
 
946
+ #: ../common.php:1131
947
  #, php-format
948
  msgid "%s ago"
949
  msgstr ""
950
 
951
+ #: ../common.php:1131
952
  #, php-format
953
  msgctxt "preposition of a period of time like: in 6 hours"
954
  msgid "in %s"
955
  msgstr ""
956
 
957
+ #: ../common.php:1217
958
  msgid "Bytes"
959
  msgstr ""
960
 
961
+ #: ../common.php:1315 ../settings.php:237
962
  msgid "New version is available"
963
  msgstr ""
964
 
965
+ #: ../common.php:1322
966
  #, php-format
967
  msgid "Update to version %s of WP Cerber"
968
  msgstr ""
969
 
970
+ #: ../common.php:1341
971
  msgid "Not specified"
972
  msgstr ""
973
 
974
+ #: ../common.php:2167
975
  msgid "Unable to create the directory"
976
  msgstr ""
977
 
978
+ #: ../common.php:2172
979
  msgid "Destination folder access denied"
980
  msgstr ""
981
 
982
+ #: ../common.php:2175
983
  msgid "File not found"
984
  msgstr ""
985
 
986
+ #: ../common.php:2178
987
  msgid "Unable to copy the file"
988
  msgstr ""
989
 
990
+ #: ../common.php:2184
991
  msgid "Unable to delete the file"
992
  msgstr ""
993
 
994
+ #: ../cerber-news.php:139
995
  msgid "Awesome!"
996
  msgstr ""
997
 
998
+ #: ../cerber-lab.php:762
999
  msgid "Want to make WP Cerber even more powerful?"
1000
  msgstr ""
1001
 
1002
+ #: ../cerber-lab.php:763
1003
  msgid ""
1004
  "Allow WP Cerber to send locked out malicious IP addresses to Cerber Lab. "
1005
  "This helps the plugin team to develop new algorithms for WP Cerber that will "
1007
  "everyday. You can disable the sending in the plugin settings at any time."
1008
  msgstr ""
1009
 
1010
+ #: ../cerber-lab.php:764
1011
  msgid "OK, nail them all"
1012
  msgstr ""
1013
 
1014
+ #: ../cerber-lab.php:765
1015
  msgid "NO, maybe later"
1016
  msgstr ""
1017
 
1018
+ #: ../cerber-lab.php:766 ../settings.php:628 ../settings.php:631
1019
  msgid "Know more"
1020
  msgstr ""
1021
 
1022
+ #: ../cerber-load.php:385
1023
  msgid "You are not allowed to log in. Ask your administrator for assistance."
1024
  msgstr ""
1025
 
1026
+ #: ../cerber-load.php:392
1027
  #, php-format
1028
  msgid ""
1029
  "You have exceeded the number of allowed login attempts. Please try again in "
1030
  "%d minutes."
1031
  msgstr ""
1032
 
1033
+ #: ../cerber-load.php:411
1034
  #, php-format
1035
  msgid "You have only one attempt remaining."
1036
  msgid_plural "You have %d attempts remaining."
1037
  msgstr[0] ""
1038
  msgstr[1] ""
1039
 
1040
+ #: ../cerber-load.php:723
1041
  msgid ""
1042
  "Human verification failed. Please click the square box in the reCAPTCHA "
1043
  "block below."
1044
  msgstr ""
1045
 
1046
+ #: ../cerber-load.php:853
1047
  msgid ""
1048
  "> > > Translator of WP Cerber? To get the PRO license for free, drop your "
1049
  "contacts here: https://wpcerber.com/contact/"
1050
  msgstr ""
1051
 
1052
+ #: ../cerber-load.php:1000
1053
  #, php-format
1054
  msgid ""
1055
  "<strong>ERROR</strong>: The password you entered for the username %s is "
1056
  "incorrect."
1057
  msgstr ""
1058
 
1059
+ #: ../cerber-load.php:1216 ../cerber-load.php:1222 ../cerber-load.php:1238 ..
1060
+ #: /cerber-load.php:1245
1061
  msgid "You are not allowed to register."
1062
  msgstr ""
1063
 
1064
+ #: ../cerber-load.php:1232
1065
  msgid "Username is not allowed. Please choose another one."
1066
  msgstr ""
1067
 
1068
+ #: ../cerber-load.php:1483
1069
  msgid "Sorry, human verification failed."
1070
  msgstr ""
1071
 
1072
+ #: ../cerber-load.php:3296
1073
  msgid "We're sorry, you are not allowed to proceed"
1074
  msgstr ""
1075
 
1076
+ #: ../cerber-load.php:3406
1077
  msgid "WP Cerber notify"
1078
  msgstr ""
1079
 
1080
+ #: ../cerber-load.php:3430
1081
  msgid "Citadel mode is activated"
1082
  msgstr ""
1083
 
1084
+ #: ../cerber-load.php:3432
1085
  #, php-format
1086
  msgid "Citadel mode is activated after %d failed login attempts in %d minutes."
1087
  msgstr ""
1088
 
1089
+ #: ../cerber-load.php:3433
1090
  #, php-format
1091
  msgid "Last failed attempt was at %s from IP %s with user login: %s."
1092
  msgstr ""
1093
 
1094
+ #: ../cerber-load.php:3434 ../cerber-load.php:4039
1095
  msgid "View activity in dashboard"
1096
  msgstr ""
1097
 
1098
+ #: ../cerber-load.php:3458
1099
  msgid "unspecified"
1100
  msgstr ""
1101
 
1102
+ #: ../cerber-load.php:3461
1103
  msgid "Number of lockouts is increasing"
1104
  msgstr ""
1105
 
1106
+ #: ../cerber-load.php:3463
1107
  msgid "Number of active lockouts"
1108
  msgstr ""
1109
 
1110
+ #: ../cerber-load.php:3464
1111
  #, php-format
1112
  msgid "Last lockout was added: %s for IP %s"
1113
  msgstr ""
1114
 
1115
+ #: ../cerber-load.php:3466
1116
  msgid "View activity for this IP"
1117
  msgstr ""
1118
 
1119
+ #: ../cerber-load.php:3467
1120
  msgid "View lockouts in dashboard"
1121
  msgstr ""
1122
 
1123
+ #: ../cerber-load.php:3470 ../cerber-load.php:3472
1124
  msgid "A new version of WP Cerber is available to install"
1125
  msgstr ""
1126
 
1127
+ #: ../cerber-load.php:3471
1128
  msgid "Hi!"
1129
  msgstr ""
1130
 
1131
+ #: ../cerber-load.php:3474 ../cerber-load.php:3485
1132
  msgid "Website"
1133
  msgstr ""
1134
 
1135
+ #: ../cerber-load.php:3477 ../cerber-load.php:3478
1136
  msgid "The WP Cerber security plugin has been deactivated"
1137
  msgstr ""
1138
 
1139
+ #: ../cerber-load.php:3480
1140
  msgid "Not logged in"
1141
  msgstr ""
1142
 
1143
+ #: ../cerber-load.php:3486
1144
  msgid "By user"
1145
  msgstr ""
1146
 
1147
+ #: ../cerber-load.php:3487
1148
  msgid "From IP address"
1149
  msgstr ""
1150
 
1151
+ #: ../cerber-load.php:3490
1152
  msgid "From country"
1153
  msgstr ""
1154
 
1155
+ #: ../cerber-load.php:3494
1156
  msgid "The WP Cerber security plugin is now active"
1157
  msgstr ""
1158
 
1159
+ #: ../cerber-load.php:3495 ../cerber-load.php:4280
1160
  msgid "WP Cerber is now active and has started protecting your site"
1161
  msgstr ""
1162
 
1163
+ #: ../cerber-load.php:3502
1164
  msgid "New Custom login URL"
1165
  msgstr ""
1166
 
1167
+ #: ../cerber-load.php:3506 ../cerber-load.php:3507
1168
  msgid "A new activity has been recorded"
1169
  msgstr ""
1170
 
1171
+ #: ../cerber-load.php:3512
1172
  msgid "Weekly report"
1173
  msgstr ""
1174
 
1175
+ #: ../cerber-load.php:3515 ../cerber-load.php:3525
1176
  msgid "To change reporting settings visit"
1177
  msgstr ""
1178
 
1179
+ #: ../cerber-load.php:3522
1180
  msgid "Scanner Report"
1181
  msgstr ""
1182
 
1183
+ #: ../cerber-load.php:3548
1184
  msgid "Your login page:"
1185
  msgstr ""
1186
 
1187
+ #: ../cerber-load.php:3552
1188
  msgid "Your license is valid until"
1189
  msgstr ""
1190
 
1191
+ #: ../cerber-load.php:3555
1192
  msgid "This message was sent by"
1193
  msgstr ""
1194
 
1195
+ #: ../cerber-load.php:3576
1196
  #, php-format
1197
  msgid "Your last sign-in was %s from %s"
1198
  msgstr ""
1199
 
1200
+ #: ../cerber-load.php:3646
1201
  msgid "Weekly Report"
1202
  msgstr ""
1203
 
1204
+ #: ../cerber-load.php:3658
1205
  msgid "Activity details"
1206
  msgstr ""
1207
 
1208
+ #: ../cerber-load.php:3672
1209
  msgid "Attempts to log in with non-existent username"
1210
  msgstr ""
1211
 
1212
+ #: ../cerber-load.php:4011
1213
  msgid "User"
1214
  msgstr ""
1215
 
1216
+ #: ../cerber-load.php:4019
1217
  msgid "Search string"
1218
  msgstr ""
1219
 
1220
+ #: ../cerber-load.php:4040
1221
  msgid "To unsubscribe click here"
1222
  msgstr ""
1223
 
1224
+ #: ../cerber-load.php:4246
1225
  #, php-format
1226
  msgid "The WP Cerber requires PHP %s or higher. You are running"
1227
  msgstr ""
1228
 
1229
+ #: ../cerber-load.php:4250
1230
  #, php-format
1231
  msgid "The WP Cerber requires WordPress %s or higher. You are running"
1232
  msgstr ""
1233
 
1234
+ #: ../cerber-load.php:4259
1235
  msgid "Can't activate WP Cerber due to a database error."
1236
  msgstr ""
1237
 
1238
+ #: ../cerber-load.php:4281
1239
  msgid "Your IP address is added to the"
1240
  msgstr ""
1241
 
1242
+ #: ../cerber-load.php:4291 ../settings.php:657
1243
  msgid "Main Settings"
1244
  msgstr ""
1245
 
1246
+ #: ../cerber-load.php:4292 ../cerber-scanner.php:75
1247
  msgid "Security Scanner"
1248
  msgstr ""
1249
 
1250
+ #: ../cerber-load.php:4293 ../settings.php:658 ../cerber-tools.php:92 ../cerber-
1251
+ #: tools.php:101 ../cerber-tools.php:188
1252
  msgid "Access Lists"
1253
  msgstr ""
1254
 
1255
+ #: ../cerber-load.php:4295 ../settings.php:659
1256
  msgid "Hardening"
1257
  msgstr ""
1258
 
1259
+ #: ../cerber-load.php:4296 ../settings.php:83 ../settings.php:107 ../settings.php:
1260
+ #: 661
1261
  msgid "Notifications"
1262
  msgstr ""
1263
 
1264
+ #: ../cerber-load.php:4297
1265
  msgid "Import settings"
1266
  msgstr ""
1267
 
1268
+ #: ../settings.php:75
1269
  msgid "Plugin initialization"
1270
  msgstr ""
1271
 
1272
+ #: ../settings.php:76
1273
  msgid "Load security engine"
1274
  msgstr ""
1275
 
1276
+ #: ../settings.php:76
1277
  msgid "Legacy mode"
1278
  msgstr ""
1279
 
1280
+ #: ../settings.php:76
1281
  msgid "Standard mode"
1282
  msgstr ""
1283
 
1284
+ #: ../settings.php:78
1285
  msgid "Limit login attempts"
1286
  msgstr ""
1287
 
1288
+ #: ../settings.php:79
1289
  msgid "Attempts"
1290
  msgstr ""
1291
 
1292
+ #: ../settings.php:80
1293
  msgid "Lockout duration"
1294
  msgstr ""
1295
 
1296
+ #: ../settings.php:80 ../settings.php:106
1297
  msgid "minutes"
1298
  msgstr ""
1299
 
1300
+ #: ../settings.php:81
1301
  msgid "Aggressive lockout"
1302
  msgstr ""
1303
 
1304
+ #: ../settings.php:82 ../settings.php:295
1305
  msgid "Use White IP Access List"
1306
  msgstr ""
1307
 
1308
+ #: ../settings.php:82
1309
  msgid "Apply limit login rules to IP addresses in the White IP Access List"
1310
  msgstr ""
1311
 
1312
+ #: ../settings.php:84
1313
  msgid "Site connection"
1314
  msgstr ""
1315
 
1316
+ #: ../settings.php:86
1317
  msgid "Proactive security rules"
1318
  msgstr ""
1319
 
1320
+ #: ../settings.php:87
1321
  msgid "Block subnet"
1322
  msgstr ""
1323
 
1324
+ #: ../settings.php:87
1325
  msgid "Always block entire subnet Class C of intruders IP"
1326
  msgstr ""
1327
 
1328
+ #: ../settings.php:88
1329
  msgid "Non-existent users"
1330
  msgstr ""
1331
 
1332
+ #: ../settings.php:88
1333
  msgid "Immediately block IP when attempting to login with a non-existent username"
1334
  msgstr ""
1335
 
1336
+ #: ../settings.php:89
1337
  msgid "Disable dashboard redirection"
1338
  msgstr ""
1339
 
1340
+ #: ../settings.php:89
1341
  msgid ""
1342
  "Disable automatic redirection to the login page when /wp-admin/ is requested "
1343
  "by an unauthorized request"
1344
  msgstr ""
1345
 
1346
+ #: ../settings.php:90
1347
  msgid "Request wp-login.php"
1348
  msgstr ""
1349
 
1350
+ #: ../settings.php:90
1351
  msgid "Immediately block IP after any request to wp-login.php"
1352
  msgstr ""
1353
 
1354
+ #: ../settings.php:91
1355
  msgid "Display 404 page"
1356
  msgstr ""
1357
 
1358
+ #: ../settings.php:91
1359
  msgid "Use 404 template from the active theme"
1360
  msgstr ""
1361
 
1362
+ #: ../settings.php:91
1363
  msgid "Display simple 404 page"
1364
  msgstr ""
1365
 
1366
+ #: ../settings.php:93
1367
  msgid "Custom login page"
1368
  msgstr ""
1369
 
1370
+ #: ../settings.php:94
1371
  msgid "Custom login URL"
1372
  msgstr ""
1373
 
1374
+ #: ../settings.php:99
1375
  msgid "Custom login URL may contain only letters, numbers, dashes and underscores"
1376
  msgstr ""
1377
 
1378
+ #: ../settings.php:100
1379
  msgid "must not overlap with the existing pages or posts slug"
1380
  msgstr ""
1381
 
1382
+ #: ../settings.php:102
1383
  msgid "Disable wp-login.php"
1384
  msgstr ""
1385
 
1386
+ #: ../settings.php:102
1387
  msgid "Block direct access to wp-login.php and return HTTP 404 Not Found Error"
1388
  msgstr ""
1389
 
1390
+ #: ../settings.php:105
1391
  msgid "Threshold"
1392
  msgstr ""
1393
 
1394
+ #: ../settings.php:106 ../cerber-scanner.php:3700
1395
  msgid "Duration"
1396
  msgstr ""
1397
 
1398
+ #: ../settings.php:107
1399
  msgid "Send notification to admin email"
1400
  msgstr ""
1401
 
1402
+ #: ../settings.php:107 ../settings.php:797 ../settings.php:919
1403
  msgid "Click to send test"
1404
  msgstr ""
1405
 
1406
+ #: ../settings.php:110 ../settings.php:395
1407
  msgid "Keep records for"
1408
  msgstr ""
1409
 
1410
+ #: ../settings.php:110 ../settings.php:192 ../settings.php:399 ../settings.php:470
1411
  msgid "days"
1412
  msgstr ""
1413
 
1414
+ #: ../settings.php:111
1415
  msgid "Cerber Lab connection"
1416
  msgstr ""
1417
 
1418
+ #: ../settings.php:111
1419
  msgid "Send malicious IP addresses to the Cerber Lab"
1420
  msgstr ""
1421
 
1422
+ #: ../settings.php:112
1423
  msgid "Cerber Lab protocol"
1424
  msgstr ""
1425
 
1426
+ #: ../settings.php:113
1427
  msgid "Use file"
1428
  msgstr ""
1429
 
1430
+ #: ../settings.php:113
1431
  msgid "Write failed login attempts to the file"
1432
  msgstr ""
1433
 
1434
+ #: ../settings.php:115
1435
  msgid "Preferences"
1436
  msgstr ""
1437
 
1438
+ #: ../settings.php:116
1439
  msgid "Drill down IP"
1440
  msgstr ""
1441
 
1442
+ #: ../settings.php:116
1443
  msgid "Retrieve extra WHOIS information for IP"
1444
  msgstr ""
1445
 
1446
+ #: ../settings.php:117
1447
  msgid "Date format"
1448
  msgstr ""
1449
 
1450
+ #: ../settings.php:117
1451
  #, php-format
1452
  msgid "if empty, the default format %s will be used"
1453
  msgstr ""
1454
 
1455
+ #: ../settings.php:118
1456
  msgid "Use English for admin interface"
1457
  msgstr ""
1458
 
1459
+ #: ../settings.php:124
1460
  msgid "Hardening WordPress"
1461
  msgstr ""
1462
 
1463
+ #: ../settings.php:125
1464
  msgid "Stop user enumeration"
1465
  msgstr ""
1466
 
1467
+ #: ../settings.php:125
1468
  msgid "Block access to user pages like /?author=n and user data via REST API"
1469
  msgstr ""
1470
 
1471
+ #: ../settings.php:126
1472
  msgid "Protect admin scripts"
1473
  msgstr ""
1474
 
1475
+ #: ../settings.php:126
1476
  msgid "Block unauthorized access to load-scripts.php and load-styles.php"
1477
  msgstr ""
1478
 
1479
+ #: ../settings.php:129
1480
  msgid "Disable PHP in uploads"
1481
  msgstr ""
1482
 
1483
+ #: ../settings.php:129
1484
  msgid "Disable execution of PHP scripts in the WordPress media folder"
1485
  msgstr ""
1486
 
1487
+ #: ../settings.php:131
1488
  msgid "Disable PHP error displaying"
1489
  msgstr ""
1490
 
1491
+ #: ../settings.php:133
1492
  msgid "Disable XML-RPC"
1493
  msgstr ""
1494
 
1495
+ #: ../settings.php:133
1496
  msgid "Block access to the XML-RPC server (including Pingbacks and Trackbacks)"
1497
  msgstr ""
1498
 
1499
+ #: ../settings.php:134
1500
  msgid "Disable feeds"
1501
  msgstr ""
1502
 
1503
+ #: ../settings.php:134
1504
  msgid "Block access to the RSS, Atom and RDF feeds"
1505
  msgstr ""
1506
 
1507
+ #: ../settings.php:135
1508
  msgid "Disable REST API"
1509
  msgstr ""
1510
 
1511
+ #: ../settings.php:135
1512
  msgid "Block access to the WordPress REST API except the following"
1513
  msgstr ""
1514
 
1515
+ #: ../settings.php:136
1516
  msgid "Allow REST API for logged in users"
1517
  msgstr ""
1518
 
1519
+ #: ../settings.php:143
1520
  msgid ""
1521
  "Specify REST API namespaces to be allowed if REST API is disabled. One "
1522
  "string per line."
1523
  msgstr ""
1524
 
1525
+ #: ../settings.php:153
1526
  msgid "User related settings"
1527
  msgstr ""
1528
 
1529
+ #: ../settings.php:155
1530
  msgid "Registration limit"
1531
  msgstr ""
1532
 
1533
+ #: ../settings.php:157
1534
  msgid "Prohibited usernames"
1535
  msgstr ""
1536
 
1537
+ #: ../settings.php:163
1538
  msgid ""
1539
  "Usernames from this list are not allowed to log in or register. Any IP "
1540
  "address, have tried to use any of these usernames, will be immediately "
1541
  "blocked. Use comma to separate logins."
1542
  msgstr ""
1543
 
1544
+ #: ../settings.php:163
1545
  msgid "To specify a REGEX pattern wrap a pattern in two forward slashes."
1546
  msgstr ""
1547
 
1548
+ #: ../settings.php:165
1549
  msgid "User session expire"
1550
  msgstr ""
1551
 
1552
+ #: ../settings.php:165
1553
  msgid "in minutes (leave empty to use default WP value)"
1554
  msgstr ""
1555
 
1556
+ #: ../settings.php:166
1557
  msgid "Sort users in dashboard"
1558
  msgstr ""
1559
 
1560
+ #: ../settings.php:166
1561
  msgid "by date of registration"
1562
  msgstr ""
1563
 
1564
+ #: ../settings.php:173
1565
  msgid "Cerber antispam engine"
1566
  msgstr ""
1567
 
1568
+ #: ../settings.php:174
1569
  msgid "Comment form"
1570
  msgstr ""
1571
 
1572
+ #: ../settings.php:174
1573
  msgid "Protect comment form with bot detection engine"
1574
  msgstr ""
1575
 
1576
+ #: ../settings.php:175 ../settings.php:203
1577
  msgid "Registration form"
1578
  msgstr ""
1579
 
1580
+ #: ../settings.php:175
1581
  msgid "Protect registration form with bot detection engine"
1582
  msgstr ""
1583
 
1584
+ #: ../settings.php:176
1585
  msgid "Other forms"
1586
  msgstr ""
1587
 
1588
+ #: ../settings.php:176
1589
  msgid "Protect all forms on the website with bot detection engine"
1590
  msgstr ""
1591
 
1592
+ #: ../settings.php:178
1593
  msgid "Adjust antispam engine"
1594
  msgstr ""
1595
 
1596
+ #: ../settings.php:179
1597
  msgid "Safe mode"
1598
  msgstr ""
1599
 
1600
+ #: ../settings.php:179
1601
  msgid "Use less restrictive policies (allow AJAX)"
1602
  msgstr ""
1603
 
1604
+ #: ../settings.php:180
1605
  msgid "Disable bot detection engine for logged in users"
1606
  msgstr ""
1607
 
1608
+ #: ../settings.php:181
1609
  msgid "Query whitelist"
1610
  msgstr ""
1611
 
1612
+ #: ../settings.php:187
1613
  msgid ""
1614
  "Enter a part of query string or query path to exclude a request from "
1615
  "inspection by the engine. One item per line."
1616
  msgstr ""
1617
 
1618
+ #: ../settings.php:187 ../settings.php:306
1619
  msgid "To specify a REGEX pattern, enclose a whole line in two braces."
1620
  msgstr ""
1621
 
1622
+ #: ../settings.php:190
1623
  msgid "Comment processing"
1624
  msgstr ""
1625
 
1626
+ #: ../settings.php:191
1627
  msgid "If a spam comment detected"
1628
  msgstr ""
1629
 
1630
+ #: ../settings.php:191
1631
  msgid "Deny it completely"
1632
  msgstr ""
1633
 
1634
+ #: ../settings.php:191
1635
  msgid "Mark it as spam"
1636
  msgstr ""
1637
 
1638
+ #: ../settings.php:192
1639
  msgid "Trash spam comments"
1640
  msgstr ""
1641
 
1642
+ #: ../settings.php:192
1643
  msgid "Move spam comments to trash after"
1644
  msgstr ""
1645
 
1646
+ #: ../settings.php:198
1647
  msgid "reCAPTCHA settings"
1648
  msgstr ""
1649
 
1650
+ #: ../settings.php:199
1651
  msgid "Site key"
1652
  msgstr ""
1653
 
1654
+ #: ../settings.php:200
1655
  msgid "Secret key"
1656
  msgstr ""
1657
 
1658
+ #: ../settings.php:201
1659
  msgid "Invisible reCAPTCHA"
1660
  msgstr ""
1661
 
1662
+ #: ../settings.php:201
1663
  msgid "Enable invisible reCAPTCHA"
1664
  msgstr ""
1665
 
1666
+ #: ../settings.php:201
1667
  msgid ""
1668
  "(do not enable it unless you get and enter the Site and Secret keys for the "
1669
  "invisible version)"
1670
  msgstr ""
1671
 
1672
+ #: ../settings.php:203
1673
  msgid "Enable reCAPTCHA for WordPress registration form"
1674
  msgstr ""
1675
 
1676
+ #: ../settings.php:204
1677
  msgid "Enable reCAPTCHA for WooCommerce registration form"
1678
  msgstr ""
1679
 
1680
+ #: ../settings.php:206
1681
  msgid "Lost password form"
1682
  msgstr ""
1683
 
1684
+ #: ../settings.php:206
1685
  msgid "Enable reCAPTCHA for WordPress lost password form"
1686
  msgstr ""
1687
 
1688
+ #: ../settings.php:207
1689
  msgid "Enable reCAPTCHA for WooCommerce lost password form"
1690
  msgstr ""
1691
 
1692
+ #: ../settings.php:209
1693
  msgid "Login form"
1694
  msgstr ""
1695
 
1696
+ #: ../settings.php:209
1697
  msgid "Enable reCAPTCHA for WordPress login form"
1698
  msgstr ""
1699
 
1700
+ #: ../settings.php:210
1701
  msgid "Enable reCAPTCHA for WooCommerce login form"
1702
  msgstr ""
1703
 
1704
+ #: ../settings.php:212
1705
  msgid "Enable reCAPTCHA for WordPress comment form"
1706
  msgstr ""
1707
 
1708
+ #: ../settings.php:213
1709
  msgid "Disable reCAPTCHA for logged in users"
1710
  msgstr ""
1711
 
1712
+ #: ../settings.php:215
1713
  msgid "Limit attempts"
1714
  msgstr ""
1715
 
1716
+ #: ../settings.php:215
1717
  #, php-format
1718
  msgid "Lock out IP address for %s minutes after %s failed attempts within %s minutes"
1719
  msgstr ""
1720
 
1721
+ #: ../settings.php:221
1722
  msgid "Email notifications"
1723
  msgstr ""
1724
 
1725
+ #: ../settings.php:224 ../settings.php:265 ../settings.php:532
1726
  msgid "Email Address"
1727
  msgstr ""
1728
 
1729
+ #: ../settings.php:228 ../settings.php:270 ../settings.php:358 ../settings.php:536
1730
  msgid "Use comma to specify multiple values"
1731
  msgstr ""
1732
 
1733
+ #: ../settings.php:233
1734
  #, php-format
1735
  msgid "if empty, the admin email %s will be used"
1736
  msgstr ""
1737
 
1738
+ #: ../settings.php:236
1739
  msgid "Notification limit"
1740
  msgstr ""
1741
 
1742
+ #: ../settings.php:236
1743
  msgid "notification letters allowed per hour (0 means unlimited)"
1744
  msgstr ""
1745
 
1746
+ #: ../settings.php:242
1747
  msgid "Push notifications"
1748
  msgstr ""
1749
 
1750
+ #: ../settings.php:250
1751
  msgid "All connected devices"
1752
  msgstr ""
1753
 
1754
+ #: ../settings.php:253
1755
  msgid "No devices found"
1756
  msgstr ""
1757
 
1758
+ #: ../settings.php:257
1759
  msgid "Not available"
1760
  msgstr ""
1761
 
1762
+ #: ../settings.php:262
1763
  msgid "Weekly reports"
1764
  msgstr ""
1765
 
1766
+ #: ../settings.php:263
1767
  msgid "Enable reporting"
1768
  msgstr ""
1769
 
1770
+ #: ../settings.php:275 ../settings.php:541
1771
  msgid "if empty, email from notification settings will be used"
1772
  msgstr ""
1773
 
1774
+ #: ../settings.php:283
1775
  msgid "Traffic Inspection"
1776
  msgstr ""
1777
 
1778
+ #: ../settings.php:284
1779
  msgid "Enable traffic inspection"
1780
  msgstr ""
1781
 
1782
+ #: ../settings.php:291 ../settings.php:317
1783
+ msgid "Maximum compatibility"
1784
+ msgstr ""
1785
+
1786
+ #: ../settings.php:292 ../settings.php:318
1787
+ msgid "Maximum security"
1788
  msgstr ""
1789
 
1790
+ #: ../settings.php:300
1791
  msgid "Request whitelist"
1792
  msgstr ""
1793
 
1794
+ #: ../settings.php:306
1795
  msgid ""
1796
  "Enter a request URI to exclude the request from inspection. One item per "
1797
  "line."
1798
  msgstr ""
1799
 
1800
+ #: ../settings.php:309
1801
+ msgid "Erroneous Request Shielding"
1802
+ msgstr ""
1803
+
1804
+ #: ../settings.php:310
1805
+ msgid "Enable error shielding"
1806
+ msgstr ""
1807
+
1808
+ #: ../settings.php:321
1809
+ msgid "Disable for logged in users"
1810
+ msgstr ""
1811
+
1812
+ #: ../settings.php:328
1813
  msgid "Logging"
1814
  msgstr ""
1815
 
1816
+ #: ../settings.php:329
1817
  msgid "Logging mode"
1818
  msgstr ""
1819
 
1820
+ #: ../settings.php:335
1821
  msgid "Logging disabled"
1822
  msgstr ""
1823
 
1824
+ #: ../settings.php:336
1825
  msgid "Smart"
1826
  msgstr ""
1827
 
1828
+ #: ../settings.php:337
1829
  msgid "All traffic"
1830
  msgstr ""
1831
 
1832
+ #: ../settings.php:341
1833
  msgid "Ignore crawlers"
1834
  msgstr ""
1835
 
1836
+ #: ../settings.php:346
1837
  msgid "Save request fields"
1838
  msgstr ""
1839
 
1840
+ #: ../settings.php:351
1841
  msgid "Mask these form fields"
1842
  msgstr ""
1843
 
1844
+ #: ../settings.php:363
1845
  msgid "Save request headers"
1846
  msgstr ""
1847
 
1848
+ #: ../settings.php:369
1849
  msgid "Save $_SERVER"
1850
  msgstr ""
1851
 
1852
+ #: ../settings.php:375
1853
  msgid "Save request cookies"
1854
  msgstr ""
1855
 
1856
+ #: ../settings.php:381
1857
  msgid "Save software errors"
1858
  msgstr ""
1859
 
1860
+ #: ../settings.php:387
1861
  msgid "Page generation time threshold"
1862
  msgstr ""
1863
 
1864
+ #: ../settings.php:392
1865
  msgid "milliseconds"
1866
  msgstr ""
1867
 
1868
+ #: ../settings.php:408
1869
  msgid "Scanner settings"
1870
  msgstr ""
1871
 
1872
+ #: ../settings.php:409
1873
  msgid "Custom signatures"
1874
  msgstr ""
1875
 
1876
+ #: ../settings.php:415
1877
  msgid ""
1878
  "Specify custom PHP code signatures. One item per line. To specify a REGEX "
1879
  "pattern, enclose a whole line in two braces."
1880
  msgstr ""
1881
 
1882
+ #: ../settings.php:417
1883
  msgid "Unwanted file extensions"
1884
  msgstr ""
1885
 
1886
+ #: ../settings.php:423
1887
  msgid ""
1888
  "Specify file extensions to search for. Full scan only. Use comma to separate "
1889
  "items."
1890
  msgstr ""
1891
 
1892
+ #: ../settings.php:425
1893
  msgid "Directories to exclude"
1894
  msgstr ""
1895
 
1896
+ #: ../settings.php:431
1897
  msgid ""
1898
  "Specify directories to exclude from scanning. Use absolute paths. One item "
1899
  "per line."
1900
  msgstr ""
1901
 
1902
+ #: ../settings.php:433
1903
  msgid "Monitor new files"
1904
  msgstr ""
1905
 
1906
+ #: ../settings.php:440
1907
  msgid "Monitor modified files"
1908
  msgstr ""
1909
 
1910
+ #: ../settings.php:446
1911
  msgid "Scan temporary directory"
1912
  msgstr ""
1913
 
1914
+ #: ../settings.php:453
1915
  msgid "Scan session directory"
1916
  msgstr ""
1917
 
1918
+ #: ../settings.php:459
1919
  msgid "Enable diagnostic log"
1920
  msgstr ""
1921
 
1922
+ #: ../settings.php:465
1923
  msgid "Delete quarantined files after"
1924
  msgstr ""
1925
 
1926
+ #: ../settings.php:479
1927
  msgid "Automated recurring scan schedule"
1928
  msgstr ""
1929
 
1930
+ #: ../settings.php:480
1931
  msgid "Launch Quick Scan"
1932
  msgstr ""
1933
 
1934
+ #: ../settings.php:487
1935
  msgid "Launch Full Scan"
1936
  msgstr ""
1937
 
1938
+ #: ../settings.php:495
1939
  msgid "Scan results reporting"
1940
  msgstr ""
1941
 
1942
+ #: ../settings.php:497 ../settings.php:557
1943
  msgid "Low severity"
1944
  msgstr ""
1945
 
1946
+ #: ../settings.php:497 ../settings.php:557
1947
  msgid "Medium severity"
1948
  msgstr ""
1949
 
1950
+ #: ../settings.php:497 ../settings.php:557
1951
  msgid "High severity"
1952
  msgstr ""
1953
 
1954
+ #: ../settings.php:498
1955
  msgid "Report an issue if any of the following is true"
1956
  msgstr ""
1957
 
1958
+ #: ../settings.php:506
1959
  msgid "Send email report"
1960
  msgstr ""
1961
 
1962
+ #: ../settings.php:512
1963
  msgid "After every scan"
1964
  msgstr ""
1965
 
1966
+ #: ../settings.php:513
1967
  msgid "If any changes in scan results occurred"
1968
  msgstr ""
1969
 
1970
+ #: ../settings.php:514
1971
  msgid "If new issues found"
1972
  msgstr ""
1973
 
1974
+ #: ../settings.php:518
1975
  msgid "Include file sizes"
1976
  msgstr ""
1977
 
1978
+ #: ../settings.php:525
1979
  msgid "Include scan errors"
1980
  msgstr ""
1981
 
1982
+ #: ../settings.php:549
1983
  msgid "Automatic cleanup of malware and suspicious files"
1984
  msgstr ""
1985
 
1986
+ #: ../settings.php:551 ../cerber-scanner.php:3732
1987
  msgid "Unattended files"
1988
  msgstr ""
1989
 
1990
+ #: ../settings.php:558
1991
  msgid "Files in the uploads folder"
1992
  msgstr ""
1993
 
1994
+ #: ../settings.php:565
1995
  msgid "Files with unwanted extensions"
1996
  msgstr ""
1997
 
1998
+ #: ../settings.php:572
1999
  msgid "Exclusions"
2000
  msgstr ""
2001
 
2002
+ #: ../settings.php:573
2003
  msgid "Files in the temporary directory"
2004
  msgstr ""
2005
 
2006
+ #: ../settings.php:579
2007
  msgid "Files in the sessions directory"
2008
  msgstr ""
2009
 
2010
+ #: ../settings.php:585
2011
  msgid "Files in these directories"
2012
  msgstr ""
2013
 
2014
+ #: ../settings.php:591
2015
  msgid "Use absolute paths. One item per line."
2016
  msgstr ""
2017
 
2018
+ #: ../settings.php:593
2019
  msgid "Files with these extensions"
2020
  msgstr ""
2021
 
2022
+ #: ../settings.php:599
2023
  msgid "Use comma to separate items."
2024
  msgstr ""
2025
 
2026
+ #: ../settings.php:610
2027
  msgid "Make your protection smarter!"
2028
  msgstr ""
2029
 
2030
+ #: ../settings.php:614
2031
  msgid ""
2032
  "Please enable Permalinks to use this feature. Set Permalink Settings to "
2033
  "something other than Default."
2034
  msgstr ""
2035
 
2036
+ #: ../settings.php:617
2037
  msgid "Be careful about enabling these options."
2038
  msgstr ""
2039
 
2040
+ #: ../settings.php:617
2041
  msgid "If you forget your Custom login URL, you will be unable to log in."
2042
  msgstr ""
2043
 
2044
+ #: ../settings.php:621
2045
  msgid ""
2046
  "In the Citadel mode nobody is able to log in except IPs from the White IP "
2047
  "Access List. Active user sessions will not be affected."
2048
  msgstr ""
2049
 
2050
+ #: ../settings.php:624
2051
  msgid "These settings do not affect hosts from the "
2052
  msgstr ""
2053
 
2054
+ #: ../settings.php:627
2055
  msgid ""
2056
  "Before you can start using reCAPTCHA, you have to obtain Site key and Secret "
2057
  "key on the Google website"
2058
  msgstr ""
2059
 
2060
+ #: ../settings.php:656
2061
  msgid "Lockouts"
2062
  msgstr ""
2063
 
2064
+ #: ../settings.php:660
2065
  msgid "Users"
2066
  msgstr ""
2067
 
2068
+ #: ../settings.php:778 ../settings.php:900
2069
  #, php-format
2070
  msgid "%s allowed retries in %s minutes"
2071
  msgstr ""
2072
 
2073
+ #: ../settings.php:783 ../settings.php:905
2074
  #, php-format
2075
  msgid "%s allowed registrations in %s minutes from one IP"
2076
  msgstr ""
2077
 
2078
+ #: ../settings.php:788 ../settings.php:910
2079
  #, php-format
2080
  msgid "Increase lockout duration to %s hours after %s lockouts in the last %s hours"
2081
  msgstr ""
2082
 
2083
+ #: ../settings.php:795 ../settings.php:917
2084
  msgid "Notify admin if the number of active lockouts above"
2085
  msgstr ""
2086
 
2087
+ #: ../settings.php:800 ../settings.php:922
2088
  #, php-format
2089
  msgid "Enable after %s failed login attempts in last %s minutes"
2090
  msgstr ""
2091
 
2092
+ #: ../settings.php:1019
2093
  msgid "Sunday"
2094
  msgstr ""
2095
 
2096
+ #: ../settings.php:1020
2097
  msgid "Monday"
2098
  msgstr ""
2099
 
2100
+ #: ../settings.php:1021
2101
  msgid "Tuesday"
2102
  msgstr ""
2103
 
2104
+ #: ../settings.php:1022
2105
  msgid "Wednesday"
2106
  msgstr ""
2107
 
2108
+ #: ../settings.php:1023
2109
  msgid "Thursday"
2110
  msgstr ""
2111
 
2112
+ #: ../settings.php:1024
2113
  msgid "Friday"
2114
  msgstr ""
2115
 
2116
+ #: ../settings.php:1025
2117
  msgid "Saturday"
2118
  msgstr ""
2119
 
2120
+ #: ../settings.php:1035
2121
  msgctxt "preposition of time like: at 11:00"
2122
  msgid "at"
2123
  msgstr ""
2124
 
2125
+ #: ../settings.php:1051
2126
  msgid "Click to send now"
2127
  msgstr ""
2128
 
2129
+ #: ../settings.php:1062
2130
  msgid "Plugin initialization mode has not been changed"
2131
  msgstr ""
2132
 
2133
+ #: ../settings.php:1082 ../settings.php:1083
2134
  msgid "Attention! You have changed the login URL! The new login URL is"
2135
  msgstr ""
2136
 
2137
+ #: ../settings.php:1084 ../settings.php:1085
2138
  msgid ""
2139
  "If you use a caching plugin, you have to add your new login URL to the list "
2140
  "of pages not to cache."
2141
  msgstr ""
2142
 
2143
+ #: ../settings.php:1168 ../settings.php:1180 ../settings.php:1303
2144
  msgid "<strong>ERROR</strong>: please enter a valid email address."
2145
  msgstr ""
2146
 
2147
+ #: ../settings.php:1309
2148
  msgid "The schedule has been updated"
2149
  msgstr ""
2150
 
2151
+ #: ../settings.php:1312
2152
  msgid "Unable to update the schedule"
2153
  msgstr ""
2154
 
2155
+ #: ../cerber-tools.php:40
2156
  msgid "Export & Import"
2157
  msgstr ""
2158
 
2159
+ #: ../cerber-tools.php:41
2160
  msgid "Diagnostic"
2161
  msgstr ""
2162
 
2163
+ #: ../cerber-tools.php:42
2164
  msgid "License"
2165
  msgstr ""
2166
 
2167
+ #: ../cerber-tools.php:43
2168
  msgid "Log"
2169
  msgstr ""
2170
 
2171
+ #: ../cerber-tools.php:88
2172
  msgid "Export settings to the file"
2173
  msgstr ""
2174
 
2175
+ #: ../cerber-tools.php:89
2176
  msgid ""
2177
  "When you click the button below you will get a configuration file, which you "
2178
  "can upload on another site."
2179
  msgstr ""
2180
 
2181
+ #: ../cerber-tools.php:90
2182
  msgid "What do you want to export?"
2183
  msgstr ""
2184
 
2185
+ #: ../cerber-tools.php:93
2186
  msgid "Download file"
2187
  msgstr ""
2188
 
2189
+ #: ../cerber-tools.php:95
2190
  msgid "Import settings from the file"
2191
  msgstr ""
2192
 
2193
+ #: ../cerber-tools.php:96
2194
  msgid ""
2195
  "When you click the button below, file will be uploaded and all existing "
2196
  "settings will be overridden."
2197
  msgstr ""
2198
 
2199
+ #: ../cerber-tools.php:97
2200
  msgid "Select file to import."
2201
  msgstr ""
2202
 
2203
+ #: ../cerber-tools.php:97 ../cerber-scanner.php:3900
2204
  #, php-format
2205
  msgid "Maximum upload file size: %s."
2206
  msgstr ""
2207
 
2208
+ #: ../cerber-tools.php:100
2209
  msgid "What do you want to import?"
2210
  msgstr ""
2211
 
2212
+ #: ../cerber-tools.php:102 ../cerber-scanner.php:3903
2213
  msgid "Upload file"
2214
  msgstr ""
2215
 
2216
+ #: ../cerber-tools.php:151
2217
  msgid "No file was uploaded or file is corrupted"
2218
  msgstr ""
2219
 
2220
+ #: ../cerber-tools.php:188
2221
  msgid "Error while updating"
2222
  msgstr ""
2223
 
2224
+ #: ../cerber-tools.php:194
2225
  msgid "Settings has imported successfully from"
2226
  msgstr ""
2227
 
2228
+ #: ../cerber-tools.php:201
2229
  msgid "Error while parsing file"
2230
  msgstr ""
2231
 
2284
  msgid "Ignore"
2285
  msgstr ""
2286
 
2287
+ #: ../cerber-scanner.php:1416
2288
  msgid "Verified"
2289
  msgstr ""
2290
 
2291
+ #: ../cerber-scanner.php:1422
2292
  msgid "Vulnerability found"
2293
  msgstr ""
2294
 
2295
+ #: ../cerber-scanner.php:1423
2296
  msgid "Integrity data not found"
2297
  msgstr ""
2298
 
2299
+ #: ../cerber-scanner.php:1424
2300
  msgid "Unable to check the integrity of the plugin due to a network error"
2301
  msgstr ""
2302
 
2303
+ #: ../cerber-scanner.php:1425
2304
  msgid "Unable to check the integrity of WordPress files due to a network error"
2305
  msgstr ""
2306
 
2307
+ #: ../cerber-scanner.php:1426
2308
  msgid "Unable to check the integrity of the theme due to a network error"
2309
  msgstr ""
2310
 
2311
+ #: ../cerber-scanner.php:1427
2312
  msgid "Unable to check the integrity due to a DB error"
2313
  msgstr ""
2314
 
2315
+ #: ../cerber-scanner.php:1429
2316
  msgid "Local file doesn't exist"
2317
  msgstr ""
2318
 
2319
+ #: ../cerber-scanner.php:1431
2320
  msgid "Unable to process file"
2321
  msgstr ""
2322
 
2323
+ #: ../cerber-scanner.php:1432 ../cerber-scanner.php:4791
2324
  msgid "Unable to open file"
2325
  msgstr ""
2326
 
2327
+ #: ../cerber-scanner.php:1434
2328
  msgid "Checksum mismatch"
2329
  msgstr ""
2330
 
2331
+ #: ../cerber-scanner.php:1437
2332
  msgid "Suspicious code found"
2333
  msgstr ""
2334
 
2335
+ #: ../cerber-scanner.php:1438
2336
  msgid "Malicious code found"
2337
  msgstr ""
2338
 
2339
+ #: ../cerber-scanner.php:1439
2340
  msgid "Unattended suspicious file"
2341
  msgstr ""
2342
 
2343
+ #: ../cerber-scanner.php:1440
2344
  msgid "Executable code found"
2345
  msgstr ""
2346
 
2347
+ #: ../cerber-scanner.php:1443 ../cerber-scanner.php:2666
2348
  msgid "Suspicious directives found"
2349
  msgstr ""
2350
 
2351
+ #: ../cerber-scanner.php:1444
2352
  msgid "Unwanted file extension"
2353
  msgstr ""
2354
 
2355
+ #: ../cerber-scanner.php:1446
2356
  msgid "Content has been modified"
2357
  msgstr ""
2358
 
2359
+ #: ../cerber-scanner.php:1447
2360
  msgid "New file"
2361
  msgstr ""
2362
 
2363
+ #: ../cerber-scanner.php:1467
2364
  msgid "Every hour"
2365
  msgstr ""
2366
 
2367
+ #: ../cerber-scanner.php:1468
2368
  msgid "Every 3 hours"
2369
  msgstr ""
2370
 
2371
+ #: ../cerber-scanner.php:1469
2372
  msgid "Every 6 hours"
2373
  msgstr ""
2374
 
2375
+ #: ../cerber-scanner.php:2486
2376
  msgid "Custom signature found"
2377
  msgstr ""
2378
 
2379
+ #: ../cerber-scanner.php:2661
2380
  msgid ""
2381
  "This file contains executable code and may contain obfuscated malware. If "
2382
  "this file is a part of a theme or a plugin, it must be located in the theme "
2383
  "or the plugin folder. No exception, no excuses."
2384
  msgstr ""
2385
 
2386
+ #: ../cerber-scanner.php:2662
2387
  msgid ""
2388
  "The scanner recognizes this file as \"ownerless\" or \"not bundled\" because it "
2389
  "does not belong to any known part of the website and should not be here."
2390
  msgstr ""
2391
 
2392
+ #: ../cerber-scanner.php:2663
2393
  #, php-format
2394
  msgid ""
2395
  "It may remain after upgrading to a newer version of %s. It also may be a "
2397
  "made (bespoke) plugin or theme."
2398
  msgstr ""
2399
 
2400
+ #: ../cerber-scanner.php:2664
2401
  msgid "Suspicious code instruction found"
2402
  msgstr ""
2403
 
2404
+ #: ../cerber-scanner.php:2665
2405
  msgid "Suspicious code signatures found"
2406
  msgstr ""
2407
 
2408
+ #: ../cerber-scanner.php:2667
2409
  msgid ""
2410
  "The contents of the file have been changed and do not match what exists in "
2411
  "the official WordPress repository or a reference file you have uploaded "
2413
  "has been tampered with."
2414
  msgstr ""
2415
 
2416
+ #: ../cerber-scanner.php:2668
2417
  #, php-format
2418
  msgid ""
2419
  "To solve this issue you have to reinstall %s or update it to the latest "
2420
  "version."
2421
  msgstr ""
2422
 
2423
+ #: ../cerber-scanner.php:2669
2424
  msgid "Please upload a reference ZIP archive"
2425
  msgstr ""
2426
 
2427
+ #: ../cerber-scanner.php:2670
2428
  msgid "Resolve issue"
2429
  msgstr ""
2430
 
2431
+ #: ../cerber-scanner.php:3606
2432
  msgid "Preparing for the scan"
2433
  msgstr ""
2434
 
2435
+ #: ../cerber-scanner.php:3607
2436
  msgid "Scanning folders for files"
2437
  msgstr ""
2438
 
2439
+ #: ../cerber-scanner.php:3608
2440
  msgid "Scanning the upload folder for files"
2441
  msgstr ""
2442
 
2443
+ #: ../cerber-scanner.php:3609
2444
  msgid "Scanning the temp folder for files"
2445
  msgstr ""
2446
 
2447
+ #: ../cerber-scanner.php:3610
2448
  msgid "Scanning the session folder for files"
2449
  msgstr ""
2450
 
2451
+ #: ../cerber-scanner.php:3611
2452
  msgid "Parsing the list of files"
2453
  msgstr ""
2454
 
2455
+ #: ../cerber-scanner.php:3612
2456
  msgid "Checking for new and modified files"
2457
  msgstr ""
2458
 
2459
+ #: ../cerber-scanner.php:3613
2460
  msgid "Verifying the integrity of WordPress"
2461
  msgstr ""
2462
 
2463
+ #: ../cerber-scanner.php:3614
2464
  msgid "Verifying the integrity of the plugins"
2465
  msgstr ""
2466
 
2467
+ #: ../cerber-scanner.php:3615
2468
  msgid "Verifying the integrity of the themes"
2469
  msgstr ""
2470
 
2471
+ #: ../cerber-scanner.php:3616
2472
  msgid "Searching for malicious code"
2473
  msgstr ""
2474
 
2475
+ #: ../cerber-scanner.php:3617
2476
  msgid "Finalizing the scan"
2477
  msgstr ""
2478
 
2479
+ #: ../cerber-scanner.php:3692
2480
  msgid "Started"
2481
  msgstr ""
2482
 
2483
+ #: ../cerber-scanner.php:3696
2484
  msgid "Finished"
2485
  msgstr ""
2486
 
2487
+ #: ../cerber-scanner.php:3704
2488
  msgid "Performance"
2489
  msgstr ""
2490
 
2491
+ #: ../cerber-scanner.php:3716
2492
  msgid "Vulnerabilities"
2493
  msgstr ""
2494
 
2495
+ #: ../cerber-scanner.php:3720
2496
  msgid "New files"
2497
  msgstr ""
2498
 
2499
+ #: ../cerber-scanner.php:3724
2500
  msgid "Changed files"
2501
  msgstr ""
2502
 
2503
+ #: ../cerber-scanner.php:3728
2504
  msgid "Unwanted extensions"
2505
  msgstr ""
2506
 
2507
+ #: ../cerber-scanner.php:3741 ../cerber-scanner.php:5408
2508
  msgid "Scanned"
2509
  msgstr ""
2510
 
2511
+ #: ../cerber-scanner.php:3741 ../cerber-scanner.php:3811
2512
  msgid "Files to scan"
2513
  msgstr ""
2514
 
2515
+ #: ../cerber-scanner.php:3748 ../cerber-scanner.php:3819
2516
  msgid "Critical issues"
2517
  msgstr ""
2518
 
2519
+ #: ../cerber-scanner.php:3748 ../cerber-scanner.php:3823 ../cerber-scanner.php:4981
2520
  msgid "Issues total"
2521
  msgstr ""
2522
 
2523
+ #: ../cerber-scanner.php:3897
2524
  msgid "We have not found any integrity data to verify"
2525
  msgstr ""
2526
 
2527
+ #: ../cerber-scanner.php:3899
2528
  msgid ""
2529
  "You have to upload a ZIP archive from which you've installed it. This "
2530
  "enables the security scanner to verify the integrity of the code and detect "
2531
  "malware."
2532
  msgstr ""
2533
 
2534
+ #: ../cerber-scanner.php:4186
2535
  msgid "The directory is not writable"
2536
  msgstr ""
2537
 
2538
+ #: ../cerber-scanner.php:4204
2539
  msgid "Unable to create WP CERBER directory"
2540
  msgstr ""
2541
 
2542
+ #: ../cerber-scanner.php:4410
2543
  msgid ""
2544
  "File access error. Possibly scan results are outdated. Please run Quick or "
2545
  "Full Scan."
2546
  msgstr ""
2547
 
2548
+ #: ../cerber-scanner.php:4937
2549
  msgid "Full Scan Report"
2550
  msgstr ""
2551
 
2552
+ #: ../cerber-scanner.php:4937
2553
  msgid "Quick Scan Report"
2554
  msgstr ""
2555
 
2556
+ #: ../cerber-scanner.php:4950
2557
  msgid "Files scanned"
2558
  msgstr ""
2559
 
2560
+ #: ../cerber-scanner.php:5031
2561
  msgid "Deleted"
2562
  msgstr ""
2563
 
2564
+ #: ../cerber-scanner.php:5078
2565
  msgid "Automatically moved to quarantine"
2566
  msgstr ""
2567
 
2568
+ #: ../cerber-scanner.php:5090
2569
  msgid "To view full report visit"
2570
  msgstr ""
2571
 
2572
+ #: ../cerber-scanner.php:5318
2573
  msgid "There are no files in the quarantine at the moment."
2574
  msgstr ""
2575
 
2576
+ #: ../cerber-scanner.php:5379
2577
  msgid "No files match the specified filter."
2578
  msgstr ""
2579
 
2580
+ #: ../cerber-scanner.php:5379
2581
  msgid "Click here to see the full list of files"
2582
  msgstr ""
2583
 
2584
+ #: ../cerber-scanner.php:5396
2585
  msgid "Delete permanently"
2586
  msgstr ""
2587
 
2588
+ #: ../cerber-scanner.php:5401
2589
  msgid "Restore"
2590
  msgstr ""
2591
 
2592
+ #: ../cerber-scanner.php:5409
2593
  msgid "Moved to quarantine"
2594
  msgstr ""
2595
 
2596
+ #: ../cerber-scanner.php:5410
2597
  msgid "Automatic deletion"
2598
  msgstr ""
2599
 
2600
+ #: ../cerber-scanner.php:5411
2601
  msgid "Size"
2602
  msgstr ""
2603
 
2604
+ #: ../cerber-scanner.php:5412 ../cerber-scanner.php:5543
2605
  msgid "File"
2606
  msgstr ""
2607
 
2608
+ #: ../cerber-scanner.php:5426
2609
  msgid "All scans"
2610
  msgstr ""
2611
 
2612
+ #: ../cerber-scanner.php:5480
2613
  msgid "The file has been deleted permanently."
2614
  msgstr ""
2615
 
2616
+ #: ../cerber-scanner.php:5489
2617
  msgid "The file has been restored to its original location."
2618
  msgstr ""
2619
 
2620
+ #: ../cerber-scanner.php:5511
2621
  msgid "Apply"
2622
  msgstr ""
2623
 
2624
+ #: ../cerber-scanner.php:5512 ../cerber-scanner.php:5537
2625
  msgid "Remove from the list"
2626
  msgstr ""
2627
 
2628
+ #: ../cerber-scanner.php:5513
2629
  msgid "User Insights"
2630
  msgstr ""
2631
 
2632
+ #: ../cerber-scanner.php:5514
2633
  msgid "Traffic Insights"
2634
  msgstr ""
2635
 
2636
+ #: ../cerber-scanner.php:5515
2637
  msgid "Activity Insights"
2638
  msgstr ""
2639
 
2640
+ #: ../cerber-scanner.php:5517
2641
  msgid "The list is empty."
2642
  msgstr ""
2643
 
2644
+ #: ../cerber-scanner.php:5542
2645
  msgid "Added"
2646
  msgstr ""
2647
 
modules/aaa-wp-cerber.php CHANGED
@@ -9,7 +9,7 @@
9
  Network: true
10
 
11
  Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
12
- Copyright (C) 2015-18 Gregory Markov, https://wpcerber.com
13
 
14
  Licenced under the GNU GPL.
15
 
9
  Network: true
10
 
11
  Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
12
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
13
 
14
  Licenced under the GNU GPL.
15
 
readme.txt CHANGED
@@ -4,8 +4,8 @@ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_i
4
  Tags: security, malware scanner, antispam, firewall, limit login attempts, custom login url, login, recaptcha, captcha, activity, log, logging, whitelist, blacklist, access list
5
  Requires at least: 4.5
6
  Requires PHP: 5.4
7
- Tested up to: 4.9
8
- Stable tag: 7.9
9
  License: GPLv2
10
 
11
  Protection against hacker attacks and bots. Malware scanner & integrity checker. User activity log. Antispam reCAPTCHA. Limit login attempts.
@@ -308,6 +308,16 @@ To get access to your dashboard you need to copy the WP Cerber Reset folder to t
308
 
309
  == Changelog ==
310
 
 
 
 
 
 
 
 
 
 
 
311
  = 7.9 =
312
  * New: The plugin monitors suspicious requests that cause 4xx and 5xx HTTP errors and blocks IP addresses that aggressively generate such requests.
313
  * New: A set of WordPress navigation menu links. Login, logout, and register menu items can be automatically generated and shown in any WordPress menu or a widget.
@@ -450,21 +460,6 @@ To get access to your dashboard you need to copy the WP Cerber Reset folder to t
450
  * Bug fixed: An IP address in the white access list may be locked out as a suspicious IP.
451
  * [Read more](https://wpcerber.com/wp-cerber-security-5-8/)
452
 
453
- = 5.7 =
454
- * New: Limit access to WordPress REST API for logged in users only.
455
- * New: For new users the plugin records the date of registration, the IP address and a user who has added a new user.
456
- * New: Sorting users on the Users admin page by date of registration.
457
- * New: User registration monitoring and activity logging functions has been improved.
458
- * Translations has been updated, thanks to Jon Knippen, Wojciech Górski and Francesco.
459
- * Bug fixed: Stop user enumeration via REST API doesn’t work on a multisite WordPress installation.
460
- * [Read more](https://wpcerber.com/wp-cerber-security-5-7/)
461
-
462
- = 5.5 =
463
- * New: White list for the WordPress anti-spam engine.
464
- * New: White list for REST API requests.
465
- * New: Disable access to user data via REST API and stop REST API user enumeration.
466
- * [Read more](https://wpcerber.com/wp-cerber-security-5-5/)
467
-
468
  == Other Notes ==
469
 
470
  1. If you want to test out plugin's features, do this from another computer and remove that computer's network from the White Access List. Cerber is smart enough to recognize "the boss".
4
  Tags: security, malware scanner, antispam, firewall, limit login attempts, custom login url, login, recaptcha, captcha, activity, log, logging, whitelist, blacklist, access list
5
  Requires at least: 4.5
6
  Requires PHP: 5.4
7
+ Tested up to: 5.0
8
+ Stable tag: 7.9.3
9
  License: GPLv2
10
 
11
  Protection against hacker attacks and bots. Malware scanner & integrity checker. User activity log. Antispam reCAPTCHA. Limit login attempts.
308
 
309
  == Changelog ==
310
 
311
+ = 7.9.3 =
312
+ * New: New settings for [the Traffic Inspector firewall](https://wpcerber.com/traffic-inspector-in-a-nutshell/) allow you to fine-tune its behavior. You can enable less or more restrictive firewall rules.
313
+ * Update: Troubleshooting of possible issues with scheduled maintenance tasks has been improved.
314
+ * Update: To make troubleshooting easier the plugin logs not only a lockout event but also logs and displays the reason for the lockout.
315
+ * Update: Compatibility with ManageWP and Gravity Forms has been improved.
316
+ * Update: The layout of the Activity and Live Traffic pages has been improved.
317
+ * Bug fixed: [The malware scanner](https://wpcerber.com/wordpress-security-scanner/) wrongly prevents PHP files with few specific names in one particular location from being deleted after a manual scan or during [the automatic malware removal](https://wpcerber.com/automatic-malware-removal-wordpress/).
318
+ * Bug fixed: The number of email notifications might be incorrectly limited to one email per hour.
319
+ * [Read more](https://wpcerber.com/wp-cerber-security-7-9-3/)
320
+
321
  = 7.9 =
322
  * New: The plugin monitors suspicious requests that cause 4xx and 5xx HTTP errors and blocks IP addresses that aggressively generate such requests.
323
  * New: A set of WordPress navigation menu links. Login, logout, and register menu items can be automatically generated and shown in any WordPress menu or a widget.
460
  * Bug fixed: An IP address in the white access list may be locked out as a suspicious IP.
461
  * [Read more](https://wpcerber.com/wp-cerber-security-5-8/)
462
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
463
  == Other Notes ==
464
 
465
  1. If you want to test out plugin's features, do this from another computer and remove that computer's network from the White Access List. Cerber is smart enough to recognize "the boss".
ripe.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
settings.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
@@ -281,14 +282,15 @@ function cerber_settings_init(){
281
 
282
  add_settings_section( 'tmain', __( 'Traffic Inspection', 'wp-cerber' ), 'cerber_sapi_section', CERBER_OPT_T );
283
  add_settings_field( 'tienabled', __( 'Enable traffic inspection', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tmain',
284
- array( 'group' => $group,
285
- 'setting' => 'tienabled',
286
- 'type' => 'checkbox',
287
- ) );
288
- add_settings_field( 'tierrmon', __( 'Enable error shielding', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tmain',
289
- array( 'group' => $group,
290
- 'setting' => 'tierrmon',
291
- 'type' => 'checkbox',
 
292
  ) );
293
  add_settings_field( 'tiipwhite', __( 'Use White IP Access List', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tmain',
294
  array( 'group' => $group,
@@ -301,7 +303,26 @@ function cerber_settings_init(){
301
  'type' => 'textarea',
302
  'delimiter' => "\n",
303
  'list' => true,
304
- 'label' => __( 'Enter a request URI to exclude the request from inspection. One item per line.', 'wp-cerber' ) . ' ' . __( 'To specify a REGEX pattern, enclose a whole line in two braces.', 'wp-cerber' ) . ' <a target="_blank" href="https://wpcerber.com/traffic-inspector-in-a-nutshell/">Know more</a>',
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
  ) );
306
 
307
  add_settings_section( 'tlog', __( 'Logging', 'wp-cerber' ), 'cerber_sapi_section', CERBER_OPT_T );
@@ -1178,11 +1199,11 @@ add_filter( 'pre_update_option_'.CERBER_OPT_N, function ($new, $old, $option) {
1178
  */
1179
  add_filter( 'pre_update_option_'.CERBER_OPT_H, function ($new, $old, $option) {
1180
 
1181
- $new['restwhite'] = cerber_text2array($new['restwhite'], "\n");
 
1182
 
1183
- $new['restwhite'] = array_map( function ( $v ) {
1184
  return trim( $v, '/' );
1185
- }, $new['restwhite'] );
1186
 
1187
  if ( empty( $new['adminphp'] ) ) {
1188
  $new['adminphp'] = 0;
@@ -1568,9 +1589,10 @@ function cerber_get_defaults() {
1568
  ),
1569
  CERBER_OPT_T => array(
1570
  'tienabled' => '1',
1571
- 'tierrmon' => '1',
1572
  'tiipwhite' => 0,
1573
  'tiwhite' => '',
 
 
1574
  'timode' => '1',
1575
  'tinocrabs' => '1',
1576
  'tifields' => 0,
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
282
 
283
  add_settings_section( 'tmain', __( 'Traffic Inspection', 'wp-cerber' ), 'cerber_sapi_section', CERBER_OPT_T );
284
  add_settings_field( 'tienabled', __( 'Enable traffic inspection', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tmain',
285
+ array(
286
+ 'group' => $group,
287
+ 'setting' => 'tienabled',
288
+ 'type' => 'select',
289
+ 'set' => array(
290
+ __( 'Disabled', 'wp-cerber' ),
291
+ __( 'Maximum compatibility', 'wp-cerber' ),
292
+ __( 'Maximum security', 'wp-cerber' )
293
+ )
294
  ) );
295
  add_settings_field( 'tiipwhite', __( 'Use White IP Access List', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tmain',
296
  array( 'group' => $group,
303
  'type' => 'textarea',
304
  'delimiter' => "\n",
305
  'list' => true,
306
+ 'label' => __( 'Enter a request URI to exclude the request from inspection. One item per line.', 'wp-cerber' ) . ' ' . __( 'To specify a REGEX pattern, enclose a whole line in two braces.', 'wp-cerber' ) . ' <a target="_blank" href="https://wpcerber.com/wordpress-probing-for-vulnerable-php-code/">Know more</a>',
307
+ ) );
308
+
309
+ add_settings_section( 'tierrs', __( 'Erroneous Request Shielding', 'wp-cerber' ), 'cerber_sapi_section', CERBER_OPT_T );
310
+ add_settings_field( 'tierrmon', __( 'Enable error shielding', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tierrs',
311
+ array(
312
+ 'group' => $group,
313
+ 'setting' => 'tierrmon',
314
+ 'type' => 'select',
315
+ 'set' => array(
316
+ __( 'Disabled', 'wp-cerber' ),
317
+ __( 'Maximum compatibility', 'wp-cerber' ),
318
+ __( 'Maximum security', 'wp-cerber' )
319
+ )
320
+ ) );
321
+ add_settings_field( 'tierrnoauth', __( 'Ignore logged in users', 'wp-cerber' ), 'cerber_field_show', CERBER_OPT_T, 'tierrs',
322
+ array(
323
+ 'group' => $group,
324
+ 'setting' => 'tierrnoauth',
325
+ 'type' => 'checkbox',
326
  ) );
327
 
328
  add_settings_section( 'tlog', __( 'Logging', 'wp-cerber' ), 'cerber_sapi_section', CERBER_OPT_T );
1199
  */
1200
  add_filter( 'pre_update_option_'.CERBER_OPT_H, function ($new, $old, $option) {
1201
 
1202
+ $new['restwhite'] = cerber_text2array( $new['restwhite'], "\n", function ( $v ) {
1203
+ $v = preg_replace( '/[^a-z_\-\d\/]/i', '', $v );
1204
 
 
1205
  return trim( $v, '/' );
1206
+ } );
1207
 
1208
  if ( empty( $new['adminphp'] ) ) {
1209
  $new['adminphp'] = 0;
1589
  ),
1590
  CERBER_OPT_T => array(
1591
  'tienabled' => '1',
 
1592
  'tiipwhite' => 0,
1593
  'tiwhite' => '',
1594
+ 'tierrmon' => '1',
1595
+ 'tierrnoauth' => 0,
1596
  'timode' => '1',
1597
  'tinocrabs' => '1',
1598
  'tifields' => 0,
whois.php CHANGED
@@ -1,6 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-18 CERBER TECH INC., Gregory Markov, https://wpcerber.com
 
4
 
5
  Licenced under the GNU GPL.
6
 
@@ -191,13 +192,14 @@ function make_whois_request($server, $ip) {
191
  }
192
 
193
  /**
194
- * HTML for displaying tiny national flag in the admin
195
  *
196
  * @param $code string Country code
197
  *
198
  * @return string HTML code
 
199
  */
200
- function cerber_get_flag_html( $code ) {
201
  static $assets_url;
202
  if ( ! $code ) {
203
  return '';
@@ -206,7 +208,7 @@ function cerber_get_flag_html( $code ) {
206
  $assets_url = cerber_plugin_dir_url() . 'assets/';
207
  }
208
 
209
- return '<span style="padding-left: 24px; background: url(\'' . $assets_url . 'flags/' . strtolower( $code ) . '.gif\') no-repeat left;"></span>';
210
  }
211
  /*
212
  *
1
  <?php
2
  /*
3
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
4
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
192
  }
193
 
194
  /**
195
+ * HTML for displaying a national flag
196
  *
197
  * @param $code string Country code
198
  *
199
  * @return string HTML code
200
+ *
201
  */
202
+ function cerber_get_flag_html( $code, $txt = '' ) {
203
  static $assets_url;
204
  if ( ! $code ) {
205
  return '';
208
  $assets_url = cerber_plugin_dir_url() . 'assets/';
209
  }
210
 
211
+ return '<span class="crb-country" style="background: url(\'' . $assets_url . 'flags/' . strtolower( $code ) . '.gif\') no-repeat left;">' . $txt . '</span>';
212
  }
213
  /*
214
  *
wp-cerber.php CHANGED
@@ -5,13 +5,13 @@
5
  Description: Defends WordPress against hacker attacks, spam, trojans, and viruses. Malware scanner and integrity checker. Hardening WordPress with a set of comprehensive security algorithms. Spam protection with a sophisticated bot detection engine and reCAPTCHA. Tracks user and intruder activity with powerful email, mobile and desktop notifications.
6
  Author: Gregory
7
  Author URI: https://wpcerber.com
8
- Version: 7.9
9
  Text Domain: wp-cerber
10
  Domain Path: /languages
11
  Network: true
12
 
13
- Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
14
- Copyright (C) 2015-18 Gregory Markov, https://wpcerber.com
15
 
16
  Licenced under the GNU GPL.
17
 
@@ -31,7 +31,7 @@
31
 
32
  */
33
 
34
- define( 'CERBER_VER', '7.9' );
35
 
36
  function cerber_plugin_file() {
37
  return __FILE__;
5
  Description: Defends WordPress against hacker attacks, spam, trojans, and viruses. Malware scanner and integrity checker. Hardening WordPress with a set of comprehensive security algorithms. Spam protection with a sophisticated bot detection engine and reCAPTCHA. Tracks user and intruder activity with powerful email, mobile and desktop notifications.
6
  Author: Gregory
7
  Author URI: https://wpcerber.com
8
+ Version: 7.9.3
9
  Text Domain: wp-cerber
10
  Domain Path: /languages
11
  Network: true
12
 
13
+ Copyright (C) 2015-18 CERBER TECH INC., http://cerber.tech
14
+ Copyright (C) 2015-18 CERBER TECH INC., https://wpcerber.com
15
 
16
  Licenced under the GNU GPL.
17
 
31
 
32
  */
33
 
34
+ define( 'CERBER_VER', '7.9.3' );
35
 
36
  function cerber_plugin_file() {
37
  return __FILE__;