2009-08-25 12 views
7

È sufficiente proteggere un'applicazione Web Java con i diritti dell'utente che sta eseguendo il processo del server delle applicazioni o è ragionevole utilizzare anche SecurityManager con un file dei criteri appropriato?Devo utilizzare Security Manager nelle applicazioni Web Java?

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

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

risposta

9

Mentre io odio di raccomandare sempre non utilizzando una funzione di sicurezza, è la mia opinione che una SecurityManager è più destinato a gestire le situazioni in cui il codice non attendibile o di terze parti è in esecuzione nella JVM. Pensa a applet o a uno scenario di server di app condiviso e ospitato. Se hai il controllo completo sul server delle app e non esegui il codice di qualcun altro, penso che sia ridondante. Abilitare il SecurityManager ha un impatto significativo sulle prestazioni nella mia esperienza.

+0

Nel nostro caso il codice di terze parti sono varie librerie OS conosciute. È piuttosto necessario revisionare ogni riga di codice per verificare se esiste un potenziale codice "cattivo". Mi fido di queste librerie, ma il nostro cliente è un po 'paranoico :) – Kaitsu

+0

Devi stare attento prima di dire che non stai eseguendo il codice di qualcun altro. Ad esempio, gli attacchi XEE (XML External Entity) possono essere utilizzati se si analizza l'XML, ma la maggior parte delle persone direbbe che sono "solo dati". – bgiles

1

Non esiste una semplice risposta sì/no alla domanda, perché dipende in realtà: cosa si desidera proteggere e da che cosa si desidera proteggere?

Ad esempio, ho utilizzato SecurityManager per implementare il filtro IP e consentire solo agli indirizzi IP autorizzati di connettersi alla mia applicazione. Se si desidera disabilitare l'accesso ai file su disco, è possibile che l'esecuzione dell'applicazione come utente con privilegi minori sia la soluzione migliore.

Se non ti fidi affatto dei plug-in di terze parti, ricorda che una volta autorizzata l'esecuzione del codice del plug-in, tale plug-in può mandare in crash l'applicazione se lo desidera anche se usi SecurityManager. Se la tua applicazione carica plugin, forse il plugin di whitelisting e controlla la lista prima di caricare plugin è la soluzione migliore.

Se si decide di utilizzarlo, si verificherà un calo di prestazioni (dal momento che JVM eseguirà più controlli), ma la velocità con cui verrà eseguito dipenderà dal codice/configurazione che eseguirà i controlli. La mia whitelist IP era piuttosto veloce poiché includeva solo la 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 concorrenti (in altre parole, se puoi permettertelo) .

1

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

Utilizzo di un responsabile della sicurezza ha senso solo se la JVM verrà eseguito non attendibile codice, altrimenti è un dolore da configurare, perché dovrete sapere in anticipo quali autorizzazioni è necessario impostare per ogni caratteristica (es: RMI , prese, I/O) e per ogni cliente.

Problemi correlati