get( 'redact_query_keys', '' ); if ( empty( $redact_keys ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended return self::sanitize_params( $_GET ); } $redact_list = array_map( 'trim', explode( ',', strtolower( $redact_keys ) ) ); $filtered = array(); // phpcs:ignore WordPress.Security.NonceVerification.Recommended foreach ( $_GET as $key => $value ) { $key_lower = strtolower( $key ); $should_redact = false; foreach ( $redact_list as $redact_key ) { if ( ! empty( $redact_key ) && strpos( $key_lower, $redact_key ) !== false ) { $should_redact = true; break; } } if ( $should_redact ) { $filtered[ sanitize_key( $key ) ] = '[REDACTED]'; } elseif ( is_array( $value ) ) { $filtered[ sanitize_key( $key ) ] = '[ARRAY]'; } else { $clean_key = substr( sanitize_key( wp_unslash( $key ) ), 0, 100 ); $clean_value = substr( sanitize_text_field( wp_unslash( (string) $value ) ), 0, 1000 ); $filtered[ $clean_key ] = $clean_value; } } return $filtered; } /** * Sanitize query params without redaction. */ private static function sanitize_params( $params ) { $sanitized = array(); foreach ( $params as $key => $value ) { $clean_key = substr( sanitize_key( wp_unslash( $key ) ), 0, 100 ); if ( is_array( $value ) ) { $sanitized[ $clean_key ] = '[ARRAY]'; } else { $sanitized[ $clean_key ] = substr( sanitize_text_field( wp_unslash( (string) $value ) ), 0, 1000 ); } } return $sanitized; } }