Richtlinien für das Schreiben von sicherem Code

Beweisbasierte Sicherheitsrichtlinien und Codezugriffssicherheit sind äußerst effiziente Verfahren für die Implementierung von Sicherheit. Für den Großteil des Anwendungscodes kann einfach die von .NET Framework implementierte Infrastruktur verwendet werden. In einigen Fällen ist jedoch zusätzliche anwendungsspezifische Sicherheit erforderlich, die entweder durch die Erweiterung des Sicherheitssystems oder den Einsatz neuer Ad-Hoc-Methoden erreicht werden kann.

Mithilfe der von .NET Framework durchgesetzten Berechtigungen und sonstigen durchgesetzten Berechtigungen im Code sollten Sie Hindernisse einrichten, um zu vermeiden, dass bösartiger Code unberechtigt Daten abruft oder andere unerwünschte Aktionen durchführt. Darüber hinaus müssen Sie für sämtliche erwarteten Szenarien, in denen mit vertrauenswürdigem Code gearbeitet wird, ein ausgewogenes Verhältnis zwischen Sicherheit und Verwendbarkeit erzielen.

In diesem Abschnitt erhalten Sie eine Übersicht über die verschiedenen Möglichkeiten, Code in das Sicherheitssystem zu integrieren.

HinweisHinweis

In .NET Framework, Version 4 wurden erhebliche Änderungen am Sicherheitsmodell und an der Terminologie von .NET Framework vorgenommen. Weitere Informationen zu diesen Änderungen finden Sie unter Änderungen der Sicherheit in .NET Framework 4.

Sicherheitsneutraler Code

Sicherheitsneutraler Code hat keine explizite Beziehung zum Sicherheitssystem. Er kann mit jeder erhaltenen Berechtigung ausgeführt werden. Wenn in einer Anwendung keine Sicherheitsausnahmen abgefangen werden, die geschützten Vorgängen (z. B. Verwenden von Dateien, Arbeiten im Netzwerk usw.) zugewiesen sind, kann dies zu unbehandelten Ausnahmen führen. Sicherheitsneutraler Code kann die Vorteile der .NET Framework-Sicherheitstechnologien dennoch nutzen.

Eine sicherheitsneutrale Bibliothek weist besondere Merkmale auf, mit denen Sie vertraut sein sollten. Angenommen, die Bibliothek stellt API-Elemente bereit, die Dateien verwenden oder nicht verwalteten Code aufrufen. Wenn der Code nicht über die entsprechende Berechtigung verfügt, kann er nicht wie gewünscht ausgeführt werden. Dies allein ist jedoch nicht ausreichend, darüber hinaus muss sämtlicher Anwendungscode, der diesen Code aufruft, ebenfalls über die entsprechende Berechtigung verfügen. Wenn der aufrufende Code nicht über die richtige Berechtigung verfügt, tritt beim Sicherheitsstackwalk für den Codezugriff eine SecurityException auf.

Anwendungscode, der keine wiederverwendbare Komponente darstellt

Für Code einer Anwendung, die nicht von anderem Code aufgerufen wird, gelten nur einfache Sicherheitsanforderungen, und es ist möglicherweise keine spezielle Codierung erforderlich. Beachten Sie jedoch, dass der Code von bösartigem Code aufgerufen werden kann. Der Zugriff von bösartigem Code auf Ressourcen kann zwar durch Codezugriffssicherheit verhindert werden, dennoch könnten dabei die Werte von Feldern oder Eigenschaften ausgelesen werden, die u. U. vertrauliche Daten enthalten.

Wenn der Code Benutzereingaben über das Internet oder aus anderen unzuverlässigen Ressourcen akzeptiert, müssen Sie diesen außerdem vor böswilligen Eingaben schützen.

Implementierung von verwalteten Wrappern für systemeigenen Code

In diesem Szenario werden normalerweise komfortable Funktionen in systemeigenem Code implementiert, der für verwalteten Code zugänglich gemacht werden soll. Verwaltete Wrapper können unkompliziert über Plattformaufruf oder über COM-Interop geschrieben werden. Dabei müssen Aufrufer der Wrapper für einen erfolgreichen Aufruf über Rechte für nicht verwalteten Code verfügen. Entsprechend der Standardrichtlinie bedeutet dies, dass aus einem Intranet oder dem Internet heruntergeladener Code nicht mit den Wrappern ausgeführt wird.

Anstatt allen Anwendungen, die diese Wrapper verwenden, Rechte für nicht verwalteten Code zu erteilen, empfiehlt es sich, diese Rechte nur dem Wrappercode zuzuweisen. Wenn die zugrunde liegenden Funktionen keine Ressourcen verfügbar machen und die Implementierung entsprechend sicher ist, muss der Wrapper lediglich seine Rechte bestätigen, sodass jeglicher Code durch den Wrapper Aufrufe vornehmen kann. Bei der Beteiligung von Ressourcen sollte der Sicherheitscode auf dieselbe Weise wie der Bibliothekscode geschrieben werden, der im nächsten Abschnitt behandelt wird. Da der Wrapper potenziell Aufrufer für diese Ressourcen verfügbar macht, muss die Sicherheit des systemeigenen Codes durch den Wrapper gründlich überprüft werden.

Bibliothekscode, der geschützte Ressourcen verfügbar macht

Die folgende Herangehensweise beim Schreiben von Sicherheitscode ist die effizienteste und daher, bei falscher Ausführung, gleichzeitig die risikoreichste: Die Bibliothek fungiert hier als Schnittstelle für anderen Code, der auf bestimmte Ressourcen zugreift, die auf andere Weise nicht zugänglich sind, so wie die .NET Framework-Klassen die Berechtigungen für die von ihnen verwendeten Ressourcen erzwingen. Bei jedem Verfügbarmachen einer Ressource muss der Code zunächst die der Ressource entsprechende Berechtigung fordern, d. h. eine Sicherheitsüberprüfung durchführen, und anschließend normalerweise seine Rechte zum Durchführen des eigentlichen Vorgangs bestätigen.

Verwandte Themen

Titel

Beschreibung

Gewusst wie: Ausführen von teilweise vertrauenswürdigem Code in einer Sandbox

Erklärt, wie eine teilweise vertrauenswürdige Anwendung in einer beschränkten Sicherheitsumgebung, in der die gewährten Codezugriffsberechtigungen eingeschränkt sind, ausgeführt wird.

Berechtigungsanforderungen

Beschreibt die Interaktion mit dem Sicherheitssystem von .NET Framework mithilfe von Sicherheitsanforderungen.

Sichern von Statusdaten

Beschreibt, wie private Member geschützt werden.

Sichern des Methodenzugriffs

Beschreibt, wie Methoden vor dem Zugriff durch teilweise vertrauenswürdigen Code geschützt werden.

Sichern von Wrappercode

Erläutert Sicherheitsaspekte für Code, der anderen Code umschließt.

Sicherheit und schreibgeschützte öffentliche Arrayfelder

Beschreibt Sicherheitsaspekte für Code, der öffentliche schreibgeschützte Arrays in .NET Framework-Bibliotheken verwendet.

Sichern der Ausnahmebehandlung

Behandelt Sicherheitsaspekte bei der Behandlung von Ausnahmen.

Sicherheit und Benutzereingaben

Behandelt Sicherheitsaspekte bei Anwendungen, die Benutzereingaben akzeptieren.

Überlegungen zu Sicherheit und Remoting

Behandelt Sicherheitsaspekte bei Anwendungen, die über Anwendungsdomänen hinweg kommunizieren.

Sicherheit und Serialisierung

Behandelt Sicherheitsaspekte beim Serialisieren von Objekten.

Sicherheit und Racebedingungen

Beschreibt Verfahren zur Vermeidung von Racebedingungen im Code.

Sicherheit und dynamische Codegenerierung

Beschreibt Sicherheitsaspekte bei Anwendungen, in denen Code dynamisch erstellt wird.

Problematische Berechtigungen und Richtlinienverwaltung

Erläutert Berechtigungen, die möglicherweise das Umgehen der Sicherheit zulassen.

Probleme mit der Sicherheit beim Setup

Enthält Überlegungen zum Testen und Einrichten einer Anwendung.

Sicherheit für ASP.NET-Webanwendungen

Beschreibt ausführlich die Sicherheit in ASP.NET und stellt Anleitungen für die Anwendung im Code bereit.

Codezugriffssicherheit

Beschreibt detailliert die Codezugriffssicherheit in .NET Framework und gibt Hinweise zu ihrer Anwendung im Code.

Rollenbasierte Sicherheit

Beschreibt ausführlich die rollenbasierte Sicherheit in .NET Framework und stellt Anleitungen für die Verwendung im Code bereit.