2009-04-03 14 views
1

Ich lese gerade für die MCTS Prüfung und kämpfe ein wenig mit den Kapiteln über Sicherheit. Wie üblich ist es, die CAS-Funktionen zu nutzen? Für welche Art von Anwendung wird es verwendet?Für welche Art von Anwendungen verwenden Sie die CAS .net-Sicherheitsfunktionen?

Ich kann nicht sagen, dass ich die Möglichkeiten verpasst habe, die dieses System bei der Entwicklung nativer Anwendungen bietet. Ist diese Art von Sicherheit für verwaltete Anwendungen wichtiger?

Antwort

1

Das Verständnis der CAS-Sicherheit ist wichtig für die Entwicklung und Architektur von .NET-Anwendungen und -Bibliotheken.

Eine gute Möglichkeit, die CAS-Sicherheit zu verstehen, besteht darin, über das Problem nachzudenken, dem die Benutzer beim Schreiben von Bibliotheken gegenüberstehen, die auf Client-Computern installiert werden. Wie schützt man diese Bibliotheken vor Missbrauch durch nicht vertrauenswürdigen Code (z. B. EvilMethod() in Evil.dll in einem .xbap unter www.evil.com)?

CAS beantwortet diese Frage durch Kontrollen anhand von Eigenschaften des anrufenden Code, wie seine starken Namen zu tun, die durch das System zu dem anrufenden Code erteilten Berechtigungen, wird die Zone Code ausgeführt wird, von etc.

I Ich gebe Ihnen ein Beispiel: Sie haben die Aufgabe, eine spezielle Druckbibliothek zu entwickeln, die auf den Client-Rechnern eines großen Unternehmens installiert (GAC) wird, und diese Bibliothek darf nur von Methoden aufgerufen werden, die in Baugruppen, die der Firma gehören.

CAS kann Ihnen hier helfen. Grundsätzlich sollten Sie in der Lage sein, den starken Namen der Anrufer in den öffentlich exponierten Methoden zu überprüfen:

void Print(string toPrint) 
{ 
    new System.Security.Permissions.StrongNameIdentityPermission(blob, "My Company Inc.", new Version("1.0.0.0")).Demand(); 
    // print code 
} 

Nun sagen Sie, ein Verfahren auszusetzen haben, eine Testseite zu drucken. Möglicherweise möchten Sie, dass diese Methode von allen aufgerufen wird, nicht nur von den Assemblys Ihres Unternehmens. Was ist zu tun?

Sie können Assert(), um die Erlaubnis, so dass der Stapel zu Fuß (Nachfrage) wird in dem Rahmen geschnitten und überprüft nicht, Ihre Anrufer:

void PrintTestPage() 
{ 
    new System.Security.Permissions.StrongNameIdentityPermission(blob, "My Company Inc.", new Version("1.0.0.0")).Assert(); 
    Print("Test Page"); 
} 

Sehen Sie, wie wir nur Assert() die Erlaubnis, wenn aussetzt eine sichere Version einer API (denke an ein Assert() wie ein Frame, der sagt: "Hör auf, meine Anrufer zu überprüfen! - Ich weiß, was ich mache, und ich bin sicher, von bösartigem Code angerufen zu werden").

This ist eine gute Lektüre für das Thema.

+0

Warum gibt es nicht so etwas für native Bibliotheken? Liegt es daran, dass es so viel einfacher ist, "ausnutzbaren Code" in .net-Bibliotheken zu finden, als in nativen DLLs? (viel einfacher zu zerlegen?) – Vegar

1

Ich denke, dass Sie an CAS in der falschen Weise denken. Ich bin vielleicht nicht auf diese Situation gestoßen, aber aus meiner Erfahrung ist CAS nichts, das Sie in Ihrer Anwendung verwenden werden, um die Anwendung gegen Angreifer zu schützen. CAS ist in der Lage, das System des Benutzers vor bösartiger Software zu schützen.

Ihre .Net-Anwendung muss unabhängig davon, ob Sie es wünschen oder nicht, die Berechtigung zum Ausführen bestimmter Aufgaben auf dem System anfordern. Ein Beispiel dafür ist die FilePermission. Bevor eine Datei gelesen oder geschrieben wird, muss die Anwendung fragen, ob sie das überhaupt kann. Dies ist natürlich nur ein Beispiel für viele Berechtigungen im .NET-Framework.

Die Anwendungen, die am häufigsten von CAS betroffen sind, sind solche, die online gehostet werden und daher weniger vertrauenswürdig sind als die auf Ihrem lokalen Computer gehosteten Anwendungen. Dies umfasst Anwendungen mit einmaligem Klicken, gehostete Objekte mit Internet Explorer (die COM/active-x-Objekten sehr ähnlich sind), xbap und Assemblies/exes, die von einer Netzwerkfreigabe geladen wurden.

Wie ich schon sagte, ist dies ein Benutzer-System vor potenziell bösartiger Software zu schützen. Also, nein, Sie werden keine Möglichkeiten verpasst haben, die dieses System bietet, während Sie native Anwendungen schreiben. In der Tat, wenn Sie wie ich sind, werden Sie dieses System verfluchen, wenn es Sie in den Hintern beißt. Allerdings ist diese Art von Sicherheit für verwaltete Apps nicht unbedingt wichtiger. In der Realität wäre es nett, von einem Virusschutz/Sicherheitsstandpunkt aus, wenn nicht gemanagte Apps durch ein solches Sicherheitstor gehen müssten. Ich denke, das ist es, was Microsoft mit Vista versucht hat, für das, was es wert ist.