Dois-je utiliser Security Manager dans les applications Web Java?


Est-il suffisant de sécuriser une application Web Java avec les droits de l'utilisateur qui exécute le processus du serveur d'applications ou est-il également raisonnable d'utiliser SecurityManager avec un fichier de stratégie approprié?

J'ai l'habitude de faire le premier et non le dernier, mais certains clients aimeraient que nous utilisions également SecurityManager qui donnerait explicitement des autorisations à chaque composant tiers pour être sûr qu'il n'y a pas de code maléfique qui se cache là.

J'ai vu un servlet des conteneurs, comme Resin pour proposer de ne pas utiliser SecurityManager pour ralentir les choses. Toutes les pensées?

Author: Jonik, 2009-08-25

3 answers

Bien que je déteste jamais recommander pas en utilisant une fonctionnalité de sécurité, c'est mon avis qu'un SecurityManager est plus destiné à gérer les situations où du code non fiable ou tiers s'exécute dans la JVM. Pensez aux applets ou à un scénario de serveur d'applications hébergé et partagé. Si vous avez un contrôle complet sur le serveur d'applications et que vous n'exécutez pas le code de quelqu'un d'autre, je pense que c'est redondant. Activer le SecurityManager a un impact significatif sur les performances dans mon expérience.

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

Il n'y a pas de réponse simple oui/non à votre question, car cela dépend vraiment: que voulez-vous sécuriser, et de quoi voulez-vous le sécuriser?

Par exemple, j'ai utilisé SecurityManager pour implémenter le filtrage IP et autoriser uniquement les adresses IP sur liste blanche à se connecter à mon application. Si vous souhaitez simplement interdire l'accès aux fichiers disque, peut-être que l'exécution d'une application en tant qu'utilisateur avec des privilèges moindres est une meilleure solution.

Si vous ne faites pas du tout confiance aux plugins tiers, rappelez-vous que une fois que vous autorisez l'exécution du code du plugin, ce plugin peut planter votre application si elle le souhaite même si vous utilisez SecurityManager. Si votre application charge des plugins, peut-être que la liste blanche du plugin et la vérification de la liste avant de charger le plugin sont une meilleure solution.

Si vous décidez de l'utiliser, vous aurez un impact sur les performances (puisque la JVM fera plus de vérifications), mais la vitesse à laquelle elle s'exécutera dépend vraiment de votre code/configuration qui fera les vérifications. Ma liste blanche IP était assez rapide car elle comprenait seule recherche de liste unique; si vos vérifications incluent l'appel du service Web distant et l'accès à la base de données, vous pouvez ralentir beaucoup les choses, mais d'un autre côté, même cela ne devrait pas avoir d'importance si vous avez suffisamment de matériel et peu d'utilisateurs simultanés (en d'autres termes, si vous pouvez vous le permettre).

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

Configurer correctement le gestionnaire de sécurité en java peut être difficile. Par exemple, si vous ne limitez pas le gestionnaire de sécurité lui-même, on peut contourner toute la sécurité simplement en définissant le Gestionnaire de sécurité sur null.

Utiliser un gestionnaire de sécurité n'a de sens que si votre JVM exécute du codenon approuvé , sinon c'est difficile à configurer, car vous devrez savoir à l'avance quelles autorisations vous devez définir pour chaque fonctionnalité (ex: RMI, sockets, E/S) et pour chaque client.

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