Java/Sicurezza

Wikibooks, manuali e libri di testo liberi.

L’ambiente Java fa la supposizione che nulla sia di fiducia, così il compilatore e il sistema run-time implementano degli strati di difesa contro il codice che può essere potenzialmente pericoloso.

In Java esistono tre meccanismi che contribuiscono alla sicurezza:

  1. le caratteristiche della progettazione del linguaggio;
  2. meccanismi di controllo dell'accesso alle risorse locali (file, network, memoria...) da parte dei processi Java;
  3. la firma del codice, che prevede di utilizzare algoritmi crittografici standard per l'autenticazione del codice Java.

Uno dei primi livelli di difesa del compilatore Java è il modello di allocazione della memoria. Prima di tutto, le decisioni in riguardo all’allocazione della memoria non sono prese dal compilatore del linguaggio Java, piuttosto sono rinviate al sistema run-time che è diverso a secondo della piattaforma hardware e software su cui il sistema Java è in esecuzione.
In secondo luogo, Java non ha più il concetto esplicito di puntatore (inteso come in C o C++); il codice Java compilato ha dei riferimenti alla memoria simbolici, riferimenti che sono risolti in indirizzi di memoria reali in fase di esecuzione, dall’interprete Java. I programmatori Java non devono più preoccuparsi di eventuali riferimenti fuori dalla memoria, anche perché l’allocazione della memoria e il modello dei riferimenti è completamente opaco al programmatore ed è controllato completamente da sistema run-time di Java.

La Java Virtual Machine analizza tutto il codice prima di eseguirlo, alla ricerca di puntatori non validi, limiti di array illegali e così via. Parallelemente altri meccanismi tengono sotto controllo la virtual machine.
Quando vengono caricati nella virtual machine, tutti i file di classe vengono sottoposti a una verifica di integrità. Per una maggiore sicurezza, sia il meccanismo di caricatore di classi standard sia uno personalizzato lavorano con un gestore della sicurezza che controlla quali azioni il codice possa eseguire.

Strumenti personali