1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
<?php
use \iThemesSecurity\User_Groups;
class ITSEC_Global_Validator extends ITSEC_Validator { public function get_id() { return 'global'; }
protected function sanitize_settings() { if ( is_dir( WP_PLUGIN_DIR . '/iwp-client' ) ) { $this->sanitize_setting( 'bool', 'infinitewp_compatibility', __( 'Add InfiniteWP Compatibility', 'better-wp-security' ) ); } else { $this->settings['infinitewp_compatibility'] = $this->previous_settings['infinitewp_compatibility']; }
if ( 'nginx' === ITSEC_Lib::get_server() ) { $this->sanitize_setting( 'writable-file', 'nginx_file', __( 'NGINX Conf File', 'better-wp-security' ), false ); } else { $this->settings['nginx_file'] = $this->previous_settings['nginx_file']; }
$this->vars_to_skip_validate_matching_fields = array( 'digest_last_sent', 'digest_messages', 'digest_email', 'email_notifications', 'notification_email', 'backup_email', 'show_new_dashboard_notice', 'proxy_override', 'proxy', 'proxy_header', 'server_ips', 'initial_build', 'feature_flags', 'licensed_hostname_prompt' ); $this->set_previous_if_empty( array( 'did_upgrade', 'log_info', 'show_security_check', 'build', 'activation_timestamp', 'lock_file', 'cron_status', 'use_cron', 'cron_test_time', 'proxy', 'proxy_header', 'server_ips', 'initial_build', 'feature_flags', 'licensed_hostname_prompt' ) ); $this->set_default_if_empty( array( 'log_location', 'nginx_file', 'enable_grade_report' ) ); $this->preserve_setting_if_exists( array( 'digest_email', 'email_notifications', 'notification_email', 'backup_email', 'proxy_override' ) );
$this->sanitize_setting( 'bool', 'write_files', __( 'Write to Files', 'better-wp-security' ) ); $this->sanitize_setting( 'bool', 'blacklist', __( 'Ban Repeat Offender', 'better-wp-security' ) ); $this->sanitize_setting( 'bool', 'allow_tracking', __( 'Allow Data Tracking', 'better-wp-security' ) ); $this->sanitize_setting( array_keys( $this->get_proxy_types() ), 'proxy', __( 'Proxy Detection', 'better-wp-security' ) ); $this->sanitize_setting( 'string', 'proxy_header', __( 'Manual Proxy Header', 'better-wp-security' ) ); $this->sanitize_setting( 'bool', 'hide_admin_bar', __( 'Hide Security Menu in Admin Bar', 'better-wp-security' ) ); $this->sanitize_setting( 'bool', 'show_error_codes', __( 'Show Error Codes', 'better-wp-security' ) ); $this->sanitize_setting( 'bool', 'enable_grade_report', __( 'Enable Grade Report', 'better-wp-security' ) );
$this->sanitize_setting( 'string', 'lockout_message', __( 'Host Lockout Message', 'better-wp-security' ) ); $this->sanitize_setting( 'string', 'user_lockout_message', __( 'User Lockout Message', 'better-wp-security' ) ); $this->sanitize_setting( 'string', 'community_lockout_message', __( 'Community Lockout Message', 'better-wp-security' ) );
$this->sanitize_setting( 'positive-int', 'blacklist_count', __( 'Ban Threshold', 'better-wp-security' ) ); $this->sanitize_setting( 'positive-int', 'blacklist_period', __( 'Ban Lockout Period', 'better-wp-security' ) ); $this->sanitize_setting( 'positive-int', 'lockout_period', __( 'Lockout Period', 'better-wp-security' ) ); $this->sanitize_setting( 'positive-int', 'log_rotation', __( 'Days to Keep Database Logs', 'better-wp-security' ) ); $this->sanitize_setting( 'positive-int', 'file_log_rotation', __( 'Days to Keep File Logs', 'better-wp-security' ) );
$this->sanitize_setting( 'newline-separated-ips', 'lockout_white_list', __( 'Authorized Hosts List', 'better-wp-security' ) );
$log_types = array_keys( $this->get_valid_log_types() ); $this->sanitize_setting( $log_types, 'log_type', __( 'Log Type', 'better-wp-security' ) );
if ( 'database' !== $this->settings['log_type'] ) { $this->sanitize_setting( 'writable-directory', 'log_location', __( 'Path to Log Files', 'better-wp-security' ) ); }
$allowed_tags = $this->get_allowed_tags();
$this->settings['lockout_message'] = trim( wp_kses( $this->settings['lockout_message'], $allowed_tags ) ); $this->settings['user_lockout_message'] = trim( wp_kses( $this->settings['user_lockout_message'], $allowed_tags ) ); $this->settings['community_lockout_message'] = trim( wp_kses( $this->settings['community_lockout_message'], $allowed_tags ) );
$this->sanitize_setting( 'newline-separated-ips', 'server_ips', __( 'Server IPs', 'better-wp-security' ) ); $this->sanitize_setting( 'array', 'feature_flags', __( 'Feature Flags', 'better-wp-security' ) ); $this->sanitize_setting( 'user-groups', 'manage_group', __( 'Manage Group', 'better-wp-security' ) ); $this->sanitize_setting( 'bool', 'licensed_hostname_prompt', __( 'Licensed Hostname Prompt', 'better-wp-security' ) ); }
protected function validate_settings() { if ( ITSEC_Core::is_interactive() && $this->settings['manage_group'] && $this->settings['manage_group'] !== $this->previous_settings['manage_group'] ) { $matcher = ITSEC_Modules::get_container()->get( User_Groups\Matcher::class );
if ( ! $matcher->matches( User_Groups\Match_Target::for_user( wp_get_current_user() ), $this->settings['manage_group'] ) ) { $this->add_error( new WP_Error( 'itsec-validator-global-cannot-exclude-self', __( 'The configuration you have chosen removes your capability to manage iThemes Security.', 'better-wp-security' ), [ 'status' => 400 ] ) ); $this->set_can_save( false ); } } }
public function get_proxy_types() { ITSEC_Lib::load( 'ip-detector' );
return ITSEC_Lib_IP_Detector::get_proxy_types(); }
public function get_proxy_header_options() { ITSEC_Lib::load( 'ip-detector' );
$possible_headers = ITSEC_Lib_IP_Detector::get_proxy_headers(); $possible_headers[] = 'REMOTE_ADDR';
$ucwords = version_compare( phpversion(), '5.5.16', '>=' ) || ( version_compare( phpversion(), '5.4.32', '>=' ) && version_compare( phpversion(), '5.5.0', '<' ) ); $options = array();
foreach ( $possible_headers as $header ) { $label = $header;
if ( 0 === strpos( $header, 'HTTP_' ) ) { $label = substr( $label, 5 ); }
$label = str_replace( '_', '-', $label ); $label = strtolower( $label ); $label = $ucwords ? ucwords( $label, '-' ) : implode( '-', array_map( 'ucfirst', explode( '-', $label ) ) ); $label = str_replace('Ip', 'IP', $label );
$options[ $header ] = $label; }
return $options; }
public function get_valid_log_types() { return array( 'database' => __( 'Database Only', 'better-wp-security' ), 'file' => __( 'File Only', 'better-wp-security' ), 'both' => __( 'Both', 'better-wp-security' ), ); }
private function get_allowed_tags() { return array( 'a' => array( 'href' => array(), 'title' => array(), ), 'br' => array(), 'em' => array(), 'strong' => array(), 'h1' => array(), 'h2' => array(), 'h3' => array(), 'h4' => array(), 'h5' => array(), 'h6' => array(), 'div' => array( 'style' => array(), ), ); } }
ITSEC_Modules::register_validator( new ITSEC_Global_Validator() );
|