Guida Html5 la tua risorsa web sul nuovo markup html5 il linguaggio javascript e lo sviluppo di giochi su browser.
TUTORIALS

Sicurezza Javascript - Wrapping del codice in una funzione anonima

- 13-06-2014 - Letture: 927

Limitiamo la visibilità di funzioni e variabili del nostro codice al mondo esterno

Sicurezza Javascript - Wrapping del codice in una funzione anonima

Proseguiamo il nostro studio sulla sicurezza con qualcosa di più raffinato ed efficace cercando di impedire l'accesso al gioco limitando la visibilità di funzioni e variabili del nostro codice al mondo esterno. 
Come spiegato in precedenza se una proprietà o un metodo sono definiti al di fuori di una funzione essi sono considerati globali e quindi accessibili dall'esterno, si pensi ad esempio alla console javascript del browser o a file inclusi nel nostro codice da malintenzionati. 

In Javascript, è possibile nidificare le funzioni, pensiamo a come viene dichiarato un oggetto:

function funzioneEsterna() {
   function funzioneInterna() {
      // codice 
   }
}

Se prendiamo in esame l'esempio precedente vediamo che è possibile chiamare funzioneEsterna(), ma la visibilità della funzioneInterna() si limita al campo di applicazione della funzioneEsterna(), ciò significa che funzioneInterna è un metodo privato di funzioneEsterna(). 

Ne deriva sostanzialmente lo stesso principio delle variabili in Javascript:

var variabileGlobale;

function funzioneEsterna() {
   var variabileLocale;
}

Che in termini di funzioni corrisponde a:

function funzioneGlobale() {
    
   var funzioneLocale1 = function() {
	   // Sono una funzione anonima ma funzioneLocale1 è un riferimento a me
   };

   function funzioneLocale2() {
      // Sono una funzione nominata
   }
}

Nello scenario precedente, è possibile chiamare funzioneGlobale() da qualsiasi punto del codice, ma non si può chiamare funzioneLocale1 o funzioneLocale2.

Quello che facciamo scrivendo (function () {... codice ...}) (), è inserire il codice all'interno di una funzione letterale (nel senso che tutto l 'oggetto è in realtà una funzione). Dopo di che, si sta auto-richiamando la funzione (le parentesi () alla fine). 
Il grande vantaggio di questo metodo, come ho detto prima, è che si possono avere metodi, funzioni e proprietà private:

(function() {
   var variabilePrivata;

   function funzionePrivata() {
     // codice
   }
})()

La cosa interessante è che si possono anche definire cose all'interno ed esporle al mondo esterno in questo modo: 

var myPlugin = (function() {
 var variabilePrivata;

 function funzionePrivata() {
 }

 return {
    funzionePubblica1: function() {
    },
    funzionePubblica2: function() {
    }
 }
})()

In questo caso sarà possibile richiamare myPlugin.funzionePubblica1(), ma non sarà possibile accedere a funzionePrivata().

Articoli correlati
Loading comments
ebook sviluppare giochi in html5 e javascript
Il sito Guida HTML5 è stato realizzato da TheArchitect
Copyright © 2017 All Rights Reserved -
Nome e Cognome
Email valida
Username
Password
* Cliccando su REGISTRATI accetti le nostre regole sulla privacy
ATTENZIONE: controllare sempre la cartella spam nella casella di posta, inquanto è possibile che alcuni provider inseriscano automaticamente la mail di attivazione in questa cartella.

CHIUDI
X

Password dimenticata ? Inserisci il tuo indirizzo email e ti invieremo i dati di accesso

Email valida
ATTENZIONE: controllare sempre la cartella spam nella casella di posta, inquanto è possibile che alcuni provider inseriscano automaticamente la mail di attivazione in questa cartella.

CHIUDI
X
Powered by: World(129)