Version Description
Download this release
Release Info
Developer | Gioni |
Plugin | 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 +10 -8
- admin/cerber-admin.php +2 -2
- admin/cerber-dashboard.php +18 -53
- admin/cerber-tools.php +2 -2
- assets/admin.css +15 -0
- cerber-2fa.php +2 -2
- cerber-common.php +115 -14
- cerber-ds.php +2 -2
- cerber-lab.php +2 -2
- cerber-load.php +2 -2
- cerber-maintenance.php +2 -2
- cerber-pluggable.php +102 -2
- cerber-ripe.php +5 -5
- cerber-scanner.php +6 -6
- cerber-settings.php +16 -4
- cerber-whois.php +12 -7
- jetflow.php +2 -2
- modules/aaa-wp-cerber.php +2 -2
- nexus/cerber-nexus-master.php +2 -2
- nexus/cerber-nexus-slave.php +2 -2
- nexus/cerber-nexus.php +2 -2
- nexus/cerber-slave-list.php +2 -2
- wp-cerber.php +4 -4
admin/cerber-admin-settings.php
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?php
|
2 |
/*
|
3 |
-
Copyright (C) 2015-
|
4 |
-
Copyright (C) 2015-
|
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 ( $
|
98 |
-
|
99 |
-
$desc .= '.';
|
100 |
}
|
101 |
-
|
|
|
|
|
|
|
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 |
-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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 |
-
|
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 . '&filter_login=' . $row->user_login . '">' . $row->user_login . '</a>';
|
1312 |
|
1313 |
$ip_info = cerber_get_ip_info( $row->ip, true );
|
1314 |
-
|
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 |
-
|
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 |
-
|
|
|
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 |
-
|
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 |
-
|
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 |
-
|
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 . '&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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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
|
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'
|
1554 |
-
'
|
|
|
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 .= '&' . $arg . '[]=' . urlencode( $val );
|
151 |
+
}
|
152 |
+
}
|
153 |
+
else {
|
154 |
+
$link .= '&' . $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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
6 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
5 |
|
6 |
Licenced under the GNU GPL.
|
7 |
|
@@ -47,9 +47,9 @@ if ( ! defined( 'WPINC' ) ) { exit; }
|
|
47 |
*
|
48 |
*/
|
49 |
|
50 |
-
|
51 |
-
|
52 |
-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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
|
3400 |
*
|
3401 |
-
* @param string $root The starting folder
|
3402 |
-
* @param callable $function The function to save the list of files that
|
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-
|
4 |
-
Copyright (C) 2015-
|
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,
|
1224 |
'doclink' => 'https://wpcerber.com/antispam-for-wordpress-contact-forms/',
|
1225 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
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-
|
4 |
-
Copyright (C) 2015-
|
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 |
-
|
39 |
-
|
40 |
-
|
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-
|
8 |
-
Copyright (C) 2015-
|
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-
|
12 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
4 |
-
Copyright (C) 2015-
|
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-
|
14 |
-
Copyright (C) 2015-
|
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() {
|