Dovrei usare Security Manager nelle applicazioni Web Java?


È sufficiente proteggere un'applicazione Web Java con i diritti dell'utente che sta eseguendo il processo application Server o è ragionevole utilizzare SecurityManager con un file di policy adatto?

Ho usato per fare il primo e non il secondo, ma alcuni clienti vorrebbero che usassimo anche SecurityManager che darebbe esplicitamente autorizzazioni a ogni componente di terze parti per essere sicuri che non ci sia alcun codice malvagio in agguato lì.

Ho visto alcuni Servlet contenitori, come Resin per proporre di non utilizzare SecurityManager per rallentare le cose. Qualche idea?

Author: Jonik, 2009-08-25

3 answers

Mentre odio raccomandare mai non utilizzando una funzionalità di sicurezza, è mia opinione che un SecurityManager sia più destinato a gestire situazioni in cui il codice non attendibile o di terze parti è in esecuzione nella JVM. Pensa alle applet o a uno scenario di server di app condiviso in hosting. Se hai il controllo completo sul server dell'app e non stai eseguendo il codice di nessun altro, penso che sia ridondante. Abilitare SecurityManager ha un impatto significativo sulle prestazioni nella mia esperienza.

 9
Author: Sean Owen, 2009-08-25 09:57:31

Non esiste una semplice risposta sì/no alla tua domanda, perché dipende davvero: cosa vuoi proteggere e da cosa vuoi proteggerlo?

Ad esempio, ho utilizzato SecurityManager per implementare il filtro IP e consentire solo gli indirizzi IP whitelist per connettersi alla mia applicazione. Se vuoi solo impedire l'accesso ai file su disco, forse l'esecuzione di un'applicazione come utente con privilegi minori è una soluzione migliore.

Se non ti fidi affatto dei plugin di terze parti, ricorda che una volta che si consente l'esecuzione del codice del plugin, tale plugin può bloccare l'applicazione se lo desidera anche se si utilizza SecurityManager. Se la tua applicazione carica i plugin, forse il plugin di whitelist e controllare l'elenco prima di caricare il plugin è la soluzione migliore.

Se decidi di usarlo, avrai un successo in termini di prestazioni (poiché JVM farà più controlli), ma la velocità con cui verrà eseguito dipende davvero dal tuo codice/configurazione che eseguirà i controlli. La mia whitelist IP è stata piuttosto veloce poiché includeva solo ricerca di una singola lista; se i tuoi controlli includono il richiamo del servizio Web remoto e l'accesso al database, puoi rallentare molto le cose, ma d'altra parte, anche questo non dovrebbe importare se hai abbastanza hardware e pochi utenti simultanei (in altre parole, se puoi permettertelo).

 1
Author: Domchi, 2009-08-25 10:27:42

Configurare correttamente Security Manager in java può essere difficile. Ad esempio, se non si limita il gestore di sicurezza stesso, è possibile ignorare tutta la sicurezza semplicemente impostando il Gestore di sicurezza su null.

Usare un security manager ha senso solo se la tua JVM eseguirà untrusted codice, altrimenti è un problema da configurare, perché dovrai sapere in anticipo quali autorizzazioni devi impostare per ogni funzionalità (es: RMI, socket, I/O) e per ogni client.

 1
Author: Miguel Ping, 2009-08-25 11:09:26