Disabilitare Rest API WordPress vediamo come fare, partiamo dal presupposto che questa funzionalità è stata introdotta dalla versione di WordPress 4.4.
Le Rest API se utilizzate sono un ottima funzionalità per il tuo sito web, ma in caso contrario sarebbe meglio rimuovere gli elementi che vengono aggiunti in tutte le pagine del sito web e che devono essere caricati ad ogni pageview.
La cosa spiacevole è che la REST API sono state attivate in automatico su tutti i siti WordPress, anche se solo una piccola percentuale le utilizza davvero. Questo tutorial spiega come disattivare la REST API.
Sommario
Rest API WordPress: a cosa servono
La REST API di WordPress possono anche essere utilizzate per recuperare e aggiornare le informazioni del profilo utente o un post. Questi compiti possano essere eseguiti solo dopo l’autenticazione. Pertanto, nel concetto, la REST API WordPress consente la stessa funzionalità di una normale installazione di WordPress senza la necessità di avere un’interfaccia human friendly.
La REST API consentono agli sviluppatori di connettersi più facilmente con il back-end di WordPress, è un metodo standardizzato per la connessione. Con questa funzione è possibile ottenere le informazioni di WordPress tramite delle chiamate HTTPS a degli endpoint predefiniti che genereranno un file di ritorno in formato JSON con tutte le informazioni richieste. Tuttavia, questo sistema aggiunge anche l’intestazione seguente al tuo sito Web Worpress:
Link: <http://esempio.it/wp-json/>; rel=”https://api.w.org/”
Lo stesso riferimento viene inserito nella pagina HTML, inutile quando non si sfruttano queste API.
<link rel=’https://api.w.org/’ href=’https://esempio.it/wp-json/’ />
Nota: prima di disabilitare Rest API WordPress assicurati che il tuo sito non necessiti di alcuna REST API. In altre parole, procedi solo se sai cosa stai facendo.
Rischi per la sicurezza?
No perché le informazioni disponibili tramite la REST API di WordPress sono già disponibili al pubblico tramite altri mezzi, come il sito Web stesso e gli RSS. L’unica differenza tra il front-end del sito web, RSS e l’API REST è il modo in cui vengono presentati i dati.
Questa funzionalità potrebbe portare dei rischi per la sicurezza del tuo sito web solo dal punto di vista di un altra fonte aggiuntiva di attacchi a WordPress. E dal punto di vista della sicurezza, più fonti di attacco hai più opzioni avranno gli hacker.
Come rendere sicuro WordPress. 20 regole da seguire nel 2018.
Perché disabilitare Rest API WordPress?
Perché consiglio di disattivare questa funzione? Poiché non tutti utilizzano o desiderano la WP REST API, quindi le intestazioni di collegamento ed i marcatori correlati non sono sempre necessari. Ad esempio, nessuno dei miei siti utilizza una delle REST API. Mi piace mantenere le cose leggere, veloci e pertinenti. Un modo per farlo è disabilitare il codice inutile.
Panoramica del tutorial
In questo articolo viene illustrato come disattivare tre elementi di codice che WordPress aggiunge alle pagine front-end:
- Collegamento REST API
- Collegamenti di scoperta oEmbed
- REST API nell’intestazione HTTP
Onestamente non sono sicuro se i collegamenti Embed siano considerati parte dell’API REST, ma sembrano simili, appaiono nella stessa posizione e sono stati introdotti contemporaneamente alle altre REST, quindi lo includerò.
Disabilitare Rest API WordPress.
Il tuo sito non usa la REST API? Disabilita questa funzione inserendo questo script nel file functions.php
/* Remove JSON API links in header html
*/ function remove_json_api ()
{ // Disable handling of internal embeds in oembed/1.0/proxy REST route.
add_filter( 'oembed_response_data', 'disable_embeds_filter_oembed_response_data' );
// Remove the REST API lines from the HTML Header
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'wp_head', 'wp_oembed_add_discovery_links', 10 );
// Disabilitare Rest API WordPress link in HTTP headers
remove_action('template_redirect', 'rest_output_link_header', 11, 0);
// Rimuovere/Disabilitare Rest API WordPress endpoint.
remove_action( 'rest_api_init', 'wp_oembed_register_route' );
// Turn off oEmbed auto discovery.
add_filter( 'embed_oembed_discover', '__return_false' );
// Don't filter oEmbed results.
remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );
// Remove oEmbed-specific JavaScript from the front-end and back-end.
remove_action( 'wp_head', 'wp_oembed_add_host_js' );
add_filter( 'tiny_mce_plugins', 'disable_embeds_tiny_mce_plugin', 1 );
// Remove all embeds rewrite rules.
add_filter( 'rewrite_rules_array', 'disable_embeds_rewrites' );
// Remove filter of the oEmbed result before any HTTP requests are made.
remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
// Load block editor JavaScript.
add_action( 'enqueue_block_editor_assets', 'disable_embeds_enqueue_block_editor_assets' );
// Remove wp-embed dependency of wp-edit-post script handle.
add_action( 'wp_default_scripts', 'disable_embeds_remove_script_dependencies'); }
add_action( 'after_setup_theme', 'remove_json_api' );
Verifica le modifiche
Prima di salvare il file functions.php apri una pagina del sito (una vale l’altra) e visualizza il codice. Ora salva il file functions.php e apri in una nuova finestra la stessa pagina aperta in precedenza e visualizza il codice sorgente. Confronta le due pagine, hai notato cosa è sparito?
Ore fai la stessa cosa con l’intestazione HTTP, qui trovi un tool gratuito.
Il link del tool che ti consiglio di utilizzare è anche la fonte di questo post quindi puoi andare tranquillo.
Update 201806
Qualche giorno fa sono finito su questa pagina dove i developer di WordPress si esprimono circa la rimozione o meno delle REST API. Per farla breve gli sviluppatori consigliano di NON disabilitare le REST API perché in future versioni di WordPress potrebbero essere necessarie per il normale funzionamento del CMS.
Una proposta valida è disabilitare Rest API WordPress ma permettere il loro funzionamento a meno che non sei un utente loggato:
add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
}
return $result;
});
Conclusione
Abbiamo visto come disabilitare le Rest APi WordPress. Prima di eseguire i passaggi indicati fai un backup del tuo sito web, ti basterebbe anche solo il file functions.php
A dimenticavo, tali modifiche vanno salvate nel file functions.php del tema child e non del tema padre, altrimenti al prossimo aggiornamento del tuo template perderai le modifiche.
Se non hai un tema child installato segui questa guida per crearlo fin da subito e perché crearlo.
Potrebbero interessarti altre guide, dai uno sguardo.