Einführung in die Codezugriffssicherheit
Mithilfe der Codezugriffssicherheit wird der Zugriff von Code auf geschützte Ressourcen und Operationen beschränkt. In .NET Framework führt die Codezugriffssicherheit folgende Funktionen aus:
Sie definiert Berechtigungen und Berechtigungssätze, die das Recht des Zugriffs auf bestimmte Systemressourcen darstellen.
Sie ermöglicht Administratoren das Konfigurieren von Sicherheitsrichtlinien durch Zuweisen von Berechtigungssätzen zu Gruppen von Code (Codegruppen).
Sie ermöglicht es Code, die für die Ausführung erforderlichen Berechtigungen und weitere empfehlenswerte Berechtigungen anzufordern, und legt darüber hinaus die Berechtigungen fest, die dem Code nicht erteilt werden dürfen.
Sie erteilt jeder geladenen Assembly auf Grundlage der vom Code angeforderten Berechtigungen und der durch die Sicherheitsrichtlinie zugelassenen Operationen die entsprechenden Berechtigungen.
Sie ermöglicht es, dass ein Benutzer für das Aufrufen von Code über bestimmte Berechtigungen verfügen muss.
Sie ermöglicht es, dass ein Benutzer für das Aufrufen von Code über eine digitale Signatur verfügen muss, sodass ausschließlich Aufrufer von einer bestimmten Organisation oder einer bestimmten Site den geschützten Code aufrufen können.
Sie erzwingt Einschränkungen für Code zur Laufzeit, indem die erteilten Berechtigungen der einzelnen Aufrufer in der Aufrufliste mit den benötigten Berechtigungen für den Aufruf verglichen werden.
Um zu bestimmen, ob Code über die erforderliche Berechtigung zum Zugreifen auf eine Ressource oder zum Ausführen einer Operation verfügt, durchläuft das Sicherheitssystem der Laufzeit die Aufrufliste und vergleicht die erteilten Berechtigungen der einzelnen Aufrufer mit der geforderten Berechtigung. Wenn ein Aufrufer in der Aufrufliste nicht über die geforderte Berechtigung verfügt, wird eine Sicherheitsausnahme ausgelöst, und der Zugriff wird verweigert. Der Stackwalk soll Täuschungsmanöver verhindern, bei denen wenig vertrauenswürdiger Code hoch vertrauenswürdigen Code aufruft und dadurch unzulässige Operationen ausführt. Das Anfordern von Berechtigungen für alle Aufrufer zur Laufzeit setzt die Leistung herab, ist jedoch unerlässlich, um Code vor Täuschungsmanövern durch wenig vertrauenswürdigen Code zu schützen. Zum Optimieren der Leistung können Sie festlegen, dass der Code weniger Stackwalks durchführt. Dabei müssen Sie jedoch darauf achten, dass Sie kein Sicherheitsrisiko eingehen.
Die folgende Abbildung veranschaulicht den Stackwalk, der entsteht, wenn eine Methode in Assembly A4 fordert, dass ihre Aufrufer über Berechtigung B verfügen.
Sicherheitsstackwalk
Bei einem typischen Einsatz der Codezugriffssicherheit downloadet eine Anwendung ein Steuerelement von der Website eines lokalen Intranethosts direkt auf den Client, sodass der Benutzer Daten eingeben kann. Das Steuerelement wird mithilfe einer installierten Klassenbibliothek erstellt. Im Folgenden werden einige Einsatzmöglichkeiten der Codezugriffssicherheit in diesem Szenario dargestellt:
Der Administrator kann die Sicherheitsrichtlinien vor der Ladezeit so konfigurieren, dass Code besondere Autorität erteilt wird (eine höhere Berechtigung, als Code aus dem lokalen Intranet normalerweise erhalten würde), wenn er über eine bestimmte digitale Signatur verfügt. In der Standardeinstellung wird der vordefinierte benannte Berechtigungssatz LocalIntranet sämtlichem Code zugewiesen, der aus dem lokalen Intranet gedownloadet wird.
Zur Ladezeit erteilt die Laufzeit dem Steuerelement keine höheren Berechtigungen als die dem benannten Berechtigungssatz LocalIntranet zugewiesenen, es sei denn, das Steuerelement weist eine vertrauenswürdige Signatur auf. In diesem Fall werden ihm aufgrund der vertrauenswürdigen Signatur die dem Berechtigungssatz LocalIntranet zugewiesenen sowie möglicherweise einige weitere Berechtigungen zugewiesen.
Wenn ein Aufrufer (in diesem Falle das gehostete Steuerelement) zur Laufzeit auf eine Bibliothek zugreift, die geschützte Ressourcen verfügbar macht oder nicht verwalteten Code aufruft, nimmt die Bibliothek eine Sicherheitsforderung vor, durch die die Berechtigungen des Aufrufers auf die entsprechenden erforderlichen Berechtigungen überprüft werden. Diese Sicherheitsüberprüfungen verhindern, dass das Steuerelement unzulässige Aktionen auf den Computern des Clients ausführt.