Controlli utente per le autorizzazioni host: guida alla transizione

Riepilogo

Cosa cambierà?

A partire da Chrome 70, gli utenti hanno la possibilità di limitare l'accesso degli host delle estensioni a un elenco personalizzato di o configurare estensioni in modo che venga richiesto un clic per poter accedere alla pagina corrente.

Quali API sono interessate?

Questa modifica interessa tutte le API interessate dalle autorizzazioni host specificate nel e script di contenuti. Le API che richiedono autorizzazioni dell'host includono webRequest, cookie, tabs.executeScript() e tabs.insertCSS() ed esecuzione di multiorigine richieste, ad esempio tramite un'API XMLHTTPRequest o fetch().

Limitazione dell'accesso

In che modo l'utente può limitare l'accesso?

Gli utenti possono scegliere di consentire l'esecuzione dell'estensione al clic, su un insieme specifico di siti o su tutti siti richiesti. Queste opzioni vengono presentate agli utenti nella pagina chrome://extensions, nonché nel menu contestuale dell'estensione.

Uno screenshot dei controlli del menu contestuale per le autorizzazioni dell'host di runtime.
            incluse le opzioni per eseguire l'estensione al clic, su un sito specifico o su tutti i siti.

Che cosa succede se un utente sceglie di pubblicare la mia estensione "al clic"?

Fondamentalmente, l'estensione si comporta come se utilizzasse l'autorizzazione activeTab. L'estensione è concesso l'accesso temporaneo a qualsiasi host su cui l'utente fa clic sull'estensione, se tale host è stato richiesto l'estensione (e non è un sito con limitazioni, come chrome://settings). Se impostata per essere eseguita al clic, Chrome contrassegna l'estensione con un cerchio e un'ombra (vedi di seguito) per indicare che che richiedono l'accesso su un determinato sito.

Uno screenshot dei badge aggiunti da Chrome all'icona dell'estensione nella barra degli strumenti.

Che cosa succede se un utente sceglie di pubblicare la mia estensione su siti specifici?

L'estensione può essere pubblicata automaticamente su tutti i siti scelti dall'utente e può accedere ai sito senza ulteriori azioni dell'utente. Su altri siti richiesti dalla tua estensione, ma non dall'utente concedi l'autorizzazione, il comportamento è lo stesso che se l'utente avesse impostato l'esecuzione dell'estensione al clic.

Che cosa succede se un utente sceglie di pubblicare la mia estensione su tutti i siti?

L'estensione può accedere automaticamente a qualsiasi sito richiesto nel manifest.

Comportamenti delle API

API Web Request

L'estensione può comunque intercettare, modificare e bloccare tutte le richieste provenienti dai siti a cui ha accesso. Per siti a cui l'estensione non ha accesso, Chrome contrassegna l'estensione per indicare che l'estensione richiede l'accesso alla pagina. L'utente può quindi concedere l'accesso all'estensione. Chrome quindi chiede all'utente di aggiornare la pagina per consentire all'estensione di intercettare le richieste di rete.

Script dei contenuti, tabs.executeScript(), tabs.insertCSS()

L'estensione può comunque inserire automaticamente script e fogli di stile per tutti i siti a cui ha accesso a. Per i siti a cui l'estensione non ha accesso, Chrome contrassegna l'estensione per indicare che l'estensione richiede l'accesso alla pagina. L'utente può quindi concedere l'accesso all'estensione. Se lo script dei contenuti è stato impostato per essere inserito a document_idle, lo script verrà inserito immediatamente. Altrimenti, Chrome chiede all'utente di aggiornare la pagina per consentire all'estensione di inserire script in precedenza caricamento pagina (all'inizio del documento o alla fine del documento). I callback per tabs.executeScript() e I metodi tabs.insertCSS() vengono richiamati solo se l'utente concede l'accesso al sito.

Cookie e XHR della pagina in background

L'estensione può comunque leggere e modificare qualsiasi cookie da ed eseguire un XHR multiorigine sui siti che la a cui ha accesso. Poiché non esiste una scheda associata alla pagina di un'estensione che accede alla cookie o XHR a un altro host, Chrome non contrassegna l'estensione per indicare all'utente che l'estensione richiede l'accesso a un sito. Stai tentando di accedere a un cookie per un altro sito o di creare XHR multiorigine non riuscirà con un errore come se il manifest dell'estensione non includeva l'host autorizzazione. In questi casi, ti invitiamo a usare autorizzazioni facoltative per consentire all'utente per concedere l'accesso al runtime a siti diversi.

L'esempio seguente illustra come potrebbe funzionare per l'API dei cookie.

Prima:

{
  ...
  "permissions": ["cookies", "https://example.com"]
}
chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                    function(cookie) {
                      // Use the cookie.
                    });

Dopo:

{
  ...
  "permissions": ["cookies"],
  "optional_permissions": ["https://example.com"]
}
// Note: permissions.request() requires a user gesture, so this
// may only be done in response to a user action.
chrome.permissions.request(
    {origins: ['https://example.com']},
    function(granted) {
      if (granted) {
        chrome.cookies.get({url: 'https://example.com', name: 'mycookie'},
                            function(cookie) {
                              // Use the cookie.
                            });
      } else {
        // Handle grant failure
      }
    });

Migrazione

Quali sono le best practice per evitare un impatto negativo?

Le estensioni possono usare le API per le autorizzazioni facoltative, activeTab e declarativeContent di seguire le best practice. Le autorizzazioni facoltative vengono concesse in fase di runtime e consentono all'estensione di richiedere un accesso specifico a un sito. L'autorizzazione activeTab non è interessata e le estensioni se lo utilizzi, continuerà a funzionare normalmente. L'API declarativeContent sostituisce molte esigenze per inserire script in ogni pagina.

Che cosa succederà ai miei attuali utenti impostazioni?

Questa modifica non avrà effetto immediato sulle autorizzazioni attuali concesse alla tua estensione. Vale a dire che continuerà a funzionare come prima a meno che l'utente non intervenga per limitare i siti autorizzati ad accedere. Nelle versioni future, Chrome fornirà agli utenti più controlli per regolare impostazioni.

Come faccio a verificare se la mia estensione è autorizzata a essere eseguita su un sito?

Puoi utilizzare l'API permissions.contains() per verificare se la tua estensione è stata a una determinata origine.