WordPress offre una moltitudine di funzioni di sicurezza per aiutare gli sviluppatori a proteggere il loro codice da vulnerabilità note delle applicazioni web.
Tuttavia, indipendentemente dal numero di funzioni di sicurezza utilizzate, alcune vulnerabilità non possono essere risolte con la convalida, la sanificazione o l’escape.
A volte gli sviluppatori introducono errori nella logica del loro codice, ovvero difetti logici.
Questi difetti si verificano quando uno sviluppatore scrive codice che consente involontariamente azioni non autorizzate, anche se sono presenti le funzioni di sicurezza di WordPress.
Considera il seguente esempio. Riesci a individuare il difetto?
function arm_check_user_cap( $arm_capabilities = '', $is_ajax_call = '', $nonce_required = 0 ) {
global $arm_global_settings;
$errors = array();
$message = '';
if ( $is_ajax_call == true || $is_ajax_call == '1' || $is_ajax_call == 1 ) {
if ( ! current_user_can( $arm_capabilities ) ) {
$errors[] = esc_html__( 'Sorry, You do not have permission to perform this action.', 'armember-membership' );
$return_array = $arm_global_settings->handle_return_messages( @$errors, @$message );
$return_array['message'] = $return_array['msg'];
echo json_encode( $return_array );
exit;
}
}
$wpnonce = isset( $_REQUEST['_wpnonce'] ) ? sanitize_text_field($_REQUEST['_wpnonce']) : '';
$arm_verify_nonce_flag = wp_verify_nonce( $wpnonce, 'arm_wp_nonce' );
if ( ! $arm_verify_nonce_flag && ( !empty( $wpnonce ) || !empty($nonce_required) ) ) {
$errors[] = esc_html__( 'Sorry, Your request can not process due to security reason.', 'armember-membership' );
$return_array = $arm_global_settings->handle_return_messages( @$errors, @$message );
$return_array['message'] = $return_array['msg'];
echo json_encode( $return_array );
exit;
}
}Questa funzione è responsabile della verifica della capacità di un utente di eseguire un’azione e della verifica di un nonce. Notate però come sono definiti questi controlli:
- L’autorizzazione (
current_user_can()) avviene solo se$is_ajax_callè vera. - Il controllo del nonce avviene solo se
$nonce_requiredè impostato (o se è presente un nonce).
Ciò crea una situazione in cui:
- Se
$is_ajax_callè falso, il controllo della capacità viene completamente saltato. - Se
$nonce_requiredè falso (o non impostato), anche il controllo del nonce può essere ignorato.
Di conseguenza, se uno sviluppatore o un aggressore può richiamare questa funzione con $is_ajax_call = false e $nonce_required = 0, né il controllo della capacità né il controllo del nonce verranno eseguiti, il che significa che la funzione non fornisce alcuna protezione significativa in tale scenario.

Lascia un commento
Devi essere connesso per inviare un commento.