Pour chaque action « critique », la machine virtuelle Java vérifie le le programme est autorisé à l’effectuer
Actions critiques :
System.getProperty
) comme le répertoire principal de l’utilisateurjava.security.Permission
Par défaut, ces vérifications sont supprimées pour plus d’efficacité
On met en place le système de vérification pour se protéger de programmes externes :
URLClassLoader
par exemple)Ce système ne sert qu’à protéger l’utilisateur mais pas à contraindre l’utilisation d’un programme par l’utilisateur (il faudrait plutôt un système de DRM pour cela)
Soit en ligne de commande :
-Djava.security.manager -Djava.security.policy=
policy file
Soit de manière programmatique :
System.setSecurityManager(new SecurityManager())
Écrire un sous-classe de SecurityManager
Il suffit de redéfinir la méthode checkPermission
pour décider si la demande est autorisée.
Thread.currentThread
)C’est la méthode la plus simple mais demande d’écrire un code très critique
En utilisant le SecurityManager
par défaut, on utilise la système de politique de sécurité de Java
Policy
Les permissions sont accordées selon :
codeBase
signedBy
ou principal
Quand la machine virtuelle vérifie un droit d’accès, elle vérifie que tout le code de la pile d’appel possède ce droit d’accès, depuis main
jusqu’au code qui demande la vérification
On peut arrêter la remontée dans le pile d’appel avec AccessControler.doPrivileged
Le problème de ce système est que les choses compliquées ne marche pas comme indiquées
On peut demander le debugging avec -Djava.security.debug
Pour ne pas avoir de difficultés, se contenté de :
codeBase
: mettre les classes privilégiées dans un jar et le reste dans un autreRéaliser le tutoriel sur les politiques de securité