.NET Framework 4.5
Grundlagen der Codezugriffssicherheit

Jede Anwendung für die Common Language Runtime (also jede verwaltete Anwendung) muss mit dem Sicherheitssystem der Laufzeit interagieren. Wenn eine verwaltete Anwendung geladen wird, gewährt der Host ihr automatisch einen Satz von Berechtigungen. Diese Berechtigungen werden von den lokalen Sicherheitseinstellungen des Hosts oder der Sandbox bestimmt, in der die Anwendung enthalten ist. In Abhängigkeit von diesen Berechtigungen wird die Anwendung entweder ordnungsgemäß ausgeführt, oder es wird eine Sicherheitsausnahme generiert.

Der Standardhost für Desktopanwendungen ermöglicht, dass Code mit voller Vertrauenswürdigkeit ausgeführt wird. Wenn die Anwendung also für den Desktop konzipiert ist, verfügt sie über einen uneingeschränkten Berechtigungssatz. Andere Hosts oder Sandboxes stellen für Anwendungen einen eingeschränkten Berechtigungssatz bereit. Da sich der Berechtigungssatz von Host zu Host unterscheiden kann, müssen Sie die Anwendung so entwerfen, dass sie nur die vom Zielhost zugelassenen Berechtigungen verwendet.

Sie müssen mit den folgenden Konzepten der Codezugriffssicherheit vertraut sein, um effiziente Anwendungen für die Common Language Runtime schreiben zu können:

  • Typsicherer Code: Als typsicherer Code wird Code bezeichnet, der nur auf genau definierte, zulässige Weise auf Typen zugreift. Bei typsicherem Code ist z. B. bei einem gültigen Objektverweis der Speicherzugriff an festen Offsets möglich, die tatsächlichen Feldmembern entsprechen. Wenn der Code auf den Speicher an beliebigen Offsets außerhalb des Gültigkeitsbereichs des Speichers zugreift, der zu den öffentlich verfügbar gemachten Feldern des Objekts gehört, ist er nicht typsicher. Um die Vorteile der Codezugriffssicherheit für Code nutzbar zu machen, müssen Sie einen Compiler verwenden, der nachweislich typsicheren Code generiert. Weitere Informationen finden Sie im Abschnitt Schreiben von überprüfbar typsicherem Code weiter unten in diesem Thema.

  • Imperative und deklarative Syntax: Code für die Common Language Runtime kann mit dem Sicherheitssystem durch Anfordern von Berechtigungen, Fordern bestimmter Berechtigungen von Aufrufern sowie Überschreiben bestimmter Sicherheitseinstellungen (bei entsprechenden Privilegien) interagieren. Für die programmgesteuerte Interaktion mit dem Sicherheitssystem von .NET Framework verwenden Sie zwei verschiedene Syntaxformen: die deklarative und die imperative Syntax. Deklarative Aufrufe werden mithilfe von Attributen vorgenommen, imperative Aufrufe werden mit neuen Instanzen von Klassen im Code ausgeführt. Einige Aufrufe können nur imperativ durchgeführt werden, andere können nur deklarativ durchgeführt werden. Es gibt jedoch auch Aufrufe, die auf beide Arten durchgeführt werden können. Weitere Informationen finden Sie unter Deklarative Sicherheit und Imperative Sicherheit.

  • Sichere Klassenbibliotheken: Eine sichere Klassenbibliothek stellt mithilfe von Sicherheitsforderungen sicher, dass die Aufrufer der Bibliothek über die Berechtigung für den Zugriff auf die verfügbar gemachten Ressourcen der Bibliothek verfügen. Eine sichere Klassenbibliothek kann z. B. über eine Methode zum Erstellen von Dateien verfügen, die fordert, dass ihre Aufrufer über die Berechtigung zum Erstellen von Dateien verfügen. .NET Framework besteht aus sicheren Klassenbibliotheken. Sie müssen die erforderlichen Berechtigungen für den Zugriff auf sämtliche Klassenbibliotheken, die der Code verwendet, berücksichtigen. Weitere Informationen finden Sie im Abschnitt Verwenden von sicheren Klassenbibliotheken weiter unten in diesem Thema.

  • Transparenter Code: Unter .NET Framework 4 und höher müssen Sie zusätzlich zum Identifizieren bestimmter Berechtigungen auch festlegen, ob der Code sicherheitstransparent ausgeführt werden soll. Mit sicherheitstransparentem Code können keine Typen oder Member aufgerufen werden, die als sicherheitsrelevant identifiziert wurden. Diese Regel gilt sowohl für voll vertrauenswürdige Anwendungen als auch für teilweise vertrauenswürdige Anwendungen. Weitere Informationen finden Sie unter Sicherheitstransparenter Code.

Schreiben von überprüfbar typsicherem Code

Bei der Just-in-Time-Kompilierung (JIT) wird ein Überprüfungsverfahren angewendet, bei dem Code untersucht und versucht wird, dessen Typsicherheit zu ermitteln. Code, bei dessen Überprüfung Typsicherheit festgestellt wird, wird als überprüfbar typsicherer Code bezeichnet. Aufgrund der Beschränkungen des Überprüfungsvorgangs oder des Compilers kann Code typsicher, jedoch möglicherweise nicht überprüfbar typsicher sein. Nicht alle Sprachen sind typsicher, und einige Sprachcompiler, z. B. Microsoft Visual C++, können keinen überprüfbar typsicheren verwalteten Code generieren. Ob der verwendete Sprachcompiler überprüfbar typsicheren Code generiert, können Sie der Dokumentation des Compilers entnehmen. Wenn Sie einen Sprachcompiler verwenden, der überprüfbar typsicheren Code nur bei Vermeidung bestimmter Sprachkonstrukte generiert, empfiehlt es sich, mit dem PEVerify-Tool zu ermitteln, ob der Code überprüfbar typsicher ist.

Nicht überprüfbar typsicherer Code kann ausgeführt werden, wenn die Sicherheitsrichtlinien zulassen, dass der Code die Überprüfung umgeht. Da Typsicherheit ein wesentlicher Bestandteil der Isolation von Assemblys zur Laufzeit ist, kann Sicherheit nicht zuverlässig erzwungen werden, wenn die Regeln für die Typsicherheit durch Code verletzt werden. In der Standardeinstellung ist die Ausführung von nicht typsicherem Code nur zulässig, wenn er vom lokalen Computer stammt. Aus diesem Grunde muss mobiler Code typsicher sein.

Verwenden von sicheren Klassenbibliotheken

Wenn der Code Berechtigungen anfordert und erhält, die von der Klassenbibliothek gefordert werden, wird ihm der Zugriff auf die Bibliothek gewährt und die verfügbar gemachten Ressourcen der Bibliothek werden vor nicht autorisiertem Zugriff geschützt. Wenn der Code nicht über die entsprechenden Berechtigungen verfügt, wird der Zugriff auf die Klassenbibliothek nicht gewährt, und bösartiger Code ist nicht in der Lage, den Code zu verwenden, um indirekt auf geschützte Ressourcen zuzugreifen. Anderer Code, der den Code aufruft, muss ebenfalls über die Berechtigung für den Zugriff auf die Bibliothek verfügen. Wenn dies nicht der Fall ist, wird die Ausführung des aufgerufenen Codes ebenfalls verhindert.

Die Codezugriffssicherheit schließt die Möglichkeit menschlicher Fehler beim Schreiben von Code nicht aus. Wenn jedoch die Anwendung mithilfe von sicheren Klassenbibliotheken auf geschützte Ressourcen zugreift, ist das Sicherheitsrisiko für Anwendungscode geringer, da Klassenbibliotheken eingehend auf mögliche Sicherheitsprobleme überprüft werden.

Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur -Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die -Website verlassen.

Möchten Sie teilnehmen?