Sécurité
Introduction
Dans une entreprise, la politique de sécurité globale est définie par l’administrateur système et elle ne peut en aucun cas être outrepassée par le code. L’administrateur fixe des rôles à chacun des utilisateurs et groupes à partir d’Active Directory. De cette sécurité basée sur les rôles résultent des autorisations. Ces autorisations peuvent être impératives, c’est-à-dire que la permission est demandée au moment de l’exécution, ou cela peut être des autorisations déclaratives, c’est-à-dire que l’assemblage va spécifier les permissions requises pour son exécution. En cas de conflit, l’assemblage et donc l’application ne pourront pas s’exécuter.
Les éléments de base
1. L’interface IPermission
Les classes définissant les permissions sont exposées dans l’espace de noms System.Security.Permissions et sont au centre du processus de sécurité. Il existe différentes classes pour différents types de permissions. Par exemple, l’accès au système de fichiers sera géré par la classe FileIOPermission, l’accès aux variables du registre par la classe RegistryPermission et l’accès aux variables d’environnement par la classe EnvironmentPermission.
Toutes ces classes implémentent l’interface IPermission qui implémente les méthodes communes aux permissions :
-
Copy : retourne une copie de l’autorisation en cours.
-
Demand : effectue une vérification des permissions et lève une exception du type SecurityException si les conditions ne sont pas réunies.
-
Intersect : retourne une nouvelle autorisation qui représente l’intersection de l’autorisation en cours et de celle spécifiée en paramètre.
-
IsSubsetOf : retourne une valeur booléenne indiquant si l’autorisation en cours est un sous-ensemble de celle spécifiée en paramètre.
-
Union : retourne une nouvelle autorisation qui représente l’union de l’autorisation en cours et de celle spécifiée en paramètre....
Implémentation de la sécurité
1. La sécurité basée sur les rôles
La sécurité basée sur les rôles permet d’accorder ou de refuser l’accès à une partie de l’application ou des ressources en fonction de l’identité de l’utilisateur. Le principe de base est d’avoir d’un côté un utilisateur et de l’autre une permission. L’accès se fait seulement si l’utilisateur satisfait aux conditions de la permission.
La sécurité permet de facilement gérer l’accès aux différentes parties d’une application. Prenons l’exemple de l’application SelfMailer. Vous pouvez par exemple définir que seul un administrateur peut utiliser le menu Envoyer. Pour réaliser cette tâche, vous devez commencer par créer un nouvel objet PrincipalPermission en spécifiant une identité et/ou un rôle dans le constructeur du formulaire Main :
PrincipalPermission permission = new PrincipalPermission(
@"LAPTOP\hugon",
null);
Vous pouvez ensuite lancer la vérification de la permission en appelant la méthode Demand. Cette méthode génère une exception du type SecurityException si l’utilisateur n’a pas les autorisations nécessaires à la permission :
try
{
permission.Demand();
}
catch (SecurityException ex)
{
this.envoyerToolStripMenuItem.Visible = false;
}
Dans le cas où plusieurs utilisateurs devraient avoir l’autorisation d’accéder à une partie de l’application, il est possible d’utiliser la méthode Union pour créer une nouvelle permission en combinant deux autres :
PrincipalPermission permission1 = new PrincipalPermission( ...
Introduction à la cryptographie
Les données sensibles doivent être sécurisées de manière à ce que seuls les utilisateurs autorisés puissent les consulter. L’encryptage est une manière de sécuriser les informations. Il existe des algorithmes de cryptage symétriques et d’autres, asymétriques. Un algorithme de cryptage symétrique utilise la même clé pour l’encryptage et pour le décryptage tandis qu’un algorithme de cryptage asymétrique utilisera des clés différentes pour l’encryptage et pour le décryptage : une clé publique et une clé privée. Des données peuvent ainsi être encryptées avec la clé privée et décryptées avec la clé publique ou inversement mais jamais avec la même clé. Le Framework .NET contient de nombreuses classes permettant de faire de la cryptographie. Elles sont exposées dans l’espace de noms System.Security.Cryptography. Le hachage est une autre technique de cryptographie, mais son but n’est pas de sécuriser les données mais de garantir leur intégrité. Les algorithmes de hachage ont pour but de créer une valeur de longueur fixe à partir d’une source de longueur variable. Ces algorithmes sont utilisés pour les signatures numériques...