Es ist leicht, sich zwischen den schweren Entwicklungsaufgaben etwas Zeit zu nehmen, um etwas zu lernen. Ich habe festgestellt, dass es in der Maschine mehrere Beispiele für System.Security-Inhalte gibt. Ich habe diesen Namespace noch nie verwendet, also habe ich ihn nur verwendet, um mehr darüber zu erfahren. Da es sich nicht um eine systematische Studie handelt, ist sie nicht einfach zu organisieren. Nachdem ich darüber nachgedacht habe, werde ich sie anhand von Beispielen erläutern.
1. Berechtigung 1 festlegen
[FileIOPermission(SecurityAction.Demand, Write= "C:\temp.txt")]
2öffentliche Klassen-App: System.Windows.Forms.Form
3{
4 //weggelassen
5}
FileIOPermissionAttribute ist in System.Security.Permissions definiert. Es erbt von SecurityAttribute. In diesem Beispiel sind Schreibberechtigungen für die Datei C:temp.txt erforderlich, wenn die App-Klasse verwendet wird.
In der .net-Framework-Dokumentation heißt es zu den Sicherheitsanforderungen: „Um sicherzustellen, dass nur Aufrufer, denen bestimmte Berechtigungen erteilt wurden, Ihren Code aufrufen können, können Sie deklarieren oder erzwingen, dass Aufrufer Ihres Codes über bestimmte Berechtigungen verfügen. Oder einen Berechtigungssatz. Anforderungen verursachen.“ Die Laufzeit führt eine Sicherheitsprüfung durch und erzwingt so Einschränkungen für den aufrufenden Code. Während der Sicherheitsprüfung durchläuft die Laufzeit die Berechtigungen jedes Aufrufers im Stapel und stellt fest, ob die angeforderten Berechtigungen erteilt wurden Wenn festgestellt wird, dass ein Anrufer nicht über die erforderlichen Berechtigungen verfügt, schlägt die Sicherheitsüberprüfung fehl und es wird eine SecurityException ausgelöst.
Im Beispiel werden Berechtigungen deklariert. SecurityAction.Demand kann auf eine Klasse oder Methode einwirken, in diesem Fall auf eine Klasse. Write ist eine der Eigenschaften von FileIOPermission. Weitere häufig verwendete Eigenschaften sind Read, Append, All usw.
Es gibt auch einige Werte in der SecurityAction-Enumeration, die auf die Assembly wirken. Beispielsweise das folgende Beispiel:
[assembly:SecurityPermission(SecurityAction.RequestMinimum,UnmanagedCode=true)]
SecurityAction.RequestMinimum ist die Mindestberechtigung für die Ausführung der Anforderung. Diese Zeile erfordert, dass die Assembly Aufrufe von nicht verwaltetem Code zulässt.
Neben der deklarativen Methode können Sie auch die obligatorische Methode verwenden. Der folgende Code:
1FileIOPermission filePerm = new FileIOPermission(FileIOPermissionAccess.AllAccess, "C:\temp.txt");
2Versuchen Sie es
3{
4 filePerm.Demand();
5
6 // Code für den Zugriff auf die Datei steht hier
7}
8catch(SecurityExceptionexcep)
9{
10 MessageBox.Show (excep.Message);
11 Rückkehr;
12}
13
2. Benutzerrollenverwaltung
Die Verwaltung von Benutzern und deren Rollen wird in vielen Programmen eingesetzt. Heutzutage hat asp.net 2.0 diesen Aspekt erheblich verbessert, und Entwickler können sehr gute Anwendungen erstellen, ohne viel über Technologie zu wissen. Allerdings müssen bei Windows Form-Anwendungen noch viele Stellen vom Programmierer selbst festgelegt werden.
Vorausgesetzt, dass wir den Benutzernamen und die Rollen, zu denen er gehört, bereits kennen, können wir den Principal des aktuellen Threads wie folgt festlegen:
1GenericIdentity genIdent = new GenericIdentity(userName);
2GenericPrincipal genPrin = new GenericPrincipal(genIdent, Roles);
3Thread.CurrentPrincipal = genPrin;
4
Dann haben wir drei Möglichkeiten, Benutzerrollen zu überprüfen.
Die erste Methode besteht darin, die GenericPrincipal.IsInRole-Methode zu verwenden:
1GenericPrincipal currentPrin = Thread.CurrentPrincipal as GenericPrincipal;
2
3if (currentPrin != null && currentPrin.IsInRole("Manager"))
4{
5 //weggelassen
6}
7
Die zweite Methode besteht darin, die Klasse PrincipalPermission zu verwenden, die der obligatorischen Methode bei der Berechtigungseinstellung ähnelt:
1PrincipalPermission prinPerm = new PrincipalPermission(null, "Manager");
2
3Versuchen Sie es
4{
5 prinPerm.Demand();
6
7 //etwas tun
8}
9fang
10{
11 //Fehlerbehandlung
12}
Die dritte Methode ähnelt der Deklarationsmethode in der Berechtigungseinstellung:
1private void DecPermButton_Click(object sender, System.EventArgs e)
2{
3 Versuche
4 {
5 performManagerAction();
6 // etwas tun
7}
8 Fang
9 {
10 // Fehlerbehandlung
11 }
12}
13
14[PrincipalPermission(SecurityAction.Demand, Role="Manager")]
15void performManagerAction()
16{
17}
Ein weiterer wichtiger Aspekt der Sicherheit ist die Verschlüsselung. Ich habe heute keine Zeit zum Schreiben, ich werde an einem anderen Tag darüber sprechen.