Java avancé - Maîtrise informatique Programmation du Web et

publicité
Java avancé - Maîtrise informatique
Programmation du Web et sécurité
1. Vous écrivez une application en Java. La classe principale de cette application s'appelle fr.unice.truc.Main.
Cette application charge une classe distante p1.ClasseDistante depuis
un autre ordinateur ; l'adresse de chargement est
http://autreordi.autredomaine.fr/classes/p1/ClasseDistante.class.
Une méthode ecrire(String liste) de cette classe est appelée directement par votre code. Cette méthode ecrire doit écrire des données sur
le disque dur de votre ordinateur dans un chier liste placé sous votre
répertoire HOME. Pour vous rassurer vous voulez autoriser l'application
à écrire dans ce chier liste mais pas ailleurs.
Décrivez précisément ce qu'il faut faire, de la commande à lancer pour
démarrer l'application (vous supposerez qu'il n'y a pas besoin d'indiquer
un classpath particulier) jusqu'à l'écriture des chiers de police de sécurité.
2. Vous modiez le code de votre application. Votre code n'appelle pas directement ClasseDistante mais appelle une méthode m() d'une autre
classe distante AutreClasseDistante placée sur un troisième ordinateur,
et c'est cette méthode m() de AutreClasseDistante qui à son tour appelle la méthode ecrire de ClasseDistante. Dites ce qui va se passer si
vous relancez l'application comme dans la question précédente. Expliquez.
3. Sans donner de détails cette fois-ci dites ce qu'il faut faire pour que votre
application fonctionne correctement comme dans la première question.
Expliquez votre réponse.
4. Comment la méthode m() aurait-elle dû appeler la méthode ecrire pour
que l'application fonctionne dans les mêmes conditions que pour la question 1
1
Correction
1. Il faut
Lancer l'application avec l'option -Djava.security.manager ou au moins
avec un gestionnaire de sécurité approprié sinon l'application étant lancé
par une classe locale aura le droit de tout faire, même si une des classes
vient d'ailleurs.
1
Ajouter ceci dans le chier de police .java.policy placé dans le répertoire
home de l'utilisateur de l'application :
grant codeBase "http://autreordi.autredomaine.fr/classes/*" {
permission java.util.PropertyPermission "user.home", "read";
permission java.io.FilePermission "${user.home}${/}liste", "write";
};
2. L'application ne va plus avoir le droit d'écrire dans le chier liste.
3. Ca va échouer car toutes les classes distantes doivent recevoir l'autorisation. Il faudra donner aussi l'autorisation d'écrire dans liste à la classe
AutreClasseDistante.
4. Elle aurait dû l'appeler avec la méthode doPrivileged.
2
Téléchargement