Eccezione del controllo di accesso per la sicurezza Java 2

Il comportamento di sicurezza di Java™ 2 è specificato dalla relativa politica di sicurezza. La politica di sicurezza è una matrice di controllo degli accessi che specifica a quali risorse di sistema possono accedere determinate basi di codice e chi deve firmarle. La politica di sicurezza Java 2 è dichiarativa e viene applicata da java.security.AccessController.checkPermission metodo.

L'esempio seguente illustra l'algoritmo per il java.security.AccessController.checkPermission metodo. Per l'algoritmo completo, fare riferimento all'algoritmo di autorizzazione del controllo di sicurezza Java 2 nell'articolo Sicurezza: risorse per l'apprendimento.

io = m;
mentre (i > 0) {
se (il dominio del chiamante non dispone dell'autorizzazione)
lancia AccessControlException;
altrimenti se (il chiamante è contrassegnato come privilegiato)
ritorno;
io = io - 1;
};

L'algoritmo richiede che tutte le classi o i chiamanti sullo stack di chiamate dispongano delle autorizzazioni quando a java.security.AccessController.checkPermission viene eseguito il metodo o la richiesta viene rifiutata e a java.security.AccessControlException viene creata un'eccezione. Tuttavia, se il chiamante è contrassegnato come privilegiato e alla classe (chiamante) vengono concesse queste autorizzazioni, l'algoritmo restituisce un risultato e non attraversa l'intero stack di chiamate. Le classi successive (chiamanti) non necessitano della concessione dell'autorizzazione richiesta.

UN java.security.AccessControlException viene creata un'eccezione quando ad alcune classi nello stack di chiamate mancano le autorizzazioni richieste durante un'operazione java.security.AccessController.checkPermission metodo. Due possibili soluzioni al java.security.AccessControlException eccezione sono le seguenti:
  • Se l'applicazione chiama un'API Java 2 protetta con sicurezza, concedere l'autorizzazione richiesta alla politica di sicurezza Java 2 dell'applicazione. Se l'applicazione non chiama direttamente un'API Java 2 protetta dalla sicurezza, l'autorizzazione richiesta risulta dall'effetto collaterale dell'accesso delle API di terze parti alle risorse Java 2 protette dalla sicurezza.
  • Se all'applicazione viene concessa l'autorizzazione richiesta, ottiene più accesso del necessario. In questo caso, è probabile che il codice di terze parti che accede alla risorsa protetta da sicurezza Java 2 non sia contrassegnato correttamente come privilegiato.

Esempio di stack di chiamate

Questo esempio di stack di chiamate indica dove il codice dell'applicazione utilizza una libreria di utilità API di terze parti per aggiornare la password. Il seguente esempio viene presentato per illustrare il punto. La decisione su dove contrassegnare il codice come privilegiato dipende dall'applicazione ed è unica in ogni situazione. Questa decisione richiede una conoscenza approfondita del dominio e competenze in materia di sicurezza per esprimere il giudizio corretto. Su questo argomento sono disponibili numerose pubblicazioni e libri ben scritti. Si consiglia di fare riferimento a questi materiali per informazioni più dettagliate.
Questo esempio di stack di chiamate indica dove il codice dell'applicazione utilizza una libreria di utilità API di terze parti per aggiornare la password. Il seguente esempio viene presentato per illustrare il punto. La decisione su dove contrassegnare il codice come privilegiato dipende dall'applicazione ed è unica in ogni situazione. Questa decisione richiede una conoscenza approfondita del dominio e competenze in materia di sicurezza per esprimere il giudizio corretto.

Puoi usare il PasswordUtil utilità per modificare la password di un utente. L'utilità digita due volte la vecchia password e la nuova password per garantire che venga inserita la password corretta. Se la vecchia password corrisponde a quella memorizzata nel file delle password, la nuova password viene memorizzata e il file delle password viene aggiornato. Supponiamo che nessuno degli stack frame sia contrassegnato come privilegiato. Secondo il java.security.AccessController.checkPermission algoritmo, l'applicazione fallisce a meno che a tutte le classi nello stack di chiamate non venga concessa l'autorizzazione di scrittura sul file delle password. L'applicazione client non dispone dell'autorizzazione per scrivere direttamente nel file delle password e per aggiornare il file delle password a piacimento.

Tuttavia, se il PasswordUtil.updatePasswordFile contrassegna il codice che accede al file delle password come privilegiato, quindi l'algoritmo di controllo dei permessi non verifica l'autorizzazione richiesta dalle classi che chiamano thePasswordUtil.updatePasswordFile metodo per l'autorizzazione richiesta purché il file PasswordUtil alla classe viene concessa l'autorizzazione. L'applicazione client può aggiornare correttamente una password senza concedere l'autorizzazione per scrivere nel file delle password.

La capacità di contrassegnare il codice come privilegiato è molto flessibile e potente. Se questa capacità viene utilizzata in modo errato, la sicurezza complessiva del sistema può essere compromessa e possono essere scoperte falle di sicurezza. Utilizza la possibilità di contrassegnare attentamente il codice come privilegiato.

Risoluzione al java.security.AccessControlException eccezione

Come descritto in precedenza, sono disponibili due approcci per risolvere a java.security.AccessControlException eccezione. Giudicare queste eccezioni individualmente per decidere quale delle seguenti soluzioni è la migliore:
  1. Concedere l'autorizzazione mancante all'applicazione.
  2. Contrassegnare un codice come privilegiato, dopo aver considerato i problemi e i rischi.