JavaScript, HTML, CSS e... !
4 commenti

Nascondere il codice agli occhi degli utenti

Come proteggere il codice Apps Script in un Foglio di lavoro Google

A differenza dei file Excel, dove il codice in VBA può essere protetto per mezzo di funzionalità previste dallo strumento, in uno Spreadsheet (Foglio di Google) non esistono sistemi integrati che, con la stessa facilità, permettono la protezione del codice Apps Script dagli occhi degli utilizzatori del documento.

Non sono pochi pertanto quelli che si domandano come poter ovviare a questo, definiamolo pure, inconveniente.
Esistono ad ogni modo delle soluzioni nonché workaround per poter ottenere quanto desiderato.

Come prima soluzione da proporre c'è quella di pubblicare lo script come add-on, ovvero come componente aggiuntivo. Durante la fase di pubblicazione è possibile selezionare il tipo di visibilità per l'add-on ovvero, pubblica o privata.
Nel caso di visibilità privata, il componente aggiuntivo, sarà escluso dall'elenco delle add-on nel G Suite Marketplace. Inoltre, a differenza del caso della visibilità pubblica, i tempi di pubblicazione sono relativamente veloci (dai 5 ai 20 minuti) in quanto, in questo caso, non vengono sottoposti al processo di approvazione da parte di Google. È inoltre facile condividere i componenti aggiuntivi con utenti specifici: direttamente dalla dashboard del Chrome Web Store è possibile recuperare l'URL dell'add-on ed attribuirlo ad altre persone o a un gruppo.
Da precisare che, nonostante gli utenti che possono accedere all'add-on sono in grado di ottenere l'URL del progetto Apps Script tramite il file crx di tale add-on (ci sono diverse estensioni per il browser che lo consentono), non potranno accedere al codice del file in quanto quest'ultimo non è condiviso.

Di contro c'è da dire che le add-on hanno delle limitazioni che possono non essere in linea con la logica dell'applicazione che si sta sviluppando. Una di esse è legata al trigger installabile basato sul tempo che, come indicato nella documentazione ufficiale, può essere usato al massimo una volta ogni ora.

Nel caso in cui la pubblicazione come componente aggiuntivo non è un'opzione percorribile, una delle alternative è quella di utilizzare un'applicazione web, utilizzando le Apps Script API o le Google Sheets API.
Il concetto che sta alla base di questo approccio è che, quando gli utenti eseguono una funzione in uno Spreadsheet, la funzione recupera i risultati dalla Web App e li mostra all'intenro del Foglio di calcolo Google. In questo caso, lo Spreadsheet utilizzato dagli utenti ed il progetto distribuito come Web App sono separati, di conseguenza gli utenti non possono vedere lo script dell'applicazione web.

Un altro approccio può essere quello di creare un file e pubblicarlo come Libreria. Tale file conterrà le funzioni dedicate allo Spreadsheet desiderato e sarà distribuito con una versione. Considerando che anche l'utente utilizzatore dovrà avere accesso alla libreria, quantomeno a livello di lettura, sarà in grado di vedere il codice al suo intenro. In questo caso l'idea è quella di rimuovere il contenuto dello script dal e sostituirlo con uno fittizio, dopodiché salvarlo come una nuova versione.
L'utente in questo caso, poiché l'applicazione sta ancora lavorando sulla vecchia versione della libreria, vedrà solo il nuovo codice mentre lo script originale farà il suo lavoro come è stato previsto.

Esistono poi strumenti, disponibili anche online, che minimizzano il codice e/o lo offuscano rendendo le variabili ed il flusso dell'applicazione difficile da interpretare da parte di utente, ma in tal caso, a differenza dei precedenti, il codice che fa girare l'applicazione può essere copiato.

Tags

Michele Pisani

Michele Pisani

Sviluppatore Javascript ed esperto in Digital Analytics

L'esperienza nel settore Digital Analytics unita ad anni di sviluppo in Javascript ha trovato la massima espressione in Google Apps Script che mi ha permesso, con estrema facilità e poche righe di codice, di realizzare potenti applicazioni interattive e processi automatizzati integrati con i prodotti della G Suite.

Come contattarmi
scrivi un commento

4 Commenti

  1. Tuesday, February 26, 2019 alle ore 09:15 Marco

    Molto interessante! Potreste indicarmi se esiste una guida (in questo sito o altrove) un po' più dettagliata sulla procedura oltre a quella ufficiale di Google?

    Rispondi a questo commento
    • Tuesday, February 26, 2019 alle ore 22:53 Michele PisaniAutore

      Ciao Marco,
      di quale procedura parli di preciso? Quanto contenuto in questo articolo non deriva dalla documentazione ufficiale di Google.

      Rispondi a questo commento
  2. Monday, March 23, 2020 alle ore 16:01 Gianni

    Ciao Michele,
    purtroppo ora che la pubblicazione degli addons è stata ristretta al solo G Suite Marketplace non si può più pubblicare l'addon come "privato" per i soli "testers" come era possibile pubblicando via Chrome Web Store.

    Sei a conoscenza di un modo per per pubblicare l'addon come privato (quindi senza passare dalla validazione di google) a utenti che non appartengano alla stessa organizzazione? (replicando gli utenti test della pubblicazione via Chrome Web Store?).

    L'idea che mi è venuta sarebbe quella di pubblicare l'addon attraverso l'account dei testers e "linkare" il progetto al mio script in modo che possano usare l'addon senza vedere il codice. Ho però dei forti dubbi sulla sua fattibilità. Tu cosa ne pensi?

    Rispondi a questo commento
    • Monday, March 23, 2020 alle ore 23:47 Michele PisaniAutore

      Ciao Gianni,
      proprio in questi giorni ho avviato un processo di pubblicazione per un componente aggiuntivo per Google Sheet e ti confermo che come 'tipo di utente' viene data la possibilità di pubblicare solo come Esterno, a meno che non si appartenga ad un'organizzazione.
      Riguardo alla tua idea non saprei sinceramente quale possa essere l'esito, sulla carta può funzionare ma l'unico modo per togliersi il dubbio in questo caso è fare un tentativo e capire se il collegamento che intendi funziona per la tua finalità.

      Rispondi a questo commento

Scrivi un commento

Il tuo indirizzo email non sarà pubblicato.I campi contrassegnati da un * sono obbligatori
Puoi utilizzare i seguenti tag nei commenti:
[bold]testo[/bold] se vuoi evidenziare un testo con il grassetto[code]function helloworld() { }[/code] se vuoi pubblicare una porzione di codice[url]https://www.appsscript.it[/url] se devi riferirti ad un indirizzo web