Il est facile de prendre du temps pour apprendre quelque chose entre les lourdes tâches de développement. J'ai découvert qu'il existe plusieurs exemples de contenu System.Security dans la machine. Je n'ai jamais utilisé cet espace de noms auparavant, je l'ai donc simplement utilisé pour en savoir plus. Comme il ne s'agit pas d'une étude systématique, elle n'est pas facile à organiser. Après réflexion, je vais l'expliquer avec des exemples.
1. Définissez l'autorisation
1[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
Application de classe 2public : System.Windows.Forms.Form
3{
4 //omis
5}
FileIOPermissionAttribute est défini dans System.Security.Permissions. Il hérite de SecurityAttribute. Dans cet exemple, il est nécessaire d'avoir des autorisations en écriture sur le fichier C:temp.txt lors de l'utilisation de la classe App.
La documentation du framework .net dit ceci à propos des exigences de sécurité : "Pour garantir que seuls les appelants disposant d'autorisations spécifiques peuvent appeler votre code, vous pouvez déclarer ou imposer que les appelants de votre code disposent d'autorisations spécifiques. Ou d'un ensemble d'autorisations. Les exigences entraînent le runtime pour effectuer un contrôle de sécurité, appliquant ainsi des restrictions sur le code appelant. Pendant le contrôle de sécurité, le runtime parcourt la pile d'appels, vérifie les autorisations de chaque appelant dans la pile et détermine si les autorisations demandées ont été accordées. appelant. S'il s'avère qu'un appelant ne dispose pas des autorisations requises, le contrôle de sécurité échoue et une SecurityException est levée.
Dans l'exemple, les autorisations sont déclarées. SecurityAction.Demand peut agir sur une classe ou une méthode, dans ce cas il agit sur une classe. Write est l'une des propriétés de FileIOPermission. Les autres propriétés couramment utilisées incluent Read, Append, All, etc.
Il existe également certaines valeurs dans l'énumération SecurityAction qui agissent sur l'assembly. Par exemple, l'exemple suivant :
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum est l'autorisation minimale pour que la requête s'exécute. Cette ligne nécessite que l'assembly autorise les appels au code non managé.
En plus de la méthode déclarative, vous pouvez également utiliser la méthode obligatoire. Le code suivant :
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2essais
3{
4 filePerm.Demand();
5
6 // Le code pour accéder au fichier va ici
7}
8catch (exception de sécurité sauf exception)
9{
10 MessageBox.Show (sauf.Message);
11 retour;
12}
13
2. Gestion des rôles des utilisateurs
La gestion des utilisateurs et de leurs rôles est utilisée dans de nombreux programmes. De nos jours, asp.net 2.0 a considérablement amélioré cet aspect, et les développeurs peuvent créer de très bonnes applications sans grande connaissance de la technologie. Cependant, pour les applications Windows Form, de nombreux emplacements doivent encore être définis par les programmeurs eux-mêmes.
En supposant que nous connaissons déjà le nom d'utilisateur et les rôles auxquels il appartient, nous pouvons définir le principal du thread actuel comme ceci :
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = new GenericPrincipal(genIdent, rôles);
3Thread.CurrentPrincipal = genPrin;
4
Nous disposons ensuite de trois façons de vérifier les rôles des utilisateurs.
La première méthode consiste à utiliser la méthode GenericPrincipal.IsInRole :
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal ;
2
3if (currentPrin != null && currentPrin.IsInRole("Manager"))
4{
5 //omis
6}
7
La deuxième méthode consiste à utiliser la classe PrincipalPermission, qui est similaire à la méthode obligatoire dans le paramètre d'autorisation :
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3essais
4{
5 prinPerm.Demand();
6
7 //faire quelque chose
8}
9attraper
10{
11 //gestion des erreurs
12}
La troisième méthode est similaire à la méthode de déclaration dans le paramètre d'autorisation :
1private void DecPermButton_Click(object sender, System.EventArgs e)
2{
3 essais
4 {
5 performManagerAction();
6 // faire quelque chose
7}
8 prises
9 {
10 // gestion des erreurs
11 }
12}
13
14[PrincipalPermission(SecurityAction.Demand, Role="Manager")]
15void performManagerAction()
16{
17}
Un autre élément important en matière de sécurité est le cryptage. Je n’ai pas le temps d’écrire aujourd’hui, j’en parlerai un autre jour.