Skip to content

API? Cosa sono?

Dalla versione di WordPress 4.4 è stata aggiunta la funzione REST API (REpresentational State Transfer Application Programming Interface). Questa funzione è grandiosa se il tuo sito la usa. 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.

A cosa servono?

Quali informazioni possono essere recuperate dall’API di WordPress? Per impostazione predefinita, chiunque può interrogare in modo anonimo l’API di WordPress in esecuzione sul tuo sito Web WordPress per recuperare informazioni che sono già disponibili pubblicamente, come post, pagine, file multimediali, ecc.

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 implementare una di queste tecniche, assicurati che il tuo sito non necessiti di alcuna REST API. In altre parole, procedi solo se sai cosa stai facendo ;)

La REST API di WordPress pone nuovi rischi per la sicurezza?

La risposta è sì e no. 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 funzione potrebbe comportare nuovi rischi per la sicurezza semplicemente perché alla fine è una possibile fonte aggiuntiva di attacchi a WordPress. E dal punto di vista della sicurezza, più fonti di attacco hai più opzioni avranno gli hacker.

Perché disabilitare la REST API?

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 oEmbed 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 la Rest API di WordPress dall’intestazione HTTP

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 );
// Disable REST API link in HTTP headers
remove_action('template_redirect', 'rest_output_link_header', 11, 0);
// Remove the REST API 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 ;)

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 è quella di non dare accesso alle REST API a meno che non sei 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;
});

Articoli correlati

Autore

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Ultimi articoli aggiornati

Richiedi un preventivo SEO e Google Ads

Porta il tuo sito web al livello successivo con l’expertise di EVE Milano. La nostra agenzia di Search Marketing ha ricevuto oltre 1123 richieste di preventivo, un segnale chiaro della fiducia che imprenditori e manager, come te, ripongono nella nostra specializzazione tecnica e verticale nella SEO e PPC. Se la tua organizzazione cerca competenze specifiche per emergere nei risultati di Google, noi siamo pronti a fornire quel valore aggiunto. Affidati alla nostra esperienza per fare la differenza.
Richiedi un preventivo

Non perderti altre guide, iscriviti per ricevere un avviso mensile con gli aggiornamenti del blog!

Iscriviti alla newsletter!

Informativa sui cookies

Noi e terze parti selezionate utilizziamo cookie o tecnologie simili per finalità tecniche e, con il tuo consenso, anche per le finalità di esperienza e misurazione come specificato nella cookie policy. Puoi liberamente prestare, rifiutare o revocare il tuo consenso, in qualsiasi momento, accedendo al pannello delle preferenze. Il rifiuto del consenso può rendere non disponibili le relative funzioni. Usa il pulsante “Accetta” per acconsentire. Usa il pulsante “Rifiuta” per continuare senza accettare.