array( __CLASS__, 'sanitize_options' ), ) ); // Referer filter. add_settings_section( 'statifyblacklist-referer', __( 'Referer filter', 'statify-blacklist' ), null, 'statify-blacklist' ); add_settings_field( 'statifyblacklist-referer-active', __( 'Activate live filter', 'statify-blacklist' ), array( __CLASS__, 'option_referer_active' ), 'statify-blacklist', 'statifyblacklist-referer' ); add_settings_field( 'statifyblacklist-referer-cron', __( 'CronJob execution', 'statify-blacklist' ), array( __CLASS__, 'option_referer_cron' ), 'statify-blacklist', 'statifyblacklist-referer' ); add_settings_field( 'statifyblacklist-referer-regexp', __( 'Matching method', 'statify-blacklist' ), array( __CLASS__, 'option_referer_regexp' ), 'statify-blacklist', 'statifyblacklist-referer', array( 'label_for' => 'statifyblacklist-referer-regexp' ) ); add_settings_field( 'statifyblacklist-referer-blacklist', __( 'Referer filter', 'statify-blacklist' ), array( __CLASS__, 'option_referer_blacklist' ), 'statify-blacklist', 'statifyblacklist-referer', array( 'label_for' => 'statifyblacklist-referer-blacklist' ) ); // Target filter. add_settings_section( 'statifyblacklist-target', __( 'Target filter', 'statify-blacklist' ), null, 'statify-blacklist' ); add_settings_field( 'statifyblacklist-target-active', __( 'Activate live filter', 'statify-blacklist' ), array( __CLASS__, 'option_target_active' ), 'statify-blacklist', 'statifyblacklist-target' ); add_settings_field( 'statifyblacklist-target-cron', __( 'CronJob execution', 'statify-blacklist' ), array( __CLASS__, 'option_target_cron' ), 'statify-blacklist', 'statifyblacklist-target' ); add_settings_field( 'statifyblacklist-target-regexp', __( 'Matching method', 'statify-blacklist' ), array( __CLASS__, 'option_target_regexp' ), 'statify-blacklist', 'statifyblacklist-target', array( 'label_for' => 'statifyblacklist-target-regexp' ) ); add_settings_field( 'statifyblacklist-target-blacklist', __( 'Target filter', 'statify-blacklist' ), array( __CLASS__, 'option_target_blacklist' ), 'statify-blacklist', 'statifyblacklist-target', array( 'label_for' => 'statifyblacklist-target-blacklist' ) ); // IP filter. add_settings_section( 'statifyblacklist-ip', __( 'IP filter', 'statify-blacklist' ), null, 'statify-blacklist' ); add_settings_field( 'statifyblacklist-ip-active', __( 'Activate live filter', 'statify-blacklist' ), array( __CLASS__, 'option_ip_active' ), 'statify-blacklist', 'statifyblacklist-ip' ); add_settings_field( 'statifyblacklist-ip-blacklist', __( 'IP filter', 'statify-blacklist' ), array( __CLASS__, 'option_ip_blacklist' ), 'statify-blacklist', 'statifyblacklist-ip', array( 'label_for' => 'statifyblacklist-ip-blacklist' ) ); // User agent filter. add_settings_section( 'statifyblacklist-ua', __( 'User agent filter', 'statify-blacklist' ), null, 'statify-blacklist' ); add_settings_field( 'statifyblacklist-ua-active', __( 'Activate live filter', 'statify-blacklist' ), array( __CLASS__, 'option_ua_active' ), 'statify-blacklist', 'statifyblacklist-ua' ); add_settings_field( 'statifyblacklist-ua-regexp', __( 'Matching method', 'statify-blacklist' ), array( __CLASS__, 'option_ua_regexp' ), 'statify-blacklist', 'statifyblacklist-ua', array( 'label_for' => 'statifyblacklist-ua-regexp' ) ); add_settings_field( 'statifyblacklist-ua-blacklist', __( 'User agent filter', 'statify-blacklist' ), array( __CLASS__, 'option_ua_blacklist' ), 'statify-blacklist', 'statifyblacklist-ua', array( 'label_for' => 'statifyblacklist-ua-blacklist' ) ); } /** * Creates the settings pages. * * @return void */ public static function create_settings_page() { ?>
-
-
-
-
-
/, /test/page/, /?page_id=123
127.0.0.1, 192.168.123.0/24, 2001:db8:a0b:12f0::1/64
-
-
-
MyBot/1.23
array( 'active' => isset( $options['referer']['active'] ) ? (int) $options['referer']['active'] : 0, 'cron' => isset( $options['referer']['cron'] ) ? (int) $options['referer']['cron'] : 0, 'regexp' => isset( $options['referer']['regexp'] ) ? (int) $options['referer']['regexp'] : 0, 'blacklist' => array_flip( $referer ), ), 'target' => array( 'active' => isset( $options['target']['active'] ) ? (int) $options['target']['active'] : 0, 'cron' => isset( $options['target']['cron'] ) ? (int) $options['target']['cron'] : 0, 'regexp' => isset( $options['target']['regexp'] ) ? (int) $options['target']['regexp'] : 0, 'blacklist' => array_flip( $target ), ), 'ip' => array( 'active' => isset( $options['ip']['active'] ) ? (int) $options['ip']['active'] : 0, 'blacklist' => $ip, ), 'ua' => array( 'active' => isset( $options['ua']['active'] ) ? (int) $options['ua']['active'] : 0, 'regexp' => isset( $options['ua']['regexp'] ) ? (int) $options['ua']['regexp'] : 0, 'blacklist' => array_flip( $ua ), ), 'version' => StatifyBlacklist::VERSION_MAIN, ); // Apply sanitizations. self::sanitize_referer_options( $res['referer'] ); self::sanitize_target_options( $res['target'] ); self::sanitize_ip_options( $res['ip'] ); return $res; } /** * Sanitize referer options. * * @param array $options Original referer options. * * @return void * * @since 1.7.0 */ private static function sanitize_referer_options( &$options ) { $referer_given = $options['blacklist']; $referer_invalid = array(); if ( StatifyBlacklist::MODE_NORMAL === $options['regexp'] ) { // Sanitize URLs and remove empty inputs. $referer_sanitized = self::sanitize_urls( $referer_given ); } elseif ( StatifyBlacklist::MODE_REGEX === $options['regexp'] || StatifyBlacklist::MODE_REGEX_CI === $options['regexp'] ) { $referer_sanitized = $referer_given; // Check regular expressions. $referer_invalid = self::sanitize_regex( $referer_given ); } else { $referer_sanitized = $referer_given; } $referer_diff = array_diff_key( $referer_given, $referer_sanitized ); $options['blacklist'] = $referer_sanitized; // Generate messages. if ( ! empty( $referer_diff ) ) { add_settings_error( 'statify-blacklist', 'referer-diff', __( 'Some URLs are invalid and have been sanitized.', 'statify-blacklist' ), 'warning' ); } if ( ! empty( $referer_invalid ) ) { add_settings_error( 'statify-blacklist', 'referer-invalid', __( 'Some regular expressions for referrers are invalid:', 'statify-blacklist' ) . '