La sicurezza è un argomento vitale per tutti i gestori di siti web. Sono molte le strategie che puoi adottare per mantenere sicuro il tuo sito web, e anche l’uso di nonce WordPress non dovrebbe essere trascurato. Questa è una delle funzionalità di sicurezza più utilizzate e impedisce una serie di potenziali problemi.

Un nonce è un “numero usato una volta” e protegge forme e URL da malintenzionati e altri abusi. Questi numeri funzionano come valori identificativi che dovranno essere mostrati dai browser degli utenti, al fine di ottenere l’autorizzazione per eseguire azioni sensibili.

In questo articolo, vedremo come funzionano i nonce in WordPress e come crearli. Analizzeremo quindi come verificare un nonce.

Iniziamo!

Come funzionano i Nonce in WordPress?

Lo scopo principale di un nonce è proteggere il tuo sito WordPress da attacchi dannosi, come i CSFR (Cross-Site Request Forgery) . Questo tipo di attacco induce gli utenti a inviare un modulo o fare clic su un collegamento dannoso per il tuo sito web. Per proteggere il tuo sito, WordPress controlla il valore nonce e consente di completare l’azione solo se quel valore è corretto.

I nonce fanno già parte della funzionalità di WordPress e non è necessario aggiungerli agli elementi generati da WordPress. Ciò significa che le azioni chiave come l’aggiunta e la modifica di post vengono automaticamente protette.

Quando utilizzi un nonce, lo stesso ha una durata predefinita di 24 ore. Trascorso tale termine, il nonce non può più essere utilizzato per verificare l’azione per cui è stato definito. Questa durata può essere regolata dagli amministratori del sito web. 

Uno degli attacchi CSRF più comuni contro i quali i nonce proteggono è l’eliminazione dannosa degli account utente. Dopo aver implementato un nonce, la schermata di amministrazione genererà un URL per l’eliminazione dell’account. WordPress aggiungerà un nonce alla fine di quell’URL, che avrà un aspetto simile al seguente:

http://iltuodominio.it/wp-admin/users.php?user=7&action=delete&_wpnonce=c214gd5315

Se un utente malintenzionato tenta di sostituire l’ID utente con un altro valore, ad esempio “user-8“, il nonce non sarà valido. L’eliminazione dell’account non andrà a buon fine e verrà visualizzata una pagina Errore 403 forbidden . Questo rende molto più difficile per i malintenzionati attaccare i contenuti del tuo sito. 

Sapere che i nonce possono proteggere il tuo sito web è importante, ma devi anche capire come implementarli. Sebbene siano già attivi per le funzionalità predefinite di WordPress, potrebbe essere necessario implementarli manualmente per temi e plugin. 

Come creare un Nonce WordPress

Per creare un nonce, devi aggiungere una funzione al codice del tuo sito web. Tutti i codici di creazione nonce devono essere inseriti nel file functions.php. Per aprire questo file, vai su Aspetto > Editor temi nella dashboard di WordPress. A destra, fai clic su functions.php per aprire l’editor dei file. 

Modifica del file function.php di WordPress

I nonce sono implementati separatamente per URL, form e azioni. Per creare un’action nonce, aggiungi il seguente codice al file:

$nonce= wp_create_nonce('$action'); 

La sezione “$ action” del codice deve essere adattata per riflettere l’azione che si desidera venga verificata dal nonce. Un esempio potrebbe essere l’uso dell’azione “delete-post”, che imposta il nonce per verificare gli utenti che tentano di eliminare i post. 

Per creare un nonce per un URL, è possibile utilizzare il seguente codice :

$nonce= wp_nonce_url();

Tra parentesi, dovrai indicare gli argomenti della funzione . La stringa deve essere specifica per un singolo utente, al fine di migliorare la sicurezza del nonce.

Se desideri creare un nonce per l’eliminazione di un account utente, puoi utilizzare questo snippet :

$nonce= wp_nonce_url($bare_url,’delete-user_’.$user->ID);

WordPress imposterà automaticamente il nome del nonce su “_wpnonce“, ma puoi aggiornarlo aggiungendo il nome scelto alla fine della stringa sopra. 

Per creare un nonce per un modulo, includeri questo codice :

$nonce= wp_nonce_field();

Tra parentesi, dovrai aggiungere una stringa per le azioni dell’utente. Al termine, la funzione crea due campi nascosti nel modulo, con il primo che contiene il valore hash nonce. Il secondo campo è l’URL corrente. La funzione finale dovrebbe assomigliare a questa:

$nonce= wp_nonce_field(‘remove-comment_’.$comment_id);

Questa funzione nonce avrà anche il nome nonce di WordPress predefinito ma che puoi modificare come preferisci.

Verifica di un Nonce

Dopo aver aggiunto un nonce al tuo sito WordPress, è importante verificarlo. Questo garantisce che il nonce funzioni correttamente e che il tuo sito web sia protetto.

I metodi per verificare il nonce per URL e moduli. sono diversi Per verificare un nonce URL, aggiungi il seguente codice al file functions.php:

wp_verify_nonce($nonce, $action);

In questa funzione, regolare “$ nonce” sul nome del nonce che si desidera verificare, ad esempio “delete-user”. Quindi, modifica la stringa “$ action” nel momento specifico in cui nonce viene creato. Quando la funzione viene eseguita, verrà restituito “false” se il nonce non è valido. 

Se il nonce è valido, invece, la funzione restituirà 1 o 2, indica il periodo di tempo del nonce. Un valore uguale a 1 indica che il nonce è stato creato nelle ultime 12 ore. Un valore uguale a 2 indica che il nonce è stato creato oltre 12 ore, ma meno di 24 ore fa. 

Se hai aggiunto un nonce a un modulo, è necessario il seguente codice per verificarlo:

check_admin_referer($action, $nonce);

Se il valore nonce è valido, il modulo funzionerà come previsto. Diversamente, se il nonce non è valido, il browser dell’utente reindirizzerà a una pagina di errore 403 forbidden. 

Crea esperienze digitali sicure sul motore WP

La sicurezza è vitale per un sito web e i nonce aggiungono un ulteriore livello di protezione. Per la loro attuazione, tutto quello che devi fare è aggiungere il codice al file functions.php del tuo tema. Il codice utilizzato varia in base al tipo di nonce che desideri creare e all’azione che vuoi proteggere.

Buon lavoro!