Add new sanitization cases for array-based input validation

Introduced 'sanitize_array_key_int' and 'sanitize_array_key' cases to enhance sanitization of array-based input in admin settings. This ensures default values are used for invalid keys and enforces stricter validation for cleaner and more secure input handling.
This commit is contained in:
Mykyta Synelnikov
2025-09-08 23:20:59 +03:00
parent d9f924a294
commit 39b3b3873e
+24 -5
View File
@@ -1405,6 +1405,13 @@ if ( ! class_exists( 'um\admin\Admin' ) ) {
$sanitized[ $k ] = ( '' !== $v ) ? absint( $v ) : '';
}
break;
case 'sanitize_array_key_int':
if ( ! array_key_exists( 'default', $this->builder_input[ $k ] ) || ! array_key_exists( 'array', $this->builder_input[ $k ] ) ) {
continue 2;
}
$sanitized[ $k ] = ! in_array( absint( $v ), $this->builder_input[ $k ]['array'], true ) ? $this->builder_input[ $k ]['default'] : absint( $v );
break;
}
}
@@ -1565,14 +1572,26 @@ if ( ! class_exists( 'um\admin\Admin' ) ) {
case 'text':
$sanitized[ $k ] = sanitize_text_field( $v );
break;
case 'sanitize_array_key':
if ( ! array_key_exists( 'default', UM()->admin_settings()->settings_map[ $k ] ) || ! array_key_exists( 'array', UM()->admin_settings()->settings_map[ $k ] ) ) {
continue 2;
}
if ( is_array( $v ) ) {
$sanitized[ $k ] = array();
foreach ( $v as $v_v ) {
if ( in_array( sanitize_key( $v_v ), UM()->admin_settings()->settings_map[ $k ]['array'], true ) ) {
$sanitized[ $k ][] = sanitize_key( $v_v );
}
}
} else {
$sanitized[ $k ] = ! in_array( sanitize_key( $v ), UM()->admin_settings()->settings_map[ $k ]['array'], true ) ? UM()->admin_settings()->settings_map[ $k ]['default'] : sanitize_key( $v );
}
break;
}
}
$data = $sanitized;
$data = apply_filters( 'um_save_settings_sanitize', $data );
return $data;
return apply_filters( 'um_save_settings_sanitize', $sanitized );
}
/**