Cerber Security & Antispam - Version 8.9.5.2

Version Description

Download this release

Release Info

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

Code changes from version 8.9.5 to 8.9.5.2

admin/cerber-admin-settings.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -94,11 +94,14 @@ function cerber_wp_settings_setup( $screen_id, $sections = array() ) {
94
 
95
  $desc = crb_array_get( $section_config, 'desc' );
96
 
97
- if ( $link = crb_array_get( $section_config, 'doclink' ) ) {
98
- if ( $desc && mb_substr( $desc, - 1 ) != '.' ) {
99
- $desc .= '.';
100
  }
101
- $desc .= '&nbsp; <a class="crb-no-wrap" target="_blank" href="' . $link . '">' . __( 'Know more', 'wp-cerber' ) . '</a>';
 
 
 
102
  }
103
 
104
  $tmp[ $section_id ] = '<span class="crb-section-desc">' . $desc . '</span>';
@@ -773,8 +776,7 @@ add_filter( 'pre_update_option_'.CERBER_OPT_C, function ($new, $old, $option) {
773
  if ( ! empty( $new['sitekey'] ) && ! empty( $new['secretkey'] ) ) {
774
  if ( ( ! $goo = get_wp_cerber()->reCaptchaRequest( '1' ) )
775
  || ! isset( $goo['success'] ) ) {
776
- $labels = cerber_get_labels( 'status' );
777
- cerber_admin_notice( __( 'ERROR:', 'wp-cerber' ) . ' ' . $labels[534] );
778
  }
779
  }
780
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
94
 
95
  $desc = crb_array_get( $section_config, 'desc' );
96
 
97
+ if ( $links = crb_array_get( $section_config, 'seclinks' ) ) {
98
+ foreach ( $links as $link ) {
99
+ $desc .= '<a class="crb-section-links" target="_blank" href="' . $link[1] . '">' . $link[0] . '</a>';
100
  }
101
+ }
102
+
103
+ if ( $doclink = crb_array_get( $section_config, 'doclink' ) ) {
104
+ $desc .= '<a class="crb-section-links" target="_blank" href="' . $doclink . '">' . __( 'Know more', 'wp-cerber' ) . '</a>';
105
  }
106
 
107
  $tmp[ $section_id ] = '<span class="crb-section-desc">' . $desc . '</span>';
776
  if ( ! empty( $new['sitekey'] ) && ! empty( $new['secretkey'] ) ) {
777
  if ( ( ! $goo = get_wp_cerber()->reCaptchaRequest( '1' ) )
778
  || ! isset( $goo['success'] ) ) {
779
+ cerber_admin_notice( __( 'ERROR:', 'wp-cerber' ) . ' ' . cerber_get_labels( 'status', 534 ) );
 
780
  }
781
  }
782
 
admin/cerber-admin.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
admin/cerber-dashboard.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -1164,7 +1164,6 @@ function crb_make_nav_links( $link_list, $tab = 'activity', $class = '' ) {
1164
  */
1165
  function cerber_show_activity( $args = array(), $echo = true ) {
1166
 
1167
- $labels = cerber_get_labels( 'activity' );
1168
  $status_labels = cerber_get_labels( 'status' ) + cerber_get_reason();
1169
 
1170
  $base_url = cerber_admin_link( 'activity' );
@@ -1265,19 +1264,7 @@ function cerber_show_activity( $args = array(), $echo = true ) {
1265
 
1266
  $ip_id = cerber_get_id_ip( $row->ip );
1267
 
1268
- // TODO refactor this: not as an IF exception
1269
- if ( $row->activity == 22
1270
- && $row->ac_by_user
1271
- && $row->user != $row->ac_by_user
1272
- && $by_user = get_userdata( $row->ac_by_user ) ) {
1273
- /* translators: %s is the name of a website administrator who terminated the session. */
1274
- $ac_label = sprintf( __( 'User session terminated by %s', 'wp-cerber' ), '<a href="' . get_edit_user_link( $row->ac_by_user ) . '">' . $by_user->display_name . '</a>' );
1275
- }
1276
- else {
1277
- $ac_label = $labels[ $row->activity ];
1278
- }
1279
-
1280
- $activity = '<span class="crb-activity actv' . $row->activity . '" title="' . $row->activity . '">' . $ac_label . '</span>';
1281
 
1282
  if ( empty( $args['no_details'] ) && $row->details ) {
1283
  $details = explode( '|', $row->details );
@@ -1311,12 +1298,7 @@ function cerber_show_activity( $args = array(), $echo = true ) {
1311
  $username = '<a href="' . $base_url . '&amp;filter_login=' . $row->user_login . '">' . $row->user_login . '</a>';
1312
 
1313
  $ip_info = cerber_get_ip_info( $row->ip, true );
1314
- if ( isset( $ip_info['hostname_html'] ) ) {
1315
- $hostname = $ip_info['hostname_html'];
1316
- }
1317
- else {
1318
- $hostname = crb_get_ajax_placeholder( 'hostname', $ip_id );
1319
- }
1320
 
1321
  if ( ! empty( $args['date'] ) && $args['date'] == 'ago' ) {
1322
  $date = cerber_ago_time( $row->stamp );
@@ -1456,6 +1438,7 @@ function cerber_activity_query( $args = array() ) {
1456
 
1457
  $q = crb_admin_parse_query( array(
1458
  'filter_activity',
 
1459
  'filter_set',
1460
  'filter_ip',
1461
  'filter_login',
@@ -1471,18 +1454,20 @@ function cerber_activity_query( $args = array() ) {
1471
  $falist = crb_get_filter_set( $q->filter_set );
1472
  }
1473
  elseif ( $q->filter_activity ) { // Multiple activities can be requested this way: &filter_activity[]=11&filter_activity[]=7
1474
- if ( is_array( $q->filter_activity ) ) {
1475
- $falist = array_filter( array_map( 'absint', $q->filter_activity ) );
1476
- }
1477
- else {
1478
- $falist = array( absint( $q->filter_activity ) ); // for further using in links
1479
- }
1480
  }
1481
  if ( $falist ) {
1482
  $where[] = 'log.activity IN (' . implode( ',', $falist ) . ')';
1483
  }
1484
  $ret[2] = $falist;
1485
 
 
 
 
 
 
 
 
1486
  if ( $q->filter_ip ) {
1487
  $range = cerber_any2range( $q->filter_ip );
1488
  if ( is_array( $range ) ) {
@@ -1509,12 +1494,6 @@ function cerber_activity_query( $args = array() ) {
1509
  $ret[4] = htmlspecialchars( $q->filter_login );
1510
  }
1511
 
1512
- /*$user_id = absint( $q->filter_user );
1513
- $ret[5] = $user_id;
1514
- if ( $user_id ) {
1515
- $where[] = 'log.user_id = ' . $user_id;
1516
- }*/
1517
-
1518
  if ( isset( $q->filter_user ) ) {
1519
  if ( $q->filter_user == '*' ) {
1520
  $where[] = 'log.user_id != 0';
@@ -1522,7 +1501,8 @@ function cerber_activity_query( $args = array() ) {
1522
  }
1523
  elseif ( is_numeric( $q->filter_user ) ) {
1524
  $user_id = absint( $q->filter_user );
1525
- $where[] = 'log.user_id = ' . $user_id;
 
1526
  $ret[5] = $user_id;
1527
  }
1528
  }
@@ -4169,12 +4149,7 @@ function cerber_show_traffic( $args = array(), $echo = true ) {
4169
  }
4170
  else {
4171
  $ip_info = cerber_get_ip_info( $row->ip, true );
4172
- if ( isset( $ip_info['hostname_html'] ) ) {
4173
- $hostname = $ip_info['hostname_html'];
4174
- }
4175
- else {
4176
- $hostname = crb_get_ajax_placeholder( 'hostname', $ip_id );
4177
- }
4178
  }
4179
 
4180
  if ( ! empty( $args['date'] ) && $args['date'] == 'ago' ) {
@@ -4869,12 +4844,7 @@ function cerber_traffic_query( $args = array() ) {
4869
  $where = ( ! empty( $where ) ) ? 'WHERE ' . implode( ' AND ', $where ) : '';
4870
 
4871
  // Limits, if specified
4872
- if ( isset( $args['per_page'] ) ) {
4873
- $per_page = $args['per_page'];
4874
- }
4875
- else {
4876
- $per_page = crb_admin_get_per_page();
4877
- }
4878
  $per_page = absint( $per_page );
4879
  $ret[2] = $per_page;
4880
 
@@ -5371,12 +5341,7 @@ function crb_admin_parse_query( $fields, $alt = array() ) {
5371
 
5372
  foreach ( $fields as $field ) {
5373
 
5374
- if ( isset( $alt[ $field ] ) ) {
5375
- $val = $alt[ $field ];
5376
- }
5377
- else {
5378
- $val = crb_array_get( $arr, $field, false );
5379
- }
5380
 
5381
  if ( is_array( $val ) ) {
5382
  $val = array_map( 'trim', $val );
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1164
  */
1165
  function cerber_show_activity( $args = array(), $echo = true ) {
1166
 
 
1167
  $status_labels = cerber_get_labels( 'status' ) + cerber_get_reason();
1168
 
1169
  $base_url = cerber_admin_link( 'activity' );
1264
 
1265
  $ip_id = cerber_get_id_ip( $row->ip );
1266
 
1267
+ $activity = '<span class="crb-activity actv' . $row->activity . '" title="' . $row->activity . '">' . crb_get_label( $row->activity, $row->user_id, $row->ac_by_user ) . '</span>';
 
 
 
 
 
 
 
 
 
 
 
 
1268
 
1269
  if ( empty( $args['no_details'] ) && $row->details ) {
1270
  $details = explode( '|', $row->details );
1298
  $username = '<a href="' . $base_url . '&amp;filter_login=' . $row->user_login . '">' . $row->user_login . '</a>';
1299
 
1300
  $ip_info = cerber_get_ip_info( $row->ip, true );
1301
+ $hostname = $ip_info['hostname_html'] ?? crb_get_ajax_placeholder( 'hostname', $ip_id );
 
 
 
 
 
1302
 
1303
  if ( ! empty( $args['date'] ) && $args['date'] == 'ago' ) {
1304
  $date = cerber_ago_time( $row->stamp );
1438
 
1439
  $q = crb_admin_parse_query( array(
1440
  'filter_activity',
1441
+ 'filter_status',
1442
  'filter_set',
1443
  'filter_ip',
1444
  'filter_login',
1454
  $falist = crb_get_filter_set( $q->filter_set );
1455
  }
1456
  elseif ( $q->filter_activity ) { // Multiple activities can be requested this way: &filter_activity[]=11&filter_activity[]=7
1457
+ $falist = crb_sanitize_int( $q->filter_activity );
 
 
 
 
 
1458
  }
1459
  if ( $falist ) {
1460
  $where[] = 'log.activity IN (' . implode( ',', $falist ) . ')';
1461
  }
1462
  $ret[2] = $falist;
1463
 
1464
+ if ( $q->filter_status ) {
1465
+ $status = crb_sanitize_int( $q->filter_status );
1466
+ if ( $status ) {
1467
+ $where[] = 'log.ac_status IN (' . implode( ',', $status ) . ')';
1468
+ }
1469
+ }
1470
+
1471
  if ( $q->filter_ip ) {
1472
  $range = cerber_any2range( $q->filter_ip );
1473
  if ( is_array( $range ) ) {
1494
  $ret[4] = htmlspecialchars( $q->filter_login );
1495
  }
1496
 
 
 
 
 
 
 
1497
  if ( isset( $q->filter_user ) ) {
1498
  if ( $q->filter_user == '*' ) {
1499
  $where[] = 'log.user_id != 0';
1501
  }
1502
  elseif ( is_numeric( $q->filter_user ) ) {
1503
  $user_id = absint( $q->filter_user );
1504
+ //$where[] = 'log.user_id = ' . $user_id;
1505
+ $where[] = 'log.user_id = ' . $user_id . ' OR log.ac_by_user =' . $user_id;
1506
  $ret[5] = $user_id;
1507
  }
1508
  }
4149
  }
4150
  else {
4151
  $ip_info = cerber_get_ip_info( $row->ip, true );
4152
+ $hostname = $ip_info['hostname_html'] ?? crb_get_ajax_placeholder( 'hostname', $ip_id );
 
 
 
 
 
4153
  }
4154
 
4155
  if ( ! empty( $args['date'] ) && $args['date'] == 'ago' ) {
4844
  $where = ( ! empty( $where ) ) ? 'WHERE ' . implode( ' AND ', $where ) : '';
4845
 
4846
  // Limits, if specified
4847
+ $per_page = $args['per_page'] ?? crb_admin_get_per_page();
 
 
 
 
 
4848
  $per_page = absint( $per_page );
4849
  $ret[2] = $per_page;
4850
 
5341
 
5342
  foreach ( $fields as $field ) {
5343
 
5344
+ $val = $alt[ $field ] ?? crb_array_get( $arr, $field, false );
 
 
 
 
 
5345
 
5346
  if ( is_array( $val ) ) {
5347
  $val = array_map( 'trim', $val );
admin/cerber-tools.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL
7
 
assets/admin.css CHANGED
@@ -208,6 +208,21 @@
208
  display: none;
209
  }
210
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  /* Select2 */
212
 
213
  #crb-admin [class^='select2'] {
208
  display: none;
209
  }
210
 
211
+ .crb-section-links {
212
+ display: inline-block;
213
+ background-color: #fff;
214
+ padding: 3px 8px;
215
+ border: 1px solid #dedede;
216
+ margin-left: 0.5em;
217
+ text-decoration: none;
218
+ white-space: nowrap;
219
+ }
220
+
221
+ a.crb-section-links:hover {
222
+ color: #fff;
223
+ background-color: #2271b1;
224
+ }
225
+
226
  /* Select2 */
227
 
228
  #crb-admin [class^='select2'] {
cerber-2fa.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
cerber-common.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -145,7 +145,14 @@ function cerber_admin_link( $tab = '', $args = array(), $add_nonce = false ) {
145
 
146
  if ( $args ) {
147
  foreach ( $args as $arg => $value ) {
148
- $link .= '&amp;' . $arg . '=' . urlencode( $value );
 
 
 
 
 
 
 
149
  }
150
  }
151
 
@@ -908,6 +915,38 @@ function crb_sanitize_deep( &$val ) {
908
  } );
909
  }
910
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
911
  /**
912
  * Return true if a REST API URL has been requested
913
  *
@@ -1540,26 +1579,33 @@ function cerber_script_exists( $uri ) {
1540
  * Activity labels and statues
1541
  *
1542
  * @param string $type
 
1543
  *
1544
- * @return mixed
1545
  */
1546
- function cerber_get_labels( $type = 'activity' ) {
1547
 
1548
  if ( ! $labels = cerber_cache_get( 'labels' ) ) {
1549
 
1550
  // Initialize it
1551
 
1552
  $labels = array(
1553
- 'activity' => array(),
1554
- 'status' => array(),
 
1555
  );
1556
 
1557
  $act = &$labels['activity'];
 
1558
 
1559
  // User actions
1560
  $act[1] = __( 'User created', 'wp-cerber' );
 
 
1561
  $act[2] = __( 'User registered', 'wp-cerber' );
1562
  $act[3] = __( 'User deleted', 'wp-cerber' );
 
 
1563
  $act[5] = __( 'Logged in', 'wp-cerber' );
1564
  $act[6] = __( 'Logged out', 'wp-cerber' );
1565
  $act[ CRB_EV_LFL ] = __( 'Login failed', 'wp-cerber' );
@@ -1585,6 +1631,8 @@ function cerber_get_labels( $type = 'activity' ) {
1585
  $act[20] = __( 'Password changed', 'wp-cerber' );
1586
  $act[ CRB_EV_PRS ] = __( 'Password reset requested', 'wp-cerber' );
1587
  $act[22] = __( 'User session terminated', 'wp-cerber' );
 
 
1588
 
1589
  $act[ CRB_EV_PRD ] = __( 'Password reset request denied', 'wp-cerber' );
1590
 
@@ -1634,7 +1682,7 @@ function cerber_get_labels( $type = 'activity' ) {
1634
 
1635
  $sts = &$labels['status'];
1636
 
1637
- $sts[CRB_STS_11] = __( 'Bot detected', 'wp-cerber' );
1638
  $sts[12] = __( 'Citadel mode is active', 'wp-cerber' );
1639
  $sts[13] = __( 'Locked out', 'wp-cerber' );
1640
  $sts[13] = __( 'IP address is locked out', 'wp-cerber' );
@@ -1650,12 +1698,12 @@ function cerber_get_labels( $type = 'activity' ) {
1650
  $sts[22] = __( 'Malicious code detected', 'wp-cerber' );
1651
  $sts[23] = __( 'Suspicious SQL code detected', 'wp-cerber' );
1652
  $sts[24] = __( 'Suspicious JavaScript code detected', 'wp-cerber' );
1653
- $sts[CRB_STS_25] = __( 'Blocked by administrator', 'wp-cerber' );
1654
  $sts[26] = __( 'Site policy enforcement', 'wp-cerber' );
1655
  $sts[27] = __( '2FA code verified', 'wp-cerber' );
1656
  $sts[28] = __( 'Initiated by the user', 'wp-cerber' );
1657
- $sts[CRB_STS_29] = __( 'User blocked by administrator', 'wp-cerber' );
1658
- $sts[CRB_STS_30] = __( 'Username is prohibited', 'wp-cerber' );
1659
  $sts[31] = __( 'Email address is prohibited', 'wp-cerber' );
1660
  $sts[32] = 'User role is prohibited';
1661
  $sts[33] = __( 'Permission denied', 'wp-cerber' );
@@ -1667,8 +1715,8 @@ function cerber_get_labels( $type = 'activity' ) {
1667
  $sts[39] = __( 'Invalid cookies', 'wp-cerber' );
1668
  $sts[40] = __( 'Invalid cookies cleared', 'wp-cerber' );
1669
  $sts[50] = __( 'Forbidden URL', 'wp-cerber' );
1670
- $sts[CRB_STS_51] = __( 'Executable file extension detected', 'wp-cerber' );
1671
- $sts[CRB_STS_52] = __( 'Filename is prohibited', 'wp-cerber' );
1672
 
1673
  // @since 8.6.4
1674
  $sts[500] = __( 'IP whitelisted', 'wp-cerber' );
@@ -1685,16 +1733,52 @@ function cerber_get_labels( $type = 'activity' ) {
1685
  $sts[530] = __( 'Logged out everywhere', 'wp-cerber' );
1686
 
1687
  $sts[531] = __( 'reCAPTCHA verified', 'wp-cerber' );
1688
- $sts[CRB_STS_532] = __( 'reCAPTCHA verification failed', 'wp-cerber' );
1689
  $sts[533] = __( 'reCAPTCHA settings are incorrect', 'wp-cerber' );
1690
  $sts[534] = __( 'Request to the Google reCAPTCHA service failed', 'wp-cerber' );
1691
 
1692
  cerber_cache_set( 'labels', $labels );
1693
  }
1694
 
 
 
 
 
 
 
 
 
 
1695
  return $labels[ $type ];
1696
  }
1697
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1698
  function crb_get_filter_set( $set_id ) {
1699
  static $list = array( 1 => 'suspicious', 2 => 'login_issues' );
1700
 
@@ -2054,6 +2138,23 @@ function cerber_get_user( $login_email ) {
2054
  return get_user_by( 'login', $login_email );
2055
  }
2056
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2057
  /**
2058
  * Check if a DB table exists
2059
  *
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
145
 
146
  if ( $args ) {
147
  foreach ( $args as $arg => $value ) {
148
+ if ( is_array( $value ) ) {
149
+ foreach ( $value as $val ) {
150
+ $link .= '&amp;' . $arg . '[]=' . urlencode( $val );
151
+ }
152
+ }
153
+ else {
154
+ $link .= '&amp;' . $arg . '=' . urlencode( $value );
155
+ }
156
  }
157
  }
158
 
915
  } );
916
  }
917
 
918
+ /**
919
+ * Sanitizes integer values
920
+ *
921
+ * @param array|int $val Input value
922
+ * @param bool $make_list If true, returns result as an array
923
+ * @param bool $keep_empty If false, removes empty elements from the resulting array
924
+ *
925
+ * @return array|int
926
+ *
927
+ * @since 8.9.5.2
928
+ */
929
+ function crb_sanitize_int( $val, $make_list = true, $keep_empty = false ) {
930
+ if ( ! is_array( $val ) ) {
931
+ if ( $make_list ) {
932
+ $val = array( $val );
933
+ }
934
+ else {
935
+ return absint( $val );
936
+ }
937
+ }
938
+
939
+ array_walk_recursive( $val, function ( &$v ) {
940
+ $v = absint( $v );
941
+ } );
942
+
943
+ if ( ! $keep_empty ) {
944
+ $val = array_filter( $val );
945
+ }
946
+
947
+ return $val;
948
+ }
949
+
950
  /**
951
  * Return true if a REST API URL has been requested
952
  *
1579
  * Activity labels and statues
1580
  *
1581
  * @param string $type
1582
+ * @param int $id
1583
  *
1584
+ * @return array|string
1585
  */
1586
+ function cerber_get_labels( $type = 'activity', $id = 0 ) {
1587
 
1588
  if ( ! $labels = cerber_cache_get( 'labels' ) ) {
1589
 
1590
  // Initialize it
1591
 
1592
  $labels = array(
1593
+ 'activity' => array(),
1594
+ 'activity_by' => array(),
1595
+ 'status' => array(),
1596
  );
1597
 
1598
  $act = &$labels['activity'];
1599
+ $act_by = &$labels['activity_by'];
1600
 
1601
  // User actions
1602
  $act[1] = __( 'User created', 'wp-cerber' );
1603
+ /* translators: %s is the name of a website administrator who created the user. */
1604
+ $act_by[1] = __( 'User created by %s', 'wp-cerber' );
1605
  $act[2] = __( 'User registered', 'wp-cerber' );
1606
  $act[3] = __( 'User deleted', 'wp-cerber' );
1607
+ /* translators: %s is the name of a website administrator who deleted the user. */
1608
+ $act_by[3] = __( 'User deleted by %s', 'wp-cerber' );
1609
  $act[5] = __( 'Logged in', 'wp-cerber' );
1610
  $act[6] = __( 'Logged out', 'wp-cerber' );
1611
  $act[ CRB_EV_LFL ] = __( 'Login failed', 'wp-cerber' );
1631
  $act[20] = __( 'Password changed', 'wp-cerber' );
1632
  $act[ CRB_EV_PRS ] = __( 'Password reset requested', 'wp-cerber' );
1633
  $act[22] = __( 'User session terminated', 'wp-cerber' );
1634
+ /* translators: %s is the name of a website administrator who terminated the session. */
1635
+ $act_by[22] = __( 'User session terminated by %s', 'wp-cerber' );
1636
 
1637
  $act[ CRB_EV_PRD ] = __( 'Password reset request denied', 'wp-cerber' );
1638
 
1682
 
1683
  $sts = &$labels['status'];
1684
 
1685
+ $sts[ CRB_STS_11 ] = __( 'Bot detected', 'wp-cerber' );
1686
  $sts[12] = __( 'Citadel mode is active', 'wp-cerber' );
1687
  $sts[13] = __( 'Locked out', 'wp-cerber' );
1688
  $sts[13] = __( 'IP address is locked out', 'wp-cerber' );
1698
  $sts[22] = __( 'Malicious code detected', 'wp-cerber' );
1699
  $sts[23] = __( 'Suspicious SQL code detected', 'wp-cerber' );
1700
  $sts[24] = __( 'Suspicious JavaScript code detected', 'wp-cerber' );
1701
+ $sts[ CRB_STS_25 ] = __( 'Blocked by administrator', 'wp-cerber' );
1702
  $sts[26] = __( 'Site policy enforcement', 'wp-cerber' );
1703
  $sts[27] = __( '2FA code verified', 'wp-cerber' );
1704
  $sts[28] = __( 'Initiated by the user', 'wp-cerber' );
1705
+ $sts[ CRB_STS_29 ] = __( 'User blocked by administrator', 'wp-cerber' );
1706
+ $sts[ CRB_STS_30 ] = __( 'Username is prohibited', 'wp-cerber' );
1707
  $sts[31] = __( 'Email address is prohibited', 'wp-cerber' );
1708
  $sts[32] = 'User role is prohibited';
1709
  $sts[33] = __( 'Permission denied', 'wp-cerber' );
1715
  $sts[39] = __( 'Invalid cookies', 'wp-cerber' );
1716
  $sts[40] = __( 'Invalid cookies cleared', 'wp-cerber' );
1717
  $sts[50] = __( 'Forbidden URL', 'wp-cerber' );
1718
+ $sts[ CRB_STS_51 ] = __( 'Executable file extension detected', 'wp-cerber' );
1719
+ $sts[ CRB_STS_52 ] = __( 'Filename is prohibited', 'wp-cerber' );
1720
 
1721
  // @since 8.6.4
1722
  $sts[500] = __( 'IP whitelisted', 'wp-cerber' );
1733
  $sts[530] = __( 'Logged out everywhere', 'wp-cerber' );
1734
 
1735
  $sts[531] = __( 'reCAPTCHA verified', 'wp-cerber' );
1736
+ $sts[ CRB_STS_532 ] = __( 'reCAPTCHA verification failed', 'wp-cerber' );
1737
  $sts[533] = __( 'reCAPTCHA settings are incorrect', 'wp-cerber' );
1738
  $sts[534] = __( 'Request to the Google reCAPTCHA service failed', 'wp-cerber' );
1739
 
1740
  cerber_cache_set( 'labels', $labels );
1741
  }
1742
 
1743
+ if ( $id ) {
1744
+
1745
+ if ( isset( $labels[ $type ][ $id ] ) ) {
1746
+ return $labels[ $type ][ $id ];
1747
+ }
1748
+
1749
+ return __( 'Unknown label', 'wp-cerber' ) . '(' . absint( $id ) . ')';
1750
+ }
1751
+
1752
  return $labels[ $type ];
1753
  }
1754
 
1755
+ /**
1756
+ * Returns a label to be displayed in the logs
1757
+ *
1758
+ * @param int $activity
1759
+ * @param int $user
1760
+ * @param int $by_user
1761
+ *
1762
+ * @return string
1763
+ *
1764
+ * @since 8.9.5.1
1765
+ */
1766
+ function crb_get_label( $activity, $user = null, $by_user = null ) {
1767
+ static $user_link = array();
1768
+ if ( $by_user
1769
+ && $user != $by_user
1770
+ && $user_data = crb_get_userdata( $by_user ) ) {
1771
+
1772
+ if ( empty( $user_link[ $by_user ] ) ) {
1773
+ $user_link[ $by_user ] = get_edit_user_link( $by_user );
1774
+ }
1775
+
1776
+ return sprintf( cerber_get_labels( 'activity_by', $activity ), '<a href="' . $user_link[ $by_user ] . '">' . $user_data->display_name . '</a>' );
1777
+ }
1778
+
1779
+ return cerber_get_labels( 'activity', $activity );
1780
+ }
1781
+
1782
  function crb_get_filter_set( $set_id ) {
1783
  static $list = array( 1 => 'suspicious', 2 => 'login_issues' );
1784
 
2138
  return get_user_by( 'login', $login_email );
2139
  }
2140
 
2141
+ /**
2142
+ * @param int $user_id
2143
+ *
2144
+ * @return false|WP_User
2145
+ *
2146
+ * @since 8.9.5.1
2147
+ */
2148
+ function crb_get_userdata( $user_id ) {
2149
+ static $users;
2150
+
2151
+ if ( ! isset( $users[ $user_id ] ) ) {
2152
+ $users[ $user_id ] = get_user_by( 'id', $user_id );
2153
+ }
2154
+
2155
+ return $users[ $user_id ];
2156
+ }
2157
+
2158
  /**
2159
  * Check if a DB table exists
2160
  *
cerber-ds.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
cerber-lab.php CHANGED
@@ -2,8 +2,8 @@
2
  /*
3
  Cerber Laboratory (cerberlab.net) specific routines.
4
 
5
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
6
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
7
 
8
  Licenced under the GNU GPL.
9
 
2
  /*
3
  Cerber Laboratory (cerberlab.net) specific routines.
4
 
5
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
6
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
7
 
8
  Licenced under the GNU GPL.
9
 
cerber-load.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
cerber-maintenance.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
cerber-pluggable.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -87,4 +87,104 @@ if ( ! function_exists( 'wp_logout' ) ) :
87
  */
88
  do_action( 'wp_logout', $user_id );
89
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  endif;
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
87
  */
88
  do_action( 'wp_logout', $user_id );
89
  }
90
+ endif;
91
+
92
+
93
+ // Compatibilty
94
+
95
+ if ( ! function_exists( 'get_metadata_raw' ) ) :
96
+
97
+ /**
98
+ * Retrieves raw metadata value for the specified object.
99
+ *
100
+ * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
101
+ * or any other object type with an associated meta table.
102
+ * @param int $object_id ID of the object metadata is for.
103
+ * @param string $meta_key Optional. Metadata key. If not specified, retrieve all metadata for
104
+ * the specified object. Default empty.
105
+ * @param bool $single Optional. If true, return only the first value of the specified `$meta_key`.
106
+ * This parameter has no effect if `$meta_key` is not specified. Default false.
107
+ *
108
+ * @return mixed An array of values if `$single` is false.
109
+ * The value of the meta field if `$single` is true.
110
+ * False for an invalid `$object_id` (non-numeric, zero, or negative value),
111
+ * or if `$meta_type` is not specified.
112
+ * Null if the value does not exist.
113
+ * @since 5.5.0
114
+ *
115
+ */
116
+ function get_metadata_raw( $meta_type, $object_id, $meta_key = '', $single = false ) {
117
+ if ( ! $meta_type || ! is_numeric( $object_id ) ) {
118
+ return false;
119
+ }
120
+
121
+ $object_id = absint( $object_id );
122
+ if ( ! $object_id ) {
123
+ return false;
124
+ }
125
+
126
+ /**
127
+ * Short-circuits the return value of a meta field.
128
+ *
129
+ * The dynamic portion of the hook, `$meta_type`, refers to the meta object type
130
+ * (post, comment, term, user, or any other type with an associated meta table).
131
+ * Returning a non-null value will effectively short-circuit the function.
132
+ *
133
+ * Possible filter names include:
134
+ *
135
+ * - `get_post_metadata`
136
+ * - `get_comment_metadata`
137
+ * - `get_term_metadata`
138
+ * - `get_user_metadata`
139
+ *
140
+ * @param mixed $value The value to return, either a single metadata value or an array
141
+ * of values depending on the value of `$single`. Default null.
142
+ * @param int $object_id ID of the object metadata is for.
143
+ * @param string $meta_key Metadata key.
144
+ * @param bool $single Whether to return only the first value of the specified `$meta_key`.
145
+ * @param string $meta_type Type of object metadata is for. Accepts 'post', 'comment', 'term', 'user',
146
+ * or any other object type with an associated meta table.
147
+ *
148
+ * @since 5.5.0 Added the `$meta_type` parameter.
149
+ *
150
+ * @since 3.1.0
151
+ */
152
+ $check = apply_filters( "get_{$meta_type}_metadata", null, $object_id, $meta_key, $single, $meta_type );
153
+ if ( null !== $check ) {
154
+ if ( $single && is_array( $check ) ) {
155
+ return $check[0];
156
+ }
157
+ else {
158
+ return $check;
159
+ }
160
+ }
161
+
162
+ $meta_cache = wp_cache_get( $object_id, $meta_type . '_meta' );
163
+
164
+ if ( ! $meta_cache ) {
165
+ $meta_cache = update_meta_cache( $meta_type, array( $object_id ) );
166
+ if ( isset( $meta_cache[ $object_id ] ) ) {
167
+ $meta_cache = $meta_cache[ $object_id ];
168
+ }
169
+ else {
170
+ $meta_cache = null;
171
+ }
172
+ }
173
+
174
+ if ( ! $meta_key ) {
175
+ return $meta_cache;
176
+ }
177
+
178
+ if ( isset( $meta_cache[ $meta_key ] ) ) {
179
+ if ( $single ) {
180
+ return maybe_unserialize( $meta_cache[ $meta_key ][0] );
181
+ }
182
+ else {
183
+ return array_map( 'maybe_unserialize', $meta_cache[ $meta_key ] );
184
+ }
185
+ }
186
+
187
+ return null;
188
+ }
189
+
190
  endif;
cerber-ripe.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -47,9 +47,9 @@ if ( ! defined( 'WPINC' ) ) { exit; }
47
  *
48
  */
49
 
50
- define('RIPE_ERR_EXPIRE',300);
51
- define('RIPE_OK_EXPIRE',24 * 3600);
52
- define('RIPE_HOST','http://rest.db.ripe.net/');
53
 
54
  /**
55
  * Search for the information about IP by using RIPE REST API, method 'search'
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
47
  *
48
  */
49
 
50
+ const RIPE_ERR_EXPIRE = 300;
51
+ const RIPE_OK_EXPIRE = 24 * 3600;
52
+ const RIPE_HOST = 'http://rest.db.ripe.net/';
53
 
54
  /**
55
  * Search for the information about IP by using RIPE REST API, method 'search'
cerber-scanner.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -3396,14 +3396,14 @@ function cerber_cmp_files( $prev, $new ) {
3396
  }
3397
 
3398
  /**
3399
- * Recursively creates a list of files in a given folder with a given filename pattern
3400
  *
3401
- * @param string $root The starting folder with trailing slash
3402
- * @param callable $function The function to save the list of files that are passed as an array
3403
  *
3404
  * @param string $pattern Pattern for filenames to include
3405
  *
3406
- * @return array The total number of folders and files
3407
  */
3408
  function cerber_scan_directory( $root, $function, $pattern = null ) {
3409
  static $history = array();
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
3396
  }
3397
 
3398
  /**
3399
+ * Recursively creates a list of files in a given folder matching a given filename pattern
3400
  *
3401
+ * @param string $root The starting folder
3402
+ * @param callable $function The function to save the list of files that is passed as an array
3403
  *
3404
  * @param string $pattern Pattern for filenames to include
3405
  *
3406
+ * @return array The total number of processed folders and files
3407
  */
3408
  function cerber_scan_directory( $root, $function, $pattern = null ) {
3409
  static $history = array();
cerber-settings.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -1220,9 +1220,15 @@ function cerber_settings_config( $args = array() ) {
1220
 
1221
  'antibot' => array(
1222
  'name' => __( 'Cerber anti-spam engine', 'wp-cerber' ),
1223
- 'desc' => __( 'Spam protection for comment, registration and contact forms on a website', 'wp-cerber' ),
1224
  'doclink' => 'https://wpcerber.com/antispam-for-wordpress-contact-forms/',
1225
- 'fields' => array(
 
 
 
 
 
 
1226
  'botsreg' => array(
1227
  'title' => __( 'Registration form', 'wp-cerber' ),
1228
  'label' => __( 'Protect registration form with bot detection engine', 'wp-cerber' ),
@@ -1322,6 +1328,12 @@ function cerber_settings_config( $args = array() ) {
1322
  'name' => __( 'reCAPTCHA settings', 'wp-cerber' ),
1323
  'desc' => __( 'Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website', 'wp-cerber' ),
1324
  'doclink' => 'https://wpcerber.com/how-to-setup-recaptcha/',
 
 
 
 
 
 
1325
  'fields' => array(
1326
  'sitekey' => array(
1327
  'title' => __( 'Site key', 'wp-cerber' ),
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1220
 
1221
  'antibot' => array(
1222
  'name' => __( 'Cerber anti-spam engine', 'wp-cerber' ),
1223
+ 'desc' => __( 'Spam protection for registration, comment, and other forms on the website', 'wp-cerber' ),
1224
  'doclink' => 'https://wpcerber.com/antispam-for-wordpress-contact-forms/',
1225
+ 'seclinks' => array(
1226
+ array(
1227
+ __( 'View bot events', 'wp-cerber' ),
1228
+ cerber_admin_link( 'activity', array( 'filter_status' => CRB_STS_11 ) )
1229
+ )
1230
+ ),
1231
+ 'fields' => array(
1232
  'botsreg' => array(
1233
  'title' => __( 'Registration form', 'wp-cerber' ),
1234
  'label' => __( 'Protect registration form with bot detection engine', 'wp-cerber' ),
1328
  'name' => __( 'reCAPTCHA settings', 'wp-cerber' ),
1329
  'desc' => __( 'Before you can start using reCAPTCHA, you have to obtain Site key and Secret key on the Google website', 'wp-cerber' ),
1330
  'doclink' => 'https://wpcerber.com/how-to-setup-recaptcha/',
1331
+ 'seclinks' => array(
1332
+ array(
1333
+ __( 'View reCAPTCHA events', 'wp-cerber' ),
1334
+ cerber_admin_link( 'activity', array( 'filter_status' => array( 531, CRB_STS_532, 533, 534 ) ) )
1335
+ )
1336
+ ),
1337
  'fields' => array(
1338
  'sitekey' => array(
1339
  'title' => __( 'Site key', 'wp-cerber' ),
cerber-whois.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
@@ -35,14 +35,19 @@
35
  // If this file is called directly, abort executing.
36
  if ( ! defined( 'WPINC' ) ) { exit; }
37
 
38
- define('WHOIS_ERR_EXPIRE',300);
39
- define('WHOIS_OK_EXPIRE',24 * 3600);
40
- define('WHOIS_IO_TIMEOUT', 3);
41
 
42
  require_once( dirname( __FILE__ ) . '/cerber-ripe.php' );
43
 
44
- /*
45
- * Get WHOIS about IP
 
 
 
 
 
46
  * @since 2.7
47
  *
48
  */
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
35
  // If this file is called directly, abort executing.
36
  if ( ! defined( 'WPINC' ) ) { exit; }
37
 
38
+ const WHOIS_ERR_EXPIRE = 300;
39
+ const WHOIS_OK_EXPIRE = 24 * 3600;
40
+ const WHOIS_IO_TIMEOUT = 3;
41
 
42
  require_once( dirname( __FILE__ ) . '/cerber-ripe.php' );
43
 
44
+ /**
45
+ * Get WHOIS info about a given IP
46
+ *
47
+ * @param string $ip
48
+ *
49
+ * @return array
50
+ *
51
  * @since 2.7
52
  *
53
  */
jetflow.php CHANGED
@@ -4,8 +4,8 @@
4
  Integration with the jetFlow.io automation and customization plugin, https://jetflow.io
5
  Actions and triggers definitions.
6
 
7
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
8
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
9
 
10
  Licenced under the GNU GPL.
11
 
4
  Integration with the jetFlow.io automation and customization plugin, https://jetflow.io
5
  Actions and triggers definitions.
6
 
7
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
8
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
9
 
10
  Licenced under the GNU GPL.
11
 
modules/aaa-wp-cerber.php CHANGED
@@ -8,8 +8,8 @@
8
  Text Domain: wp-cerber
9
  Network: true
10
 
11
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
12
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
13
 
14
  Licenced under the GNU GPL.
15
 
8
  Text Domain: wp-cerber
9
  Network: true
10
 
11
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
12
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
13
 
14
  Licenced under the GNU GPL.
15
 
nexus/cerber-nexus-master.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
nexus/cerber-nexus-slave.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
nexus/cerber-nexus.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
nexus/cerber-slave-list.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
  /*
3
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
4
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
1
  <?php
2
  /*
3
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
4
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
5
 
6
  Licenced under the GNU GPL.
7
 
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: Cerber Tech Inc.
7
  Author URI: https://wpcerber.com
8
- Version: 8.9.5
9
  Text Domain: wp-cerber
10
  Domain Path: /languages
11
  Network: true
12
 
13
- Copyright (C) 2015-21 CERBER TECH INC., https://cerber.tech
14
- Copyright (C) 2015-21 Markov Cregory, https://wpcerber.com
15
 
16
  Licenced under the GNU GPL.
17
 
@@ -31,7 +31,7 @@
31
 
32
  */
33
 
34
- const CERBER_VER = '8.9.5';
35
  const CERBER_PLUGIN_ID = 'wp-cerber/wp-cerber.php';
36
 
37
  function cerber_plugin_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: Cerber Tech Inc.
7
  Author URI: https://wpcerber.com
8
+ Version: 8.9.5.2
9
  Text Domain: wp-cerber
10
  Domain Path: /languages
11
  Network: true
12
 
13
+ Copyright (C) 2015-22 CERBER TECH INC., https://cerber.tech
14
+ Copyright (C) 2015-22 Markov Gregory, https://wpcerber.com
15
 
16
  Licenced under the GNU GPL.
17
 
31
 
32
  */
33
 
34
+ const CERBER_VER = '8.9.5.2';
35
  const CERBER_PLUGIN_ID = 'wp-cerber/wp-cerber.php';
36
 
37
  function cerber_plugin_file() {