L’autenticazione di WordPress in breve
Come la maggior parte delle applicazioni web, WordPress consente agli utenti, definiti nella sezione Users del pannello di amministrazione, di autenticarsi e generare una sessione per le richieste successive.
Il processo di autenticazione inizia con l’invio di un nome utente e una password da parte dell’utente a wp-login.php.
L’invio del modulo viene passato alla funzione wp_signon(), che a sua volta richiama la funzione wp_authenticate() e confronta il nome utente e la password inviati con i dati utente memorizzati nel database.
Se l’autenticazione ha esito positivo, la funzione wp_set_auth_cookie() viene richiamata per impostare il cookie dell’utente e memorizzare i dettagli della sessione.
Il cookie e i dati della sessione vengono quindi utilizzati per autenticare le richieste successive tramite la funzione wp_validate_auth_cookie().
Ogni sessione utente unica viene gestita tramite la tabella wp_usermeta del database.
I cookie vengono cancellati e le sessioni vengono eliminate tramite la funzione wp_clear_auth_cookie() quando un utente si disconnette.
Le password vengono memorizzate nel database tramite la funzione wp_hash_password().
Ruoli utente
Un ruolo utente è un insieme di capacità (capabilities). Le capacità definiscono i singoli tipi di accesso di un utente all’interno dell’ambiente WordPress.
WordPress offre cinque ruoli predefiniti:
- Amministratore: accesso completo a tutte le funzionalità e impostazioni amministrative.
- Editor: può gestire e pubblicare post, inclusi quelli di altri utenti.
- Autore: può scrivere, modificare e pubblicare i propri post.
- Collaboratore: può scrivere e modificare i propri post, ma non può pubblicarli.
- Subscriber: può gestire il proprio profilo.
Come accennato in precedenza, un ruolo utente è un insieme di capacità. Di seguito sono riportati i ruoli e le relative capacità.
| Capacità | Amministratore | Editor | Autore | Collaboratore | Subscriber |
|---|---|---|---|---|---|
read | SÌ | SÌ | SÌ | SÌ | SÌ |
edit_posts | SÌ | SÌ | SÌ | SÌ | NO |
publish_posts | SÌ | SÌ | SÌ | NO | NO |
edit_others_posts | SÌ | SÌ | NO | NO | NO |
delete_posts | SÌ | SÌ | SÌ | NO | NO |
manage_options | SÌ | NO | NO | NO | NO |
moderate_comments | SÌ | SÌ | NO | NO | NO |
upload_files | SÌ | SÌ | SÌ | NO | NO |
edit_pages | SÌ | SÌ | NO | NO | NO |
publish_pages | SÌ | SÌ | NO | NO | NO |
edit_themes | SÌ | NO | NO | NO | NO |
install_plugins | SÌ | NO | NO | NO | NO |
delete_plugins | SÌ | NO | NO | NO | NO |
activate_plugins | SÌ | NO | NO | NO | NO |
edit_users | SÌ | NO | NO | NO | NO |
remove_users | SÌ | NO | NO | NO | NO |
edit_files | SÌ | NO | NO | NO | NO |
edit_plugins | SÌ | NO | NO | NO | NO |
delete_themes | SÌ | NO | NO | NO | NO |
manage_categories | SÌ | SÌ | NO | NO | NO |
unfiltered_html | SÌ | SÌ | NO | NO | NO |
import | SÌ | NO | NO | NO | NO |
Le funzionalità, in base al loro nome, sono autoesplicative sul tipo di accesso che consentono. Nella tabella sopra, è possibile vedere che il ruolo di Amministratore ha tutte le funzionalità per impostazione predefinita * , mentre ne vediamo applicate sempre meno man mano che si passa dal ruolo di Editor (il secondo ruolo più alto) al ruolo di Sottoscrittore (il ruolo di livello più basso).
* WordPress Multisite è una funzionalità che consente a una singola istanza di WordPress di gestire più siti web. In una configurazione Multisite, viene introdotto il concetto di Super Admin. In questo caso, gli utenti con ruolo di Amministratore perdono alcune funzionalità, come l’installazione di plugin o la gestione di temi.
Ruoli personalizzati
I ruoli personalizzati possono essere definiti da temi o plugin richiamando la funzione add_role(). I ruoli personalizzati sono utili quando è necessario un set di funzionalità non definite da un ruolo predefinito.
Le funzionalità per un determinato ruolo possono essere modificate utilizzando le funzioni add_cap()o remove_cap().
Esempio di aggiunta di un ruolo personalizzato:
add_role('custom_role', 'Custom Role', array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
));Questo codice aggiunge un nuovo ruolo, custom_role, con la possibilità di leggere e modificare i post, ma non di eliminarli.
Funzionalità personalizzate
Le funzionalità personalizzate in WordPress consentono agli sviluppatori di definire autorizzazioni specifiche non coperte dai ruoli e dalle funzionalità predefiniti.
register_post_type( 'my_custom_post', array(
'label' => 'Custom Posts',
'public' => true,
'capability_type' => 'post',
'capabilities' =>; array(
'delete_posts' => 'delete_my_custom_posts',
),
'map_meta_cap' => true,
));Nell’esempio sopra, viene registrato un tipo di post personalizzato e gli viene assegnata la capacità delete_my_custom_posts di eliminare un post di questo tipo specifico.
Ciò significa che anche un utente con la capacità delete_posts standard non sarà in grado di eliminare questo post.
Autorizzazione
In WordPress, l’autorizzazione viene effettuata confrontando le funzionalità con la richiesta effettuata dall’utente.
Ad esempio, se viene effettuata una richiesta per attivare un plugin, ma la richiesta viene inviata da un utente con livello di sottoscrittore (definito dal valore fornito nell’intestazione HTTP Cookie: inviata nella richiesta), WordPress negherà la richiesta.
WordPress utilizza l’autorizzazione contestuale. Ciò significa che gli sviluppatori di plugin e temi devono implementare controlli di autorizzazione nelle aree specifiche del codice (ad esempio, all’interno della funzione) che necessitano di controlli di autorizzazione prima che un’azione venga eseguita da quella funzione.
Nella sezione precedente, abbiamo fornito un esempio in cui un plugin ha implementato una funzionalità personalizzata.
Nel seguente esempio di codice, vediamo il controllo di autorizzazione current_user_can implementato per verificare le funzionalità dell’utente prima che il post venga eliminato.
Se l’utente non dispone della capacità delete_my_custom_posts, la funzione termina con wp_die().
function my_plugin_delete_custom_post( $post_id ) {
// Check if the user can delete this specific custom post
if ( ! current_user_can( 'delete_my_custom_posts', $post_id ) ) {
wp_die( __( 'You do not have sufficient permissions to delete this post.' ) );
}
// Perform the deletion
wp_delete_post( $post_id );
}Il database delle vulnerabilità di Wordfence evidenzia diverse vulnerabilità di tipo “Mancanza di autorizzazione” .
Queste vulnerabilità derivano solitamente dalla mancanza di un controllo di funzionalità in una funzione che esegue un’operazione che, se attivata da un utente non autorizzato, comporterebbe una perdita di riservatezza, integrità o disponibilità.
È possibile individuarle esaminando le funzioni all’interno del codice (ad esempio delete_users()) e verificando se dispongono di un controllo di funzionalità current_user_can().
Flusso di autorizzazione
Nessun controllo di autorizzazione

Solo controllo autorizzazione

Controllo autorizzazione + controllo nonce



Lascia un commento
Devi essere connesso per inviare un commento.